agentic
Eleven Claude Code plugins, installed independently from one marketplace. The code lives
in nine npm packages (@v1nvn/*); each plugin directory is a thin manifest — most run
their package through version-pinned npx; enhansome is an HTTP MCP config pointing
at the hosted registry server, and todo and notify carry no package — todo
manifest + skills, notify a hooks module.
rm, md, zai, tokens and notify are zero-token the mod way — a function-hook module serves a surface the model never reads.
Prerequisites
- Claude Code
- Node.js — the package-backed plugins run through
npx - A running omlx server on
127.0.0.1:6659, foromlx(omlx serve) - macOS, for
notify—osascriptposts the banners
Install
Add the marketplace, then install any subset. Each plugin stands alone.
claude plugin marketplace add v1nvn/agentic
claude plugin install rm@agentic # or: readability, omlx, enhansome, md, zai, tokens, statusline, todo, rulings, notify
Start Claude Code and run the command shown above for the plugin you installed.
In a plain shell
The four tool CLIs run outside Claude Code too:
npx -y @v1nvn/[email protected] usage # GLM Coding Plan usage report (bare prints the commands)
npx -y @v1nvn/[email protected] usage # token usage + cache hit rate from local transcripts
npx -y @v1nvn/[email protected] # last reply → reMarkable (or a file: npx -y @v1nvn/[email protected] reply.md)
npx -y @v1nvn/[email protected] # last reply → Markdown-Viewer (--view for read-only; or a file: npx -y @v1nvn/[email protected] reply.md)
rm needs pandoc plus ssh/scp access to the device (REMARKABLE_HOST, default
remarkable, device dir REMARKABLE_DIR, default /home/root/books); md honors
MD_VIEWER_URL (default https://md.v1n.space) and a set MD_NO_OPEN to skip opening
the browser.
statusline
Five commands drive both surfaces. In Claude Code, /statusline:lab sketches the themes
as plain renders and offers the picker in chat — the agent writes the pick.
In a terminal outside Claude Code, the wizard is the guide:
npx -y @v1nvn/[email protected] configure # the wizard — bare, on a TTY
npx -y @v1nvn/[email protected] configure --theme lean # a theme write
npx -y @v1nvn/[email protected] configure --theme lean --bar gauge # a theme plus one swap
npx -y @v1nvn/[email protected] preview --theme rich --plain # chat-safe sketch, nothing written
npx -y @v1nvn/[email protected] catalog # themes block, then one line per item
npx -y @v1nvn/[email protected] restore # both keys back to their pre-lab values
npx -y @v1nvn/[email protected] status # rows + verdict — exit 0 healthy, 1 needs action
configure is the sole writer: one run touches exactly the statusLine and
subagentStatusLine keys of ~/.claude/settings.json and deploys a launcher
(render.mjs) into the plugin data dir — the whole write footprint.
Each value is one inline shell command: node on that data-dir launcher, the
decisions as flags — --theme first, then one --<item>=<alt> per pick that
differs from the theme's own, --layout only when passed; the subagent key
adds --subagent, the one valueless flag. Both keys paint the same theme: the
subagent row renders the theme's layout filtered to the six per-task items
(state, model, effort, bar, tokens, duration), the task's label and
description leading. The launcher reads Claude Code's install record
(installed_plugins.json) and imports the newest installed plugin's
src/render/entry.ts, so a plugin update repaints with no rerun. Raw:
node "$HOME/.claude/plugins/data/statusline-agentic/render.mjs" --theme=lean --bar=gauge || true
node "$HOME/.claude/plugins/data/statusline-agentic/render.mjs" --subagent --theme=lean || true
The layout — brace clusters of item ids — rides as --layout only when
passed; the theme's layout holds otherwise. With flags, configure is
strict — --theme <name> (quiet, classic, lean, rich, custom) is the base
design and item flags override it; classic names the shipped defaults.
The theme resolves at paint,
and preview renders a candidate through the same resolution without
writing — --plain strips the color escapes so the sketch survives chat. A
foreign settings key is refused unless --force. The first takeover saves
the pre-lab key values to backup.json; restore splices them back
byte-exact — keys absent before the lab are removed — then deletes the lab
data. The theme name rides the key — status and catalog read it from
there, and swaps keep the name. status checks the install: node, the
renderer the install record resolves, both keys, config drift, the theme,
backup, captures — one row per fact plus a verdict, every action row naming
its fix. /statusline:lab inside a session runs the same commands.
Repo and machine:
repo
packages/statusline/ the CLI and the renderer — pure TS, zero bash
src/ test/ src/ holds the CLI and src/render/ the renderer entries
assets/payloads/ p1–p4.json preview fixtures, main surface
assets/ticks/ multi.json preview fixtures, agent panel
SKILL.md the /statusline:lab skill — model-taught entry point
machine, after `claude plugin install statusline@agentic`
~/.claude/plugins/cache/agentic/statusline/<version>/ the installed plugin — node_modules/ installed
from its package-lock.json; src/render/entry.ts paints
~/.claude/plugins/data/statusline-agentic/
render.mjs the launcher — deployed by configure, spawned by both keys
backup.json pre-lab key values — first takeover wins
captures/main.json captures/tick.json every paint's stdin, teed by the renderer; feeds previews
~/.claude/settings.json statusLine + subagentStatusLine → the inline commands
Install: claude plugin marketplace add v1nvn/agentic, then
claude plugin install statusline@agentic, then /statusline:lab in a session — or
npx -y @v1nvn/[email protected] configure in a terminal, where the wizard
previews both surfaces at 80/120/200 columns and saves.
Uninstall runs npx -y @v1nvn/[email protected] restore first, then uninstalls
the plugin: a plain uninstall deletes the data dir — backup.json and the
resolver go with it — and the keys left behind point node at a file that is
gone: a blank line at the next paint.
Layout
A plugin's root is its package home; there is no plugins/ directory — all
ten plugins root at packages/<name>/ itself. Eight homes publish
npm code.
.claude-plugin/marketplace.json Claude marketplace manifest; sources point into the package homes
packages/ one yarn workspace — every plugin's home
readability/ omlx/ the two MCP servers (@v1nvn/readability, @v1nvn/omlx) — the plugin root itself:
.claude-plugin/ + .mcp.json (pinned npx) + dev.mcp.json (dev wiring) (+ skills/)
core/ @v1nvn/agentic-core — last-reply + CLI plumbing + the drawing kit,
imported by every process-side surface; the island never imports it
rm/ md/ zai/ the tool CLIs (rm-send, md-send, zai-usage) + their mods — the plugin root itself:
.claude-plugin/ + hooks/register.ts(x) + hooks/support.ts (the island glue)
+ tests/ + package-lock.json (core pin Claude Code installs)
zai also types/ (state contract)
tokens/ tokens-report CLI + the tokens mod — the plugin root itself:
.claude-plugin/ + hooks/register.tsx + hooks/support.ts + tests/ + types/
(state contract); src/ holds the CLI (index, cli, scan)
and the island's aggregate/format/top/text.ts
(the island's own formatting slice — the engine's loader
keeps the island off npm, so it cannot import core's kit)
statusline/ the configure CLI + renderer, pure TS (@v1nvn/statusline) — the plugin root itself:
.claude-plugin/ + SKILL.md (see statusline above)
+ src/render/launcher.mjs (the data-dir deploy, zero deps)
rulings/ the decisions-page builder, pure TS (@v1nvn/rulings) — the plugin root itself:
.claude-plugin/ + SKILL.md (see rulings above) + README.md
enhansome/ todo/ package-less homes — the plugin root itself:
.claude-plugin/ + .mcp.json, todo: .claude-plugin/ + skills/ + README.md
types/claude-code.d.ts vendored mod API declarations, engine-written per version
tsconfig.mods.json type-checks every mod package against the vendored types
Versions ride one lockstep train: .claude-plugin/marketplace.json is the source, and
set-version.mjs mirrors it into every package, plugin manifest, core dependency pin,
lockfile, and npx pin. Nothing is built: node ≥23.6 runs the .ts sources, and every
published package ships src.