skills/show-me/SKILL.md
Visual context sharing. LOAD when user says "show me", "open in browser", or "look at".
npx skillsauth add mbailey/show-me show-meInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Display content for users (files, URLs, commands) or observe their screen context.
The plugin ships two top-level commands:
show-me — display content for the user (files in Neovim, URLs in a browser, commands in a tmux pane)look-at — observe what the user is currently viewing (screen context, active panes)| Command | Example | Description |
|---------|---------|-------------|
| show-me <file> | show-me README.md:42 | Open file in Neovim at line |
| show-me <file> | show-me main.py:10-20 | Open file highlighting line range |
| show-me <url> | show-me github.com | Open URL in browser |
| show-me "cmd:..." | show-me "cmd:git log" | Run command in shell pane |
| look-at | look-at -l 100 | Capture pane with last 100 lines of scrollback |
| look-at -H | look-at -H | Show tmux hierarchy only |
URLs go to Chrome MCP by default. The show-me command is a fallback.
User requests URL
↓
Check Chrome MCP available?
├─ Yes → navigate tool (interactive)
└─ No → show-me command (fallback)
mcp__claude-in-chrome__tabs_context_mcp(createIfEmpty=true)tabs_create_mcp + navigate tools for interactive controlshow-me command (opens default browser)Chrome MCP provides:
The show-me command is a fallback for when Chrome MCP is unavailable.
When showing code to the user, prefer ranges (file:start-end) over single lines (file:line).
A single line rarely provides enough context. When pointing out a function, a bug, a block of logic, or a diff location, show the full range so the user sees the complete picture.
| Instead of | Use |
|------------|-----|
| show-me main.py:42 | show-me main.py:38-55 (show the whole function) |
| show-me config.yaml:10 | show-me config.yaml:8-15 (show the relevant block) |
Rule of thumb: If you know the start line, find where the section ends and use a range.
AI assistants: Use bare show-me and look-at -- they're on PATH.
show-me README.md # Open file (uses user's default layout)
show-me src/main.py:42 # Open at line 42
show-me src/main.py:10-20 # Open highlighting lines 10-20 (preferred)
show-me bin/show-me#L124-162 # Highlight function (URL fragment syntax)
show-me https://github.com/repo # Open URL
show-me "cmd:git status" # Run command
show-me pane:15 # Focus pane
show-me --hold 60 README.md # Hold focus for 60s (visual conch)
show-me --layout right README.md # Open in split pane to the right
show-me --here "cmd:make test" # Split pane (default direction for type)
show-me --cwd /path/to/repo "cmd:make test" # Run cmd: in a specific directory
show-me --format json "cmd:make" # Run command, get a machine handle back
--cwd PATH runs a cmd: target in PATH instead of the caller's cwd
(wrapped as cd -- "<PATH>" && <cmd>). No-op for file/URL targets. A missing
directory is a hard error (show-me: --cwd: no such directory: <PATH>, no pane
created) — show-me never silently falls back to the caller's cwd.
Layout: You don't need to specify --layout — just call show-me <target>. The user's SHOW_LAYOUT env var controls where content appears. In split mode, subsequent file shows reuse the existing Neovim pane.
Following up on a cmd: you ran. The default human line ends with
[pane %NN]; --format json returns a one-line handle so you can inspect
the result instead of guessing:
show-me --format json "cmd:make test"
# {"pane":"%37","session":"main","window":"build","created":true,"status":"alive","cmd":"make test"}
tmux capture-pane -p -t %37 # read the output
Prefer --format json over scraping prose. Fields: pane (handle for
tmux capture-pane/send-keys), session/window (full names),
created (new vs reused), status (alive/exited:<code>/unknown),
cmd. See docs/commands.md for the full reference.
All four forms are supported for specifying lines:
show-me file:line # Single line
show-me file:start-end # Line range (preferred)
show-me file#Lline # URL fragment style
show-me file#Lstart-end # URL fragment range
look-at # Current pane
look-at -l 100 # Last 100 lines
look-at -H # Hierarchy only
look-at %15,%16 # Multiple panes
look-at window # All panes in window
This section provides additional details on Chrome MCP integration. See "Showing URLs - Default Behavior" above for the primary workflow.
Chrome requires user approval for new domains (security feature).
Best practices:
Common issue: If navigation times out, it's usually because the user didn't see or approve the Chrome domain permission prompt.
# Step 1: Check if Chrome MCP is connected
# Call: mcp__claude-in-chrome__tabs_context_mcp(createIfEmpty=true)
# Step 2: If connected, inform user and navigate
# "Opening in Chrome - you may need to approve domain permissions"
# Call: mcp__claude-in-chrome__tabs_create_mcp (get a new tab)
# Call: mcp__claude-in-chrome__navigate with the URL and tabId
# Step 3: If not connected or timeout, fall back to show-me command
show-me https://example.com
| Issue | Solution |
|-------|----------|
| tabs_context_mcp fails | Chrome extension not connected; use show-me command |
| Tab ID invalid | Call tabs_context_mcp to get fresh tab IDs |
| Extension disconnected mid-session | Graceful fallback to show-me command |
| No Chrome MCP tools available | MCP not configured; use show-me command |
To use Chrome MCP:
When the extension is not connected, tabs_context_mcp will fail, and you should fall back to the standard show-me command.
testing
Observe what the user is currently viewing (screen context). Use when the user says "look at my screen" or you need to verify what they're viewing.
tools
Displays files, URLs, command output or your tmux pane for the user to see. Use whenever USER makes a request like "show me" or "show yourself"
tools
Observe what the user is currently viewing (screen context)
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.