Skip to content
Agentmart
Submit a tool

og-inspect

Inspect a URL's Open Graph and Twitter Card metadata and render a styled HTML page showing how the link unfurls on Facebook, X/Twitter, LinkedIn…

Skill by sejas

IndexedMIT★ 2
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/sejas-og-inspect

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Inspect a URL's Open Graph and Twitter Card metadata and render a styled HTML page showing how the link unfurls on Facebook, X/Twitter, LinkedIn, Slack/Discord, and Tumblr. Also prints a JSON summary to stdout. Use when the user asks to "preview a link", "check OG tags", "inspect Open Graph", "see how a URL looks when shared", or invokes `/og-inspect <url>`.

Use cases: frontend, productivity

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/og-inspect

What's inside

Skill name
og-inspect
Description
Inspect a URL's Open Graph and Twitter Card metadata and render a styled HTML page showing how the link unfurls on Facebook, X/Twitter, LinkedIn, Slack/Discord, and Tumblr. Also prints a JSON summary to stdout. Use when the user asks to "preview a link", "check OG tags", "inspect Open Graph", "see how a URL looks when shared", or invokes `/og-inspect <url>`.
License
MIT
Instructions
486 lines in SKILL.md · view on GitHub

Before installing

  • Instructions call the network

Agent Skills spec issues

  • allowed-tools: must be a space-separated string

Files (1)

  • SKILL.md

SKILL.md (first lines)

# /og-inspect — Open Graph / share-card inspector

Given a URL, fetch the page, extract Open Graph + Twitter Card metadata, render a styled HTML preview showing how the link unfurls on Facebook, X/Twitter, LinkedIn, Slack/Discord, and Tumblr, and print a JSON summary. Like https://www.opengraph.xyz/ but local.

## Workflow

1. **Get the URL.** The user invokes `/og-inspect <url>`. If no URL is provided, ask: "Which URL should I inspect?"

2. **Run the inspector.** Execute the bash block below with the URL as `$1`. It fetches the page with `curl`, parses meta tags with Python stdlib (`html.parser`), writes a styled HTML preview to `~/claude.nosync/og-previews/YYYY-MM-DD-<host>-<slug>.html`, prints the absolute path of the HTML file to stderr, and prints the JSON summary to stdout.

3. **Open the HTML file** in the default browser with `open "<path>"`.

4. **Print the JSON** result to the terminal (it is already on stdout from step 2 — relay it to the user).

## The script

Run this with the URL as the first argument. Treat the URL as untrusted input — the script already does shell-safe quoting and no `eval`.

```bash
set -uo pipefail

URL="${1:-}"
if [ -z "$URL" ]; then
  echo "usage: og-inspect <url>" >&2
  exit 1
fi
# Normalize: prepend https:// if no scheme
if ! printf '%s' "$URL" | grep -qE '^https?://'; then
  URL="https://$URL"
fi

OUTDIR="$HOME/claude.nosync/og-previews"
mkdir -p "$OUTDIR"
TMP_HTML="$(mktemp -t og-inspect.XXXXXX).html"
TMP_META="$(mktemp -t og-inspect.XXXXXX).meta"
TMP_JSON="$(mktemp -t og-inspect.XXXXXX).json"
TMP_PATH="$(mktemp -t og-inspect.XXXXXX).path"
trap 'rm -f "$TMP_HTML" "$TMP_META" "$TMP_JSON" "$TMP_PATH"' EXIT

# Fetch. Always emit the meta file even on failure so Python can render a stub.
# On TLS verification failure (curl exit 60), retry with -k and flag a warning.
TLS_INSECURE=0
CURL_COMMON=( -sSL
  -A "Mozilla/5.0 (compatible; OGInspectBot/1.0)"
  -H "Accept: text/html,application/xhtml+xml"
  --max-time 15
  --max-filesize 5000000
  -w '%{http_code}\n%{url_effective}\n%{content_type}\n'
  -o "$TMP_HTML" )
curl "${CURL_COMMON[@]}" "$URL" > "$TMP_META" 2>/dev/null
RC=$?
if [ "$RC" -eq 60 ]; then
  TLS_INSECURE=1
  curl -k "${CURL_COMMON[@]}" "$URL" > "$TMP_META" 2>/dev/null
  RC=$?
fi
if [ "$RC" -ne 0 ]; then
  printf '0\n%s\n\n' "$URL" > "$TMP_META"
fi

# Parse + render. Python writes JSON to TMP_JSON and the output filepath to TMP_PATH.
python3 - "$URL" "$TMP_HTML" "$TMP_META" "$OUTDIR" "$TLS_INSECURE" >"$TMP_JSON" 2>"$TMP_PATH" <<'PY'
import sys, os, json, html, re
from datetime import datetime, timezone
from html.parser import HTMLParser
from urllib.parse import urljoin, urlparse

orig_url, tmp_html, tmp_meta, outdir, tls_insecure = sys.argv[1:6]
tls_insecure = tls_insecure == "1"

with open(tmp_meta) as f:
    lines = f.read().splitlines()
status_str = lines[0] if len(lines) > 0 else "0"
final_url  = lines[1] if len(lines) > 1 and lines[1] else orig_url
ctype      = lines[2] if len(lines) > 2 else ""

# Decode body with charset detection (file may be missing/empty if curl failed)
try:
    with open(tmp_html, "rb") as f:
        raw = f.read()
except FileNotFoundError:
    raw = b""
charset = None
m = re.search(r"charset=([\w\-]+)", ctype, re.I)
if m: charset = m.group(1)
if not charset:
    mm = re.search(rb'<meta[^>]+charset=["\']?([\w\-]+)', raw[:4096], re.I)
    if mm:
        try: charset = mm.group(1).decode("ascii")
        except Exception: pass
charset = charset or "utf-8"
try:
    text = raw.decode(charset, errors="replace")
except LookupError:
    text = raw.decode("utf-8", errors="replace")
text = text.replace("\x00", "")

class MetaParser(HTMLParser):
    def __init__(self):
        super().__init__()
        self.metas, self.links = [], []
        self.title = None
        self._in_title = False
        self._title_parts = []
    def handle_starttag(self, tag, attrs):
        d = {k.lower(): v for k, v in attrs}
        if tag == "meta":
            prop = d.get("property") or d.get("name") or d.get("itemprop")
            content = d.get("content")
            if prop and content is not None:
                self.metas.append((prop.lower(), content))
        elif tag == "link":
            rel, href = d.get("rel"), d.get("href")
            if rel and href: self.links.append((rel.lower(), href))
        elif tag == "title":
            self._in_title = True
    def handle_endtag(self, tag):
        if tag == "title":
            self._in_title = False

From sejas/ai-code-skills, MIT.

More from sejas/ai-code-skills

Signals

Stars
2
Forks
1
Open issues
0
Last commit (this folder)
May 14, 2026 (5 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from sejas

Cite this page

og-inspect skill. Agent Mart. https://agentmart.dev/skills/sejas-og-inspect (last updated 2026-10-24)