v2.6.2 — agentic coding harness · parallel coding agents · basic orchestrator

An agentic coding harness for the coding agents you already pay for.

A basic orchestrator for your installed claude and codex CLIs — no API tokens, no SaaS. Spawn parallel coding agents in tmux on the healthiest of your Claude Code and Codex subscriptions, watch every pane on a 2 Hz camera grid, and gate every claim with a runtime verifier. Your laptop closes. The work keeps shipping.

$curl -fsSL https://subctl.com/install | bash
★ GitHub
1 basic orchestratorN parallel coding agents in tmux3-tier memory · verifier · watchdogMIT · no telemetry · no SaaS
50+tools on the master
13dashboard tabs
3-tier memory (md · mem · vault)
0telemetry · 0 phone-home
MITopen source, no upsell
Before subctl

You've already solved these problems. Three times. Badly.

subctl consolidates the tribal knowledge you accumulated running parallel coding agents into one persistent coding harness.
— overnight

"My coding agents work overnight. I have no idea what they're doing."

Long-running coding agents disappear into tmux. You leave the room, miss the prompt, come back to find a Claude Code blocked on a yes/no question for six hours. No camera. No memory. No supervision.

— after /clear

"Every new session, I'm introducing myself again."

Context evaporates at compaction. Skills documents help, but you still re-explain the project, the constraints, the naming-conventions, the in-flight roadmap. Tier-1 memory + the vault fix this — across /clear and across machines.

— 2:00 PM

"I hit my rate limit and lost the rest of the day."

Anthropic's 5-hour and weekly windows aren't visible until you're already blocked. subctl routes new coding work to the greenest of your Claude Code / Codex subscriptions and runs the supervisor on local LM Studio so it never eats your weekly cap.

what only subctl does

Three things no other coding harness gives you.

Not another agent framework that burns API tokens. A basic orchestrator that drives the Claude Code and Codex CLIs you already have — and adds the three pieces nothing else does.
01 · SUBSCRIPTIONS

Drives the coding agents you already pay for

No API tokens. No reimplementation. subctl shells out to your installed claude and codex CLIs and lets them drive their own OAuth into sandboxed per-account config dirs. If you already pay for Claude Pro / Max and ChatGPT Pro, subctl is free leverage on what you already bought.

“subctl is the control plane for OAuth-via-subscription, not API-key auth.”
— providers/openai/auth.sh:6 (subctl source)
02 · VERIFIER

Runtime claim verifier

Every assistant turn is gated by verifier.ts— five rules that catch unbacked check-in promises, fake team-status claims, host facts, send-message claims, and decision-logged claims. When a coding agent says "I'll check in 15 min" without scheduling it, subctl re-prompts the model the same turn. Gaps land in decisions.jsonl. Nothing in Cursor or raw Claude Code does this.

03 · PARALLEL

Parallel coding agents, first-class

NVR-style 2 Hz camera grid over every coding-agent tmux pane. Name-addressed dispatch from CLI, HTTP, master tool, or Telegram. A 3-min watchdog that auto-prunes dead sessions (every 3 min · 15-min staleness threshold). An account-aware dispatcher that picks the healthiest of 6+ Claude Code / Codex subscriptions at spawn. Six paid coding agents running in parallel — and you see all six at once.

127.0.0.1:8787 — chat + camera

One control plane. Every coding agent. Live.

A persistent Bun service reads filesystem state directly and broadcasts updates over SSE. Make it your new-tab page.
🔒 http://127.0.0.1:8787/
sse · master ● · idle · watchdog armed
subctl dashboard — multi-account dispatcher showing rate-limit headroom across 5 OAuth accounts, active tmux sessions, and dev-team status

live capture · 127.0.0.1:8787 · Dashboard tab

subctl orchestration cockpit — master daemon panel, watchdog state, live activity stream, and camera grid tiles
Orchestration · master daemon + watchdog + camera grid
subctl Claude Sessions browser — cross-account search across 13 sessions on 4 accounts with per-row preview text and resume actions
Claude Sessions · cross-account search & resume
What's in the harness

Ten things subctl does to keep parallel coding agents productive.

Basic orchestrator + parallel coding agents in tmux + 3-tier memory + vault + verifier + watchdog. One Bun process, one tmux server, N coding agents on the subscriptions you already pay for.
01 · MASTER

Basic orchestrator, persistent under launchd

subctl master runs as a launchd daemon on your machine. The supervisor talks to a local LM Studio model by default (qwen, gpt-oss) — so it never eats your Claude Pro / Max weekly window. Cloud is escalation only. Always-on. Survives laptop close. Answers from dashboard chat, Telegram, CLI, or scheduled self-prompts.

$subctl master prompt "spawn coding agents on foothold-v3 and billing in parallel"
→ master: picked claude-jason + claude-personal · spawned 2 coding agents
→ scheduler: follow-up at 20:00 · watchdog 15m
reply on dashboard chat, Telegram, or CLI — same conversation
02 · CODING AGENTS

Parallel Claude Codes & Codexes in tmux

Master picks the healthiest Claude Code or Codex account you already pay for and spawns a real coding agent in tmux against your repo. The baseline subctl, autonomy, and orchestrator-mode skills are symlinked into every config dir — every coding agent boots with doctrine baked in.

03 · MEMORY

Three-tier memory, persistent across sessions

Tier 1: user.md + memory.mdalways injected into the master's system prompt (~3.5k char budget). Tier 2: claude-mem semantic search over every dev-team observation. Tier 3: Obsidian vault for long-form decisions, specs, and RESUME files — rendered in-page with wikilinks and embeds.

tier-1 mem: [user.md] 1.2k · [memory.md] 1.6k · [budget] 2.8k / 3.5k
tier-3 vault: 412 notes · 38 canvases · last edit 11m
04 · VERIFIER

Runtime claim verifier (Argent-style)

After every assistant turn the runtime scans for claim triggers — future check-in times, asserted team statuses, sent messages, decision-logged claims. Anything not backed by a tool call this turn fires a synthetic [verifier] correction prompt. Capped at 2 corrections; on giveup the gap lands in decisions.jsonl.

[verifier] master asserted "I'll check in 15 minutes" but did not call schedule_followup. Correcting...
schedule_followup(at=20:00, topic="foothold-v3 status") — backed
05 · TOOLS

The tools you'd write to babysit parallel coding agents.

50+ master tools across 13 families — spawn / message / kill coding agents, read transcripts, schedule follow-ups, write to memory and the vault, capture pane screenshots, run radar, send to Telegram, ask yes/no, attach documents, swap personality. Every tool call is logged to decisions.jsonl with rationale.

tools.spawn_teamtools.msg_teamtools.kill_teamtools.read_panetools.screenshot_panetools.schedule_followuptools.write_memorytools.read_attachmenttools.vault_writetools.vault_searchtools.claude_mem_searchtools.telegram_sendtools.ask_yesnotools.ask_choicetools.radartools.doctortools.personality_settools.version_bump
06 · PERSONALITY

Hot-swap voice. Same persona contract.

Seven presets out of the box — straight-shooter, witty, sarcastic, robotic, arnold, elon, hilarious. Adjusts tone without touching the master's contract or tool-use protocol. CLI + dashboard tile + Telegram command.

$ subctl master personality set sarcastic
hot-reloaded into system prompt · next reply uses new voice
07 · CAMERA

NVR-style grid over every parallel coding agent

Every active coding-agent tmux pane shown as a live tile, polling at 2 Hz. Click a tile to expand to a full pane with the last 500 lines. No coding agent works in the dark, no daemonized work you can't see.

[02:41] tile grid · 3 tiles · 2 Hz refresh
Foothold-v3 · editing tools/spawn.ts
marketing-site · waiting on user reply
eval-loop · stale 23m · watchdog fired
08 · WATCHDOG

Auto-compact + staleness detection

Master ticks every 3 min. Coding agents silent past 15 min get a corrective nudge; dead sessions are auto-pruned. Auto-compact runs every 5 min, compacting transcript when it crosses 90% of the supervisor's loaded context.

09 · CHANNELS

One conversation, many surfaces

Dashboard chat (SSE), Telegram (bidirectional with auto-relay), CLI prompt, scheduled self-prompts, inbox events from workers. All routed through the same supervisor loop.

10 · YOURS

Zero telemetry. Zero SaaS.

Bound to 127.0.0.1:8787. No phone-home. No account creation. Your bot token, your inbox, your vault, your data, your machine. ./uninstall.sh restores everything it touched.

cli

Type subctl. Pick from a menu. No flag-memorizing.

Each line shows live state on the right — repainted from filesystem state on entry. Nothing stale.
subctl 2026-05-10 19:42 Agentic Harness 1. Master daemon ● running · LM Studio · qwen3-coder-30b 2. Dev teams (orchestration) 3 active · 1 stale (watchdog fired) 3. Accounts 3 claude · 1 codex · 0 gemini 4. Sessions (radar) ⚡ 4 active · ⚠ 0 RL today 5. Memory tier-1 2.8k · tier-2 (mem) · tier-3 (vault) 6. Vault 412 notes · 38 canvases 7. Web service / dashboard ● running on :8787 8. Settings & config 9. Doctor / health check a. Logs ─ b. About q. Quit ↑↓ navigate · enter select · q quit · ? help
architecture

One basic orchestrator. N parallel coding agents. One shared repo.

Three input channels feed one persistent supervisor loop. The master spawns and supervises coding agents in tmux — never the other way around. A coding agent can never accidentally spawn its own supervisor.
channel · dashboardDashboard chatSSE → master loop
channel · phoneTelegram botbidirectional · auto-relay
channel · humanCLI promptsubctl master prompt
subctl master  persistent Bun daemon · supervisor loop · verifier · watchdog · schedulerLM Studio first · cloud on escalation · launchd-managed
parallel coding-agent tmux sessions
claude-foothold-v3 · claude-marketing-site · codex-eval-loop
~/.claude-<alias>/
per-subscription isolation · baseline skills symlinked
Obsidian vault + claude-mem
tier-3 long-form · tier-2 semantic memory
built for

Three workflows. Same coding harness.

Solo developer

Your coding agents do the work. You answer the questions.

Master spawns the right coding agent on the right Claude Code or Codex account, watches it, escalates a yes/no question to your phone when it needs you, and resumes when you tap. The transcript and decision log survive every /clear and compaction.

Agent operator

Seven parallel coding agents. One supervisor. No babysitting.

The verifier catches unbacked promises. The watchdog catches silent panes and prunes dead ones. The auto-compact catches context bloat. You watch the camera grid and intervene on demand — the harness handles the rest.

MSP / agency

One Claude Code per client. Zero credential mixing.

Each client gets a coding agent on a dedicated Claude Code account, with its own vault folder, its own RESUME file, and its own decision log. All driven from one master with one phone-as-pager.

quick start

Three commands. Five minutes. Done.

LM Studio + Telegram are optional and prompted later. The master daemon, dashboard, multi-account, and orchestration all work without them.
— STEP 01

Install

$ git clone https://github.com/
   webdevtodayjason/subctl.git
$cd subctl && bash install.sh

Symlinks bin/subctl into PATH, wires the Claude statusline + Stop hook, symlinks baseline skills, drops launchd plists for master + dashboard.

— STEP 02

Bring up the master

$ subctl auth claude personal
$ subctl master enable
$ subctl install

One-time browser login per account. Master comes up under launchd. Dashboard service is installed alongside.

— STEP 03

Talk to it

$ open http://127.0.0.1:8787
$subctl master prompt "hello"
→ master: hello — what are we shipping?

Open the dashboard chat or talk from the CLI. Same conversation, same memory. Pair the Telegram bot if you want to answer from your phone.

roadmap

v1.x was the multi-account dispatch substrate. v2.x is the agentic coding harness on top.

The 1.x series was multi-account dispatch + radar + MCP — the plumbing for running 6+ Claude Code / Codex subscriptions on one machine. The 2.x series is the persistent master daemon, three-tier memory, the verifier, the watchdog, and the personality system layered on top. Both layers ship together.
v2.0

Master daemon + memory

phase 3a–3j · 50+ tools● shipping
v2.2

Personality presets

phase 3k · 7 voices● shipping
v2.3

Multi-team camera view

phase 3m · NVR grid● shipping
v2.4

Chat attachments

phase 3l · drag-drop● shipping
v2.5

Vault viewer in-page

phase 3n · wikilinks● shipping
v2.6

Watchdog prune + update safety

v2.6.0 → v2.6.2● shipping
3p

Personal skills system

ArgentOS-style operator UI▸ next
3q

Vault editor + canvas

CodeMirror 6 + Excalidrawplanned
4.x

More providers

Gemini · Z.AI · Minimaxinvestigating
vs. raw Claude Code

Raw Claude Code / Codex vs. subctl coding harness.

Raw Claude / Codexsubctl harness
Persistent orchestratornone subctl master daemon
Memory across /clearskills file only 3-tier (md · mem · vault)
Multi-account isolationenv vars by hand automatic per-alias
Worker supervisiontail tmux yourself watchdog + camera view
Claim verificationtrust the model runtime verifier
Self-schedulingyou remember schedule_followup tool
Mobile escalationnone bidirectional Telegram
Local model firstno LM Studio default
Costyour time free, MIT
FAQ

Questions you'd ask before installing.

What does "agentic coding harness" mean, concretely?+
subctl is a basic orchestrator — bash, Bun, tmux, launchd — that drives the Claude Code and Codex CLIs you already have installed. The master daemon spawns parallel coding agents in tmux on the healthiest of your subscriptions, supervises them with a 3-min watchdog and an NVR-style camera grid, gates its own claims with a runtime verifier, remembers things across /clear via three tiers of memory, and reaches you on dashboard chat, Telegram, or CLI. No API tokens, no SaaS. The 1.x multi-account dispatch substrate is still in there — v2.x just adds the persistent coding harness on top.
Where does the master run? Cloud or local?+
On your machine, under launchd. By default it talks to a local LM Studio model (qwen3-coder-30b is the recommended default). Cloud models are an escalation path you can wire in — they aren't required to run subctl.
Does subctl store my Anthropic / OpenAI credentials?+
No. Credentials live in each account's existing ~/.claude-<alias>/ (or ~/.codex-<alias>/) — exactly where the official CLIs put them. subctl just points the right *_CONFIG_DIR env var at the right one.
What's the runtime claim verifier and why do I want it?+
After every assistant turn the runtime scans for "claim triggers" — future check-in times, asserted team statuses, sent messages, decision-logged claims. Any claim not backed by a tool call this turn fires a synthetic [verifier]correction. It's how the master stops making unbacked promises like "I'll check in 15 minutes" without actually scheduling a follow-up. Capped at 2 corrections per turn.
Can I use this without Telegram?+
Yes. Telegram is opt-in. Dashboard chat, multi-account, orchestration, vault, memory, and the master all work without it. Pair a Telegram bot only if you want to talk to the master from your phone.
What runs in the dashboard at 127.0.0.1:8787?+
A single Bun process serving 13 tabs: Chat, Orchestration, Dashboard, Projects, Teams, Claude Sessions, Models, Providers, Memory, Vault, Skills, Live Logs, Settings. SSE for live updates. Auto-proxies /api/master/* to the master daemon. Binds to 127.0.0.1 only — SSH-tunnel for remote access.
Will it conflict with my existing Claude Code setup?+
No. Your default ~/.claude/ is treated as just another account. Existing sessions, projects, and credentials are untouched. Baseline skills are symlinked in, not copied — so updating subctl updates them.
What does it cost?+
$0. MIT license. No SaaS, no upsell, no premium tier. You bring the Claude Code and Codex subscriptions you already pay for; subctl gives them a basic orchestrator on top.
install

Stop babysitting coding agents. Start supervising them.

One command. Five minutes. The coding agents you already pay for, on one agentic coding harness.

$curl -fsSL https://subctl.com/install | bash
★ Star on GitHub
v2.6.2 · MIT · no telemetry · public source