agentleFS
shabarabashabaraba/vibing.nvim/.claude/skills/remote-screenshot/SKILL.md

remote-screenshot

Skill13 starsChanged 11 months agoMITView on GitHub

Applies only to Claude Code on the web. CLAUDECODEREMOTE must be true; the script refuses to run otherwise and that refusal is correct, not an obstacle to work around. If you are on a local machine, stop and say so — the user can see their own editor, and starting a hidden second Neovim to photograph it helps nobody. Then hand the PNG to the user with SendUserFile. capture.sh shoot prints the exact pxbox.py command to run. Run it. A…

Files
SKILL.md

Screenshotting Neovim in the web container

Applies only to Claude Code on the web. CLAUDE_CODE_REMOTE must be true; the script refuses to run otherwise and that refusal is correct, not an obstacle to work around. If you are on a local machine, stop and say so — the user can see their own editor, and starting a hidden second Neovim to photograph it helps nobody.

The sequence

S=scripts/screenshot
$S/capture.sh start --cols 150 --rows 40 lua/vibing/core/utils/git_snapshot.lua
$S/capture.sh keys ':VibingChat right' Enter
$S/capture.sh shoot /tmp/shot.png
python3 $S/pxbox.py /tmp/shot.png --expect-height 798   # (rows - 2) * 21
$S/capture.sh stop

Then hand the PNG to the user with SendUserFile.

capture.sh shoot prints the exact pxbox.py command to run. Run it. A capture whose bottom rows were clipped is a plausible-looking screenshot of a slightly different screen, and the difference between 21px and 1px of painted height does not survive downscaling — you will not catch it by looking, and you will describe a statusline that is not in the image. pxbox.py exits non-zero when the painted region is short.

scripts/screenshot/README.md has the mechanism, the headless_shell trap, and why each terminal cell is its own element. Read it if something renders wrong.

Do not fabricate the contents

capture-pane returns the actual screen buffer, which is the whole point: the frontmatter, statusline path and highlighting in the image are Neovim's own output. Two ways to throw that away, both of which produce an image that lies:

  • Writing a transcript into the chat buffer to make it look busy. Text you typed is not the renderer's output. If a screenshot needs a real assistant turn — tool headers, ### Modified Files, streaming — that costs real tokens, so ask first and say that is what the image shows.
  • Describing what the screenshot shows without reading it back. Open the PNG and look before you narrate it.

Typing an unsent ## User message is fine and authentic — that is a real editor state a user reaches by typing.

Housekeeping

start writes a chat into the project's real .vibing/chat/, which is git-ignored, so nothing lands in a commit. Still run git status before committing, and capture.sh stop when done — a forgotten session keeps a Neovim alive for the rest of the container's life.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.