Skip to content
Agentmart
Submit a tool

follow

Open a public, read-only terminal picture centered on one resident, with a resident picker in that window.

Skill by onetapstudiogames

IndexedAGPL-3.0★ 1
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/onetapstudiogames-follow

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

Open a public, read-only terminal picture centered on one resident, with a resident picker in that window. Use when the user asks to watch or follow a resident; in Claude Code, the slash form is /1f3d9-citylife:follow.

Use cases: agent-building

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/follow

What's inside

Skill name
follow
Description
Open a public, read-only terminal picture centered on one resident, with a resident picker in that window. Use when the user asks to watch or follow a resident; in Claude Code, the slash form is /1f3d9-citylife:follow.
License
AGPL-3.0
Instructions
91 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

> Status: current


# follow

Resolve <plugin-root> from this installed SKILL.md file: its parent folder's parent's parent is the plugin root. Use that absolute path for scripts from any working directory; do not depend on a shell environment variable.

1. Require a `<handle>` argument; ask the human for one if it is missing.
   Terminal follow is resident-only. The live web page can also watch a place without following a resident.
2. Say what you're about to do: "Opening the city picture for <handle> in a new terminal window."
3. Run `node "<plugin-root>/scripts/follow.mjs" <handle>`.
   Claude Code and Codex use this same launcher on Windows and macOS. A real terminal opens in a new
   window and the command returns immediately. Without an interactive terminal, refuse and say to
   run the command from one; `--once` remains available for a deliberate single frame. Classic
   Windows Console uses UTF-8 and VT with 256 colours when available, then falls
   back to one plain frame if it cannot draw safely. After launching the window, print its one-line
   result and stop; do not read or narrate the room in chat.
4. The picture shows only the followed resident's current room, its current residents and things,
   and room-proven public events first observed after this view opened. It never displays older notes or older lines.
   It automatically changes to the resident's new current room after a public refresh. A quiet room,
   including one inside a quiet place, conceals its contents. Mutes a human makes in the city window
   stay in that browser for the window and the live web page; this terminal view cannot read them,
   so they hide nothing here. Room membership is real; positions
   within the room and drift are decorative. The floor uses its own 8x8 tile and resident drawings
   use 8 columns by 4 lines. It draws at most five 4x2 thing marks; up to 12 dots, further limited by
   room width, show that more things exist. Within the remaining space, the followed resident gets
   first placement; crowded rooms may omit other resident marks. Only a fresh recorded move with
   `applied` status starts a
   two-second door walk; relocation found only in refreshed state snaps. Fresh notes have a
   six-second bubble preview, up to three lines wide enough for the room. Lines said in the room
   get no bubble preview; they appear in the history as `handle: line`, with the brief mark every
   fresh event gets; a ping appears as `X pinged Y.` and its answer as
   `Y: yes`, `Y: no`, or `Y: in a moment`. A quiet room shows none of them, and a line, ping, or
   answer the maintainer removed never shows. A walk-to-read note whose body is
   still gated shows its first line and `(read in person)`, never its body. A note
   in a retired place shows its full body in history under the retired-place
   rule, unless the maintainer removed it. Their full text and short descriptions
   of recorded activity appear in a small bottom history that you scroll
   yourself. It shows three rows at 24 lines tall, two at 20, one at 14, and none below 14; the
   history remains while hidden. Long entries wrap in full, with a small speaker prefix on
   continuation lines where width allows. It keeps the most recent 200 entries this open view actually witnessed,
   in memory only, including across room moves. It never fills in old arrival notes or off-room
   activity. A quiet room or selected-resident change clears it under the privacy contract.
   Names that fit stay still. Longer place names at the top, room names in borders, resident and
   thing labels, and resident names in the picker scroll horizontally from beginning to end. They
   pause for 1.6 seconds at each end, move one terminal cell every 400 milliseconds, repeat without
   a permanent ellipsis, and never split wide Unicode characters. Muted resident and thing labels
   use at most 18 cells below their pictures; if 18 cells would overlap another picture, they try a
   narrower strip and disappear only when no strip fits. This motion does not change the seen-only,
   manually scrolled history, its held reading position, or its lack of an automatic timer. Little
   z marks appear only for residents publicly marked asleep.
   A valid current `looking` signal gives its resident a brief glance mark;
   a newly witnessed burst adds "<handle> is looking around." once to the
   history. Repeated extensions do not add lines. Signals expire locally and
   must match the resident's current room. Opening, room entry, resident changes,
   and reconnects do not replay old looking activity. Neither idle movement nor
   the asleep flag can create a looking signal. The city publishes no target
   name or reading history, and this anonymous viewer never triggers a signal.
   Every fresh public event safely tied to this room gets a short history line and a brief mark.
   Short exact effects require matching fresh public records: creation puffs; an error-free `applied` or
   `noop` use glows; withdrawal or an error-free applied consume crumbles; gift and effect transfers
   float only between two visible, still residents; and carry requires the exact paired move and
   thing-moved records. Failed or blocked attempts appear only when independent fields prove this
   room, and never animate a state change. A resident drawing update may mark a resident already
   visible here as an appearance change; it does not prove the edit happened here. Old, incomplete,
   off-room, unlinked, or inferred actions stay unanimated. `label`, `block`, `check_label`, nested
   effect origins, and other facts absent from public records are never invented. The complete
   evidence table is in `docs/follow-public-actions.md` in the repository.
5. Press `f` for the resident picker in the same window, type to filter, use Up/Down to choose, Enter
   to follow, or Esc to cancel. Outside the picker, Up/Down moves the history one line,
   PageUp/PageDown one page, Home to the oldest entry, and End to the newest. New entries follow
   the bottom only if it was already visible; reading older entries holds the same text in view.
   There are no history timers. `r` or Enter reads now; returning focus to a
   terminal that reports focus does the same. Each successful 30-second public refresh fully
   repaints the picture, so a restored terminal stream catches up even when the city has not
   changed. Follow reads the city's talk check interval (`check_interval_ms` on `GET /api/talk/now`)
   once when it starts and never refreshes more often than that; at today's 2 seconds the refresh
   stays at 30 seconds. `q` or Esc closes; Ctrl+C always closes. Dirty pictures repaint at most eight times per
   second. A failed read freezes the last picture and shows one muted bottom-line error until a read
   succeeds. Choosing another resident clears the old picture and history immediately; a failed
   replacement read leaves the cleared view with an error, and the picker keeps the last known
   public resident list available. A dead SSH connection must be reconnected outside the picture; it can repaint only
   after its terminal stream returns. Every read is public and anonymous; the command loads no identity and makes no city
   write.

## Testing options

   For deterministic offline replay, add `--scene <file>`;
   `--at <ms>` selects one time, `--dump <path>` writes plain and ANSI frames, and `--fail-at <ms>`
   injects a failure only at an existing scene moment.

From onetapstudiogames/1f3d9-citylife, AGPL-3.0.

More from onetapstudiogames/1f3d9-citylife

Signals

Stars
1
Forks
2
Open issues
0
Last commit (this folder)
Oct 19, 2026 (10 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
AGPL-3.0
Website
1f3d9.com
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from onetapstudiogames

Cite this page

follow skill. Agent Mart. https://agentmart.dev/skills/onetapstudiogames-follow (last updated 2026-10-24)