Borrowing it
Nothing to install: this file belongs to dotdevdotdev/agentwire-dev. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/dotdevdotdev/agentwire-dev/main/.claude/skills/agentwire-cli/SKILL.mdgit clone --depth 1 https://github.com/dotdevdotdev/agentwire-devWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/dotdevdotdev/agentwire-dev/agentwire-cli)<a href="https://agentmods.dev/skills/dotdevdotdev/agentwire-dev/agentwire-cli"><img src="https://agentmods.dev/badge/skills/dotdevdotdev/agentwire-dev/agentwire-cli/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/dotdevdotdev/agentwire-dev/agentwire-cli"><img src="https://agentmods.dev/badge/skills/dotdevdotdev/agentwire-dev/agentwire-cli.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00088 | $0.05229 |
| Opus 5.5 | $0.00035 | $0.02092 |
| Sonnet 5.5 | $0.00018 | $0.01046 |
| Haiku 4.5 | $0.00009 | $0.00523 |
Grade C, and why
agentwire-cli scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Recursive force deletehighDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
# DESTRUCTIVE: rm -rf's the worktree dir + new branch How it starts
The opening of the file, as written. The whole thing — 351 lines — stays where its author put it; the contents beside it link to each section on GitHub.
AgentWire CLI Reference
# Session management
agentwire new -s name # not: tmux new-session
agentwire new -s name --no-soul # skip the always-injected soul personality role
agentwire new -s name --first-message "idea" # deliver first prompt once agent boots
# (verified paste, local only; failure ≠ command failure)
agentwire send -s name "prompt" # not: tmux send-keys
agentwire send -s name --wait-ready --timeout 60 -- "prompt"
# wait for agent boot (banner + screen-stable +
# trust-prompt auto-accept), verified delivery,
# exit 1 if unverified; local only
agentwire send-keys -s name key1 key2 # raw keys with pauses
agentwire send-keys -s name --pane 2 key # target a specific pane
agentwire new -s name --created-by orch # FORCE this creator (prompt-routing parent)
# regardless of project; '' forces standalone.
# Default (no flag): inherit the calling tmux session
# ONLY if -p/-s targets the caller's own project — a
# different project defaults to a standalone root (#715)
agentwire output -s name # not: tmux capture-pane
agentwire info -s name # session metadata (cwd, panes) as JSON
agentwire kill -s name # not: tmux kill-session
agentwire list # not: tmux list-sessions
agentwire recreate -s name # destroy and recreate with fresh worktree
# DESTRUCTIVE: rm -rf's the worktree dir + new branch
agentwire restart -s name # relaunch IN PLACE, same conversation (#871) — /exit,
# regenerate flags from the recorded roles/posture/model,
# relaunch at the same cwd with --resume. Nothing on disk
# is touched (unlike recreate) and no new tmux session is
# made (unlike `history resume`). Works on a session that
# ISN'T running — that's the post-reboot/post-rebuild case.
# If the conversation's history is orphaned or gone it
# starts FRESH with the role intact and says so.
# Waits for the agent to come back (exit 1 if it doesn't);
# --no-wait skips. Local only; can't restart itself.
agentwire wait --children # BLOCK on the child sessions you spawned (#852) — collects
# each report, tears the child down, names the ones that
# never reported. Waiting idly instead gets YOU reaped
# mid-fan-out (idle != done). --timeout bounds this call;
# exit 1 = still pending, just call it again.
# Enrollment is automatic on `new`/`worktree` (opt out with
# --no-cohort; --kind orchestrator never enrolls).
agentwire worktree name # new branch + worktree + STANDALONE session
# "worktree session" ALWAYS means this command — never
# `spawn --branch` (that makes a pane). Defaults to the
# bypass posture (autonomous, topology-driven — same for
# every role on this verb); override with --posture.
# ROLE defaults to "worker" (zero behavior change) — the
# worker-worktree etiquette role is intrinsic to that
# default (isolation, no rebuild/restart, verify
# in-worktree, draft PR + notify-back) — first prompts
# only need the task itself
# Base branch (default mode): --base wins, else config
# worktree.default_base, else the repo's actual default
# branch (origin/HEAD, fallback current) — no hardcoded 'main'.
# --project defaults to the git root of cwd (monorepo-safe:
# many sessions can target one repo from different branches).
# config worktree.naming can template the NEW branch name.
agentwire worktree name -b develop # from specific base branch
agentwire worktree name -c # from repo's current branch
agentwire worktree name -e # checkout existing branch (no new branch)
agentwire worktree name --ref v2.0 # detached at tag/commit
agentwire worktree name --prompt "task" # spawn AND seed the first message in one call (verified delivery)
agentwire worktree name --kind orchestrator # ROLE override (#716): a durable, replaceable-
# persona project window instead of a safety-railed
# subordinate. Roots by default (created_by='') unless
# --created-by says otherwise.
agentwire orchestrator [name] -p <project> # sugar for `worktree --kind orchestrator`
# (name defaults to "orchestrator") — the durable-window
# one-liner for a monorepo/large-repo project.
agentwire worktree name --kind reviewer # ROLE override (#827): a PR-review station — safety-
# railed the other way (never opens/merges its own PR,
# iterates via msg_send, reports a verdict via notify_parent).
# Stays parented like worker (not rooted). Pane/main topology
# is the typical default (`agentwire new --kind reviewer`);
# use `worktree --kind reviewer` for a local checkout to e2e
# a sibling's branch.
agentwire worktree --list # list this repo's worktree sessions + read-only git status; --all = every repo
agentwire worktree --status name # read-only git status (dirty/ahead/behind/pushed) for one worktree
agentwire worktree --dangling # LIVE worker sessions with an OPEN PR and no live recorded
# parent (#716) — a PR nobody is positioned to review/merge.
# Distinct from --list's "orphan" (dead session, disk remnant).
agentwire worktree --remove name # ATOMIC teardown: kill session + force-remove worktree + delete
# merged branch (local+remote) + unregister — fails loudly (non-zero,
# registry entry kept) if the dir can't actually be cleared (#717).
# --keep-branch skips branch cleanup; --force-delete-branch deletes
# even if not confirmed merged (but refuses an OPEN PR — #756 — unless
# --close-pr-branch is also given, since that would silently close it).
agentwire worktree --prune # drop registry entries whose worktree is gone + git worktree prune
# --gc-merged: also tear down (session+worktree+branch) any
# still-present entry whose branch is confirmed merged
agentwire tabs track --session name --tab-id <id> [--url <url>] # bookkeeping for a
# claude-in-chrome tab the session opened, so worktree
# teardown can report it if the session never closes it
agentwire tabs untrack --session name --tab-id <id> # drop tracking after closing it yourself
agentwire tabs list [--session name] # list tracked tabs (debug leaked verification tabs)
agentwire fork -s name # fork session into new worktree
agentwire fork -s name -t project/branch --commit abc123 # fork from specific commit
# Helper session — a worker session with NO isolation (#838): shares the
# caller's checkout, so zero git work at creation (no worktree, no branch,
# nothing in the worktree registry). Reproduces a worker pane's one real
# advantage while keeping msg inbox / voice / prompt routing / portal
# visibility. `wait --children` collects its report then reaps it (topology
# "main"), unlike a worktree child which is left alive.
agentwire helper name # worker session sharing this checkout
agentwire helper name -p ~/projects/repo --prompt "run the suite, report failures"
agentwire helper name --roles wiki # extra roles STACK on worker + shared-checkout
# The `shared-checkout` role is auto-injected:
# read/edit freely, NEVER commit/branch/checkout/
# stash/reset/pull — the checkout's owner commits.
# Needs a commit or a PR? Use `worktree` instead.
# Teardown is just `agentwire kill -s name`.
# Pane commands (worker PANES inside the current session — NOT worktree
# sessions; for parallel autonomous work use `agentwire worktree` above)
agentwire spawn --roles worker # spawn worker pane
agentwire spawn --branch name # worker pane on an isolated worktree (still a pane)
agentwire send --pane 1 "task" # send to pane
agentwire output --pane 1 # read pane output
agentwire kill --pane 1 # kill pane
agentwire jump --pane 1 # focus pane
agentwire split -s name # add terminal pane(s)
agentwire detach -s name # move pane to its own session
agentwire resize -s name # resize window to fit largest client
# Boot everything
agentwire up # boot all services (portal, TTS, STT, scheduler,
# custom) then start/attach the dev session
agentwire up --no-tts --no-stt # skip optional voice services
agentwire up --dev # run portal from source (uv run)
# Portal management
agentwire portal start # start in tmux
agentwire portal stop # stop portal
agentwire portal restart # stop + start
agentwire portal status # check health
agentwire portal token # print the bootstrap auth token (host/CLI/MCP credential)
agentwire portal token --rotate # generate a new bootstrap token (re-enter on devices)
# Per-device credentials (#423) — pair a device for its OWN revocable token
agentwire portal pair [--name phone] # print a short-lived pairing code + QR → /pair?code=
agentwire portal devices [--json] # list paired devices (id, name, last-seen, status)
agentwire portal revoke <id> # revoke ONE device (others keep working)
# Scratch pad (shared notes — portal drawer Alt+N; file: ~/.agentwire/scratchpad.json)
agentwire scratchpad list # list notes (newest first)
agentwire scratchpad add "text" --source mysession # add a note (drawer refreshes live)
agentwire scratchpad remove <id> # delete a note
agentwire scratchpad clear # delete all notes
# Custom services (registered long-running sessions — services.custom in config;
# autostart on portal launch, health-checked + restarted by the portal watchdog)
agentwire services list # registry: autostart/restart/healthcheck per service
agentwire services status # run healthchecks now (exit 1 if something's down)
agentwire services status name # one service
agentwire services up <name> # start (also clears 'down' state)
agentwire services up --all # start all autostart services (skips downed)
agentwire services down <name> # stop AND keep stopped (watchdog won't respawn)
agentwire list --state # live busy / idle / blocked / unknown per local session
agentwire new -s <name> --effort low|medium|high|xhigh|max # per-session effort, survives restart
# TTS/STT servers
agentwire tts start|stop|status # TTS server management
agentwire stt start|stop|status # STT server management (host shim on :8101)
agentwire stt start # engine from stt.engine (auto|moonshine|whisper); moonshine = fast CPU
agentwire stt start --backend moonshine --model moonshine/base --port 8101 # ad-hoc overrides
# Voice
agentwire say "text" # speak (auto-routes to browser or local)
agentwire say -s name "text" # speak to specific session
agentwire say "spoken" --display "richer card" # speak AND show a desktop toast with different text (one call)
agentwire notify-parent "text" # notify parent session (worker→orchestrator)
agentwire notify-parent --to name "text" # notify specific session
agentwire notify-parent --raw --to name "text" # verbatim, no [NOTIFY ...] prefix
# (delivery is safety-gated: refuses targets showing a
# live dialog / bare shells / parked sessions, verified paste)
# Prompt routing (interactive prompts → parent session; see wiki sessions/prompt-routing.md)
agentwire prompts status # pending prompt markers
agentwire prompts tick # run one sweep now (watchdog does this every 60s)
agentwire prompts answer -s name --pane 0 --expect <hash> 2 # guarded answer:
# re-detects + hash-compares before sending keys —
# NEVER answer dialogs with raw send-keys
agentwire prompts clear -s name --pane 1 # drop a marker
# Polite messaging (non-interrupting agent-to-agent inbox; see wiki sessions/messaging.md)
agentwire msg send --to name "text" # queue a message (delivers when their box is clear)
agentwire msg send --to name --kind done "PR #312 drafted" # kinds: note|done|request|escalation|ingest|idle (idle = the idle hook's synthetic placeholder, #952)
agentwire msg send --to name --kind ingest --ref "/path/report.md" "topic" # PASSIVE: never auto-delivered, pull-only
agentwire msg send --to @all "team update" # broadcast to live agent sessions except sender
agentwire msg send --to name --body-file /tmp/body.md # code-bearing body, no shell escaping ('-' = stdin)
agentwire msg inbox -s name # peek pending + passive (does not drain/consume)
agentwire msg pull -s name # read + REMOVE passive (ingest) messages — the voluntary pull
agentwire msg sent [--limit N] [--to S] [--id ID] # what became of the messages I SENT: queued/delivered/dead_lettered/purged/unknown (own ledger; delivered = pasted, not read)
agentwire msg dead -s name # list dropped (dead-lettered) msgs + reason/timestamp
agentwire msg flush -s name # attempt a drain now (still gated on empty box + safe target)
# Research dropbox (Briefing Mode)
agentwire research dir -s name # print the dropbox path (~/.agentwire/research/<session>/)
agentwire research ensure -s name # create + print the dropbox path
# `msg` NEVER clobbers a human's draft — unlike `send`, which
# pastes + Enter immediately. Use `send` only to forcibly drive a session now.
agentwire listen start|stop|cancel # host voice recording (needs stt.backend: custom + the :8101 shim)
agentwire listen stop -s name # transcribe + send to a tmux session (default)
agentwire listen stop --type # transcribe + type at cursor (Hammerspoon paste)
agentwire listen stop --stdout # transcribe + print raw transcript to stdout, no paste/send
# (scripting hook — Hammerspoon etc. capture $())
# Voices (custom/cloned voices come from a TTS shim — see docs/wiki/voice/shim-contract.md)
agentwire tts voices # list available voices (custom-shim voices or Kokoro presets)
# Artifact windows (agent visual canvas)
agentwire open <url> --title "T" # announce URL/local file as a click-to-open artifact notification (#817)
agentwire open dashboard.html # announce from ~/.agentwire/artifacts/ — human clicks to open
# Channels (outbound notification integrations — email + quo)
agentwire channels list # list all registered channels
agentwire channels list --json # JSON output
# Email (send-only channel)
agentwire email --to addr --subject "Subject" --body "Body"
agentwire email --body "msg" # uses default_to from config
agentwire email --attach file.pdf --body "See attached"
# Quo SMS (send-only channel, no deps)
agentwire quo --body "msg" --to "+1234567890"
# Machine management
agentwire machine list
agentwire machine add <id> --host <host> --user <user>
agentwire machine remove <id>
# SSH tunnels (for remote services)
agentwire tunnels up # create all required tunnels
agentwire tunnels down # tear down all tunnels
agentwire tunnels status # show tunnel health
agentwire tunnels check # verify tunnels are working
# Lock management (for scheduled tasks)
agentwire lock list # list all locks
agentwire lock clean # remove stale locks
agentwire lock remove <session> # force-remove a specific lock
# Project discovery
agentwire projects list # discover projects from projects_dir
agentwire projects list --json # JSON output for scripting
agentwire projects create name # mkdir + minimal .agentwire.yml (bypass)
# (in git repos, .agentwire.yml is auto-added to
# .gitignore — personal config, keep it untracked)
agentwire projects create name --git-init # also run `git init`
agentwire projects create name --from URL # git clone URL instead of mkdir
# Session history
agentwire history list # list conversation history
agentwire history show <id> # show session details
agentwire history resume <id> # resume session (always forks)
# Shareable conversation handoffs (issue #157)
agentwire handoff init [--title hint] # create bundle dir + pre-filled ai-handoff.md template
agentwire handoff render <bundle-dir> # render show-the-story.html from ai-handoff.md
agentwire handoff list # list past bundles
# Inside a Claude Code session, prefer the /handoff slash command — it walks the
# agent through filling the template using full conversation context (free, no
# fresh LLM call). Outputs land in ~/.agentwire/artifacts/handoff-<slug>/.
# Roles management
agentwire roles list # list available roles
agentwire roles show <name> # show role details
# Scheduled workloads
agentwire ensure -s name --task task # run named task reliably
agentwire task list [session] # list tasks for session/project
agentwire task show session/task # show task definition
agentwire task validate session/task # validate task syntax
# URL fetch (helper usable from any session, including pi)
agentwire fetch <url> # fetch a page via Jina Reader (markdown, JS-rendered)
agentwire fetch <url> --limit 4000 # cap chars (default 8000, 0 = no limit)
# Safety & diagnostics
agentwire safety check "cmd" # test if command would be blocked
agentwire safety status # show pattern counts and recent blocks
agentwire safety logs # query audit logs
agentwire safety suggest-delete-recursive [--days N] [--min N] [--json] # recurring blocked rm -rf dist/node_modules/…; PRINTS the delete-recursive policy a human pastes (read-only, never writes policy)
agentwire safety packs list|status [--json] # vendor rule packs (aws, databases, ...): off by default
agentwire safety packs enable|disable <name> # HUMAN-ONLY (tty + protected); agents suggest, never run
agentwire safety groups list|status|enable|disable <g> # default groups; kernel can't be disabled
agentwire safety install # install damage control hooks (the package's init under agentwire's profile); --refresh prints + acknowledges the ruleset diff
agentwire safety migrate [--dry-run] # HUMAN-ONLY (tty + protected): retire a pre-package install (pristine rule copies, old script registrations)
agentwire hooks install # install permission hook (Claude Code only)
agentwire hooks uninstall # remove permission hook (Claude Code only)
agentwire hooks status # check hook installation status
agentwire network status # complete network health check
agentwire doctor # auto-diagnose and fix issues
agentwire doctor --voice # only the push-to-talk path: mic, STT shim, portal/tunnel, tmux+PTT (pass/fail + fix)
# Notifications (the notify-* family, by target)
agentwire notify-event EVENT # broadcast a portal lifecycle event (session/pane); usually called by tmux hooks
agentwire notify-parent "text" # text up to your parent/orchestrator session
agentwire notify-user "text" # desktop toast for the human (safe markdown: bold, [links](url), line breaks)
# MCP Server
agentwire mcp # expose agentwire as MCP server
# Scheduler
agentwire scheduler start|serve|stop|status # manage scheduler daemon
agentwire scheduler board # show task board with overdue scores
agentwire scheduler live # show live scheduler state
agentwire scheduler events # show recent scheduler events
agentwire scheduler history # show recent run history
agentwire scheduler run task # force-run a task now
agentwire scheduler enable|disable task # enable/disable a task
agentwire scheduler report [--since 8h] [--artifact] # generate morning report HTML
agentwire scheduler dashboard # open scheduler dashboard
# Usage-limit recovery (deterministic watchdog, see docs/wiki/usage-limit-recovery.md)
agentwire limits tick # one watchdog pass: sweep panes, resume what's due
agentwire limits status # show sessions parked on usage limits
agentwire limits resume -s name [--force] # manually resume a parked session now
agentwire limits install # install + load the launchd watchdog (60s tick)
agentwire limits uninstall # unload + remove the watchdog
# Setup & Development
agentwire init # interactive setup wizard (ends on the portal URL)
agentwire init --assisted # ...and spawn the Claude TTS/STT setup session at the end
agentwire generate-certs # generate SSL certificates
agentwire up # boot all services + dev session (see "Boot everything")
agentwire dev # start/attach to dev session ONLY (no services)
agentwire rebuild # clear uv cache and reinstall
agentwire uninstall # uninstall the tool
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday Changed d57908805f15
- 4d ago Changed · -11 lines eb8e00839aa0
- 6d ago Changed · +12 lines 322fc45f44f5
- 8d ago Changed · +3 lines 474b72b2ae32
- 15d ago Changed · +1 lines 13fe889c585a
- 17d ago Changed · +3 lines e9a3444ac46b
- 2mo ago First seen · 343 lines · 88 tokens per session scan C 44078ff4442d
agentwire-cli is a skill published in the GitHub repository dotdevdotdev/agentwire-dev (23 stars, last pushed yesterday), licensed Apache-2.0. It adds 88 tokens to every session and 5,229 once invoked, about $0.0004 per session on Opus 5.5. A static security scan graded it C with 1 finding (recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
agentwire-cli compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| agentwire-clidotdevdotdev/agentwire-dev | Skill | 23 | yesterday | Apache-2.0 | C | 88 | Claude Code |
| tmux-via-mcpbnomei/tmux-mcp | Skill | 57 | 3mo ago | MIT | A | 39 | Claude Code, Codex |
| tmux-buffer-explorerbnomei/tmux-mcp | Skill | 57 | 3mo ago | MIT | A | 33 | Claude Code, Codex |
| ccalx-cmd/x-cmd | Skill | 4.7k | 6d ago | Apache-2.0 | A | 10 | Claude Code, Codex |
| x-themex-cmd/x-cmd | Skill | 4.7k | 6d ago | Apache-2.0 | A | 74 | Claude Code, Codex |
| loopx-cmd/x-cmd | Skill | 4.7k | 6d ago | Apache-2.0 | A | 25 | Claude Code, Codex |
| log-workpchalasani/claude-code-tools | Skill | 2.0k | yesterday | MIT | A | 108 | Claude Code |