@andysolomon/arc-pi
An ARC-focused Pi distribution with bounded multi-model delegation.
Package details
Install @andysolomon/arc-pi from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@andysolomon/arc-pi- Package
@andysolomon/arc-pi- Version
1.48.0- Published
- Sep 16, 2026
- Downloads
- 281/mo · 281/wk
- Author
- andysolomon
- License
- MIT
- Types
- extension, skill, theme, prompt
- Size
- 2.6 MB
- Dependencies
- 2 dependencies · 4 peers
Pi manifest JSON
{
"skills": [
"./skills/arc-orchestrator"
],
"themes": [
"./themes"
],
"prompts": [
"./prompts"
],
"extensions": [
"./extensions/arc-orchestrator/index.ts",
"./extensions/arc-session-monitor/index.ts",
"./extensions/arc-background-terminals/index.ts",
"./extensions/arc-subagents/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
ARC Pi
ARC Pi is a thin, opinionated Pi distribution centered on andysolomon/arc-orchestrator. It keeps upstream Pi as the interactive parent while adding an isolated configuration, an openai-codex/gpt-5.6-sol/high-thinking default, bounded ARC delegation, diagnostics, prompts, and policy guidance.
The parent delegates almost everything through arc_delegate using
runner-routing-v4. Automatic delegation passes the current ARC Delegate
worker phase values with no --backend/--route; Analyze stays local in the
active parent. Every Explore, Research, or Plan call pauses before runner and
session creation so the operator can approve automatic routing or select a
valid read-only route; decline, cancel, and non-interactive use fail closed.
Implement requires operator approval of the exact contract and one of nine
canonical workload_class values. Verify uses review mode, and Deploy retains
separate authorization. Explicit aliases pin one runner route with no inherited
fallback. See orchestration and routes.
Task-scoped Markdown artifacts are explicit and opt-in. Supply a lowercase
single-segment task_slug on arc_delegate. Capable Explore, Research, and
Plan workers receive it in runner argv and may author
docs/<task_slug>/<phase>.md; ARC Pi snapshots before launch, restores
non-completed outcomes, contains and sanitizes completed output, then appends
harness evidence as an audit footer. Implement and Verify remain
harness-written. Use the parent-local arc_task_artifact tool for
Analyze or a manual phase summary. Calls without task_slug write nothing,
and Deploy never creates an artifact. Automatic writes require parsed worker
evidence with status exactly completed; all other statuses, malformed output,
and opted-in cancellation fail closed without a success artifact. Cancellation
restores prior artifact content or removes a cancelled first write. Artifact I/O
errors are surfaced separately and do not rewrite a successful worker session
as failed. Older runners that reject the flag are retried once without it with
a warning and harness-only evidence.
Quick start
Prerequisites: Node.js 22.19+, Bun 1.2+, Pi 0.80+, and the backend CLIs required by the routes you use.
npm install --global @andysolomon/arc-pi@latest
arc-pi
# Run /login once inside ARC Pi's isolated configuration.
The first launch creates or updates the isolated ~/.arc-pi profile. npm installs the exact tested ARC runner automatically; no Git checkout or --runner path is required. Update both ARC Pi and its tested runner with:
npm install --global @andysolomon/arc-pi@latest
For checkout development, run npm install, npm run verify, and optionally select a checkout runner with ./bin/arc-pi setup --runner /path/to/runner.
Inside Pi, use arc_delegate, arc_task_artifact, /arc-doctor, /arc-runs, /arc-report, /arc-monitor, /arc-terminals, /subagents, /orchestrate, or /skill:arc-orchestrator. /arc-report prints a Stage | Model | Result table for registered runs in the current session, or falls back to arc-orchestrator report when none exist. The model can call arc_monitor_status for a snapshot, use the separate arc_terminal_* tools for non-interactive dev servers, watchers, long tests/builds, and benchmarks, and use subagent_* for explicitly parallel, self-contained child tasks. ARC Pi ships and selects the github-dark-default theme for its isolated profile.
Background terminals live only for the current Pi session. arc_terminal_start
returns promptly with an arc-term-… ID; arc_terminal_status,
arc_terminal_list, and arc_terminal_kill inspect or stop it. /arc-terminals
lists jobs, /arc-terminals <id> shows bounded output detail, and
/arc-terminals kill <id> terminates the process tree. Completion queues one
follow-up. Output tails stay bounded while full stdout/stderr use private,
size-capped temporary spill files that are removed at session shutdown or
history eviction. Terminals are Unix-only and always reap their process group. These terminals
are local shell processes, not ARC model-worker jobs, and never resume with a
session.
Parallel subagents also live only for the current Pi session. subagent_spawn
returns immediately with an arc-sub-… ID and permits at most four active
children. Use it only for disjoint, self-contained story or worktree tasks with
clear boundaries; each child is an isolated in-process Pi session with its own
cwd/model context, an explicit built-in tool allowlist, and no extension
resources or tools. A successful, non-cancelled subagent_wait claims and
returns all requested bounded results; a cancelled wait leaves the automatic
completion follow-up available. subagent_check, subagent_list, and
subagent_cancel inspect or stop children. Unclaimed completions queue one
bounded follow-up. In TUI mode, /subagents and its /sub alias open a
selectable dashboard; choosing a child opens a bounded live activity view where
an operator can steer or abort an active child. Settled children remain
viewable but read-only. Takeover uses s to steer and x to abort; thinking
activity is shown separately from transcript and tool updates. Non-TUI commands
retain bounded list/detail output.
Children cannot call nested subagents, ARC delegation/background-terminal
tools, decision/ask-user tools, or extensions, and active children are cancelled
at parent-session shutdown. This is a resource/tool boundary, not an OS sandbox:
the allowlisted local bash tool executes on the trusted host, and prompt
restrictions are policy rather than operating-system enforcement. Subagents do
not replace ARC phase routing or its authorization gates, and they cannot
reattach across sessions.
Operators and outer agents can monitor sessions from a shell:
./bin/arc-pi-monitor status --session-id <id>
./bin/arc-pi monitor watch --session-id <id> --json
Delegation viewer
The delegation viewer is a second-terminal live view of orchestrator delegation: keep the parent Pi TUI in one pane and run the viewer beside it. It renders the lifecycle DAG (explore → analyze → plan → implement → verify → deploy), the background-job lane, the routing rungs actually walked per phase, and a scrubbable timeline — all from the same privacy-safe snapshots the parent TUI already shows.
It is a small Rust/ratatui binary in tui/, built separately from the npm package:
cargo install --path tui # or: cd tui && cargo build --release
arc-pi monitor tui resolves the binary from ARC_PI_MONITOR_TUI, then the in-repo tui/target/{release,debug} build, then arc-pi-monitor-tui on PATH, and fails with build instructions if none exists.
./bin/arc-pi monitor tui --session-id <id> # watch one session
./bin/arc-pi monitor tui --follow # newest session; reattaches after idle
ARC_PI_SESSION_ID=<id> arc-pi-monitor-tui # session inferred from the environment
Useful flags: --theme <path> loads any Pi theme JSON (github-dark-default and steel are built in), --interval-ms sets the monitor poll interval, --arc-pi-home points --follow at another registry root, and --stdin reads watch --json NDJSON instead of spawning the monitor — which also gives you an offline demo:
arc-pi-monitor-tui --stdin < tui/fixtures/live.ndjson # full lifecycle to completion
arc-pi-monitor-tui --stdin < tui/fixtures/blocked.ndjson # terminal verify failure
Reading the viewer
Each node is one delegated run for a lifecycle phase. analyze always renders as a parent node, never a worker. Under the status row are that phase's routing rungs from ARC Delegate v4: ✓ produced the result, ✗ advanced past for an availability reason, ● currently active, ◇ never reached. A verify failure is terminal — it draws a red fail → terminal edge into a blocked revise-contract node and dims the deploy gate, never a silent retry edge. Opt-in arc-bg-… jobs get their own right-hand lane.
The inspector tabs are Steps, Activity, Files, Diffs, Contract, Routing, and Info. Contract shows bounded registry metadata (label, phase, route, workload class, tokens) — raw task text, absolute paths, and transcripts are never sent to the viewer, and redacted or omitted diffs show a count or reason instead of content.
Keys
| Key | Action | Key | Action |
|---|---|---|---|
q |
quit | Space |
play / pause replay |
Tab / 1–7 |
inspector tabs | ← → |
previous / next event |
↑ ↓ |
focus a node | Home |
first event |
l |
jump back to live | f |
toggle follow |
− + |
playback speed | ; |
cycle theme |
z |
density | PgUp PgDn |
scroll the graph |
[ ] |
scroll the inspector |
With Herdr
Herdr manages agent terminals as workspaces, tabs, and panes, which makes it the natural home for a viewer pane next to the parent session (verified against herdr 0.8.0). From the pane running ARC Pi, split beside it and start the viewer without moving your focus:
pane=$(herdr pane split --current --direction right --cwd "$PWD" --no-focus \
| jq -r .result.pane.pane_id)
herdr pane rename "$pane" arc-viewer
herdr pane run "$pane" ./bin/arc-pi monitor tui --follow
Split right from a wide pane and down from a narrow one. --follow is the right mode here: the viewer attaches to the newest session in the run registry and reattaches on its own after the monitor stops on idle, so the pane keeps working across successive delegations without being restarted.
Inside a Herdr-managed pane the session is already in the environment, so arc-pi-monitor-tui on its own picks up ARC_PI_SESSION_ID when ARC Pi exported it. To pin the viewer to one specific session instead of following the newest, pass --session-id explicitly.
Authenticate optional subscription-backed workers through their official CLIs:
/arc-login cursor
/arc-login claude-code
/arc-auth-status
These commands do not add Cursor or Claude Code to Pi's /login or /model menus. ARC Pi does not fork Pi core, copy provider credentials, or bundle provider CLIs. Its npm package installs one exact tested ARC runner dependency. Worker output remains advisory until the parent inspects changes and reruns focused verification.