Skip to content
junghan0611Public

About

Open visible sibling AI sessions in Herdr or tmux, reopen pi sessions in tmux under the same garden id, and exchange messages across pi, pi-durable, Claude Code, Codex, Copilot, OMP and Antigravity. Each harness keeps its own authentication, tools and transcript.

Topics

Resources

Contributing

Stars

28 stars

Watchers

1 watching

Forks

Latest commit

 

History

1,622 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

entwurf

entwurf connects independent agent harnesses as visible siblings: open a new session, reopen a dormant pi session in tmux, or reach an existing sibling by garden id. Fresh sessions open in the caller's Herdr workspace or tmux session by default; explicit tmux placement can name another existing session. Each harness keeps its own runtime, authentication, tools and transcript.

entwurf — a forged screwdriver for visible sibling sessions

Pi ↔ native Claude Code inside the Herdr workbench. A recorded source-checkout demo: callback → task → native Bash → reply. Source recipe and original provenance (the recipe creates a new take; the original private capture is not shipped).

Pi and native Claude Code collaborating inside Herdr

npm · maintained by junghanacs.com

A sibling is a visible session with its own runtime boundary, not a disposable worker or a subagent of a new central harness. Entwurf supplies identity, delivery, receipts and named lifecycle verbs; the operator and native harnesses keep steering. Git branches, worktrees, file isolation and internal delegation remain their concern. Short answers: FAQ.

Verb Tool Where it lands Harnesses
Open a new sibling entwurf_fresh_call Herdr: a new unfocused tab in the caller's workspace. tmux: a new window in the caller's session, or an existing session named by placement.tmuxSession; without an explicit tmux placement, a Codex caller opens beside its own TUI pane Herdr: pi, Claude Code. tmux: pi, pi-durable, Claude Code, Copilot, OMP, Codex
Reopen a dormant sibling entwurf_resume_call A visible tmux window under the same garden id, with the transcript, model, provider and cwd its record names; no turn is run pi
Message an existing sibling entwurf_v2 Its own rail: control socket, self-fetch mailbox or native push; delivery starts no process pi, pi-durable, Claude Code, Copilot, OMP, Antigravity, Codex

Antigravity is message-only: an existing conversation registers itself, and Entwurf never launches one. A launch receipt is neither the new sibling's address nor proof that it processed its task; the sibling's own callback envelope supplies its garden id.

The package holds the v2 core, native-harness bridges, a pi adapter and an ACP plugin. ACP is one ingress, not the boundary; pi is one adapter, not the center. Claude and Cortex Code are ACP backends. Codex and Antigravity stay native so they retain their own tools and work context. Capabilities differ by rail: a shipped citizen is not a promise of every lifecycle operation.

Releases contain each cut's notes and acceptance receipts; CHANGELOG records source history.

Install

Choose by where you work. Bring your own harnesses, subscriptions and login. The native durable route below additionally supplies an app/TUI, Entwurf's own thin composition of the durable app upstream omits from its npm release; it does not supply credentials or take ownership of the harness.

Direct — ordinary shell or tmux

Prerequisites: Node >=24.0.0, Python 3 for setup, and any harnesses you choose to use, already installed and authenticated. Pi is optional-by-presence, supported range >=1.3.0 <1.4; Claude Code supported floor >=2.1.217 is required for its managed exec-hook lifecycle. pnpm is needed only for source-checkout setup.

npm install -g @junghanacs/entwurf
entwurf setup /path/to/your-project
entwurf check-bridge

setup composes each harness it finds and reports PASS / SKIP / FAIL. An absent harness is an explicit SKIP; a detected incomplete/below-floor integration is a named FAIL with nonzero exit, not a false green. check-bridge proves the installed MCP bytes boot and list tools without backend auth; it does not certify a real model turn or native receive rail.

Clean-host setup owns project-local/source installs, config paths, optional backends, doctors, upgrade/repair and uninstall. Codex also needs your own hook-trust decision, app-server and exact-directory consent: the operator steps. Plain MCP registration alone does not make a garden citizen.

Platform bounds: Linux is the certified harness-rail axis. macOS Entwurf-only installation is CERTIFIED (CI), weaker than a physical-host doctor; its native harness rails, ACP and mux remain NOT CERTIFIED — pending physical host. Detected harness wiring on Darwin can therefore be written while setup stays non-green. WSL2: a CI runner (experimental) measured the Entwurf-only install and a zero-token Pi citizen; general, physical-machine or harness-parity WSL2 support is not declared, and delivery, other harnesses and physical machines are unmeasured. Native Windows has an experimental first preview, a CI-built x64 addon that ships in core 0.39.0 (published to npm); 0.38.1 and earlier carry no Windows addon. On a GitHub Actions windows-2025 x64 runner with Node 24.18.1 and Pi 1.3.0, a CI-built artifact was installed, wired with pi install, birthed two Pi citizens and delivered one garden-id entwurf_v2 message between them, with an offline scripted model and no vendor turn. Every other native-Windows surface (other harnesses, setup and the .sh bins, fresh/resume, mux/Herdr/ACP, physical machines) is not declared; the measured scope and its named gaps are in BASELINE. The package has no npm os restriction; that is not certification of every platform's harness rails.

Native durable (pi-durable)

The package supplies Entwurf's owned app/TUI carrier and nine exact Pi 1.3.0 SDK members. No separate runtime checkout, patch, build or ordinary Pi CLI is needed. The launch verifies carrier integrity and every reachable SDK edge's name/version; incomplete, drifted or mixed supply refuses by name.

entwurf pi-durable --provider <provider> --model <model-id> --width task-wide
entwurf pi-durable --continue
entwurf pi-durable --resume

--continue opens this directory's newest durable session. --resume lists its sessions, most recently written first, by creation time, garden id and last write, and reopens the one you choose as it was saved; a cancelled choice opens nothing.

The contact adds garden identity and two-way mailbox communication. Entwurf owns the thin app/TUI composition (shipped as an emitted JS carrier); execution, models/auth, queues, SQLite, transcripts and recovery remain the upstream SDK's: Hard Rule 17, supply the missing surface; do not become the harness.

Optional --native-module <absolute file> initializes trusted ESM before runtime/TUI imports, then installs its default native Extension after the contact. --native-module-dir <absolute directory> (#134) loads the top-level *.extension.mjs files of that one named directory in byte-wise order instead, and the durable TUI keeps a live background-task badge on screen at any terminal size. No automatic module discovery or classic Pi API shim; guards are not a sandbox or rollback. Ordinary Pi's known peerDependencies warning reflects the separate native SDK supply. Native setup owns flags, refusals and the extension contract.

Herdr workbench

herdr plugin install junghan0611/entwurf/plugins/herdr --yes

This separate path activates Herdr-integrated pi and Claude Code with an independently locked runtime and an observation pane; it puts no Entwurf bins on PATH. An Entwurf release does not automatically re-pin that runtime. Herdr guide owns install, use, evidence and removal; the plugin does not own delivery or the Herdr launch rail.

Garden launcher

After direct setup, start a pi citizen in your project:

cd /path/to/your-project
entwurf pi
# equivalent when the package is registered (also the Herdr plugin's spelling):
pi --entwurf-control

entwurf pi execs your own pi with the control flag. A plain pi may load the package without becoming a citizen. The record mints the garden id; do not inject a session id. Native harness launch and manual Herdr argv instructions live in setup §2–§5.

In that harness session, ask the agent to:

  1. Call entwurf_self to confirm its authoritative identity.
  2. Call entwurf_peers to discover existing citizens and their liveness facts.
  3. Pick a live garden id and call entwurf_v2 with a message, for example:
{
  "target": "<garden-id from entwurf_peers>",
  "intent": "fire-and-forget",
  "message": "Hello from a sibling.",
  "wants_reply": true
}

These are tools, not shell subcommands. Pi calls mcp__entwurf_bridge__<verb> through Pi's built-in MCP. The server exposes eight verbs; a pi citizen has six active + two hidden (entwurf_inbox_read and entwurf_register_native), since it has no mailbox and its own extension births it. The server key stays entwurf-bridge. An operator/trusted-project MCP entry with that normalized namespace can replace the registration by Pi's own precedence; /mcp shows it, and Entwurf does not scan or fight that choice.

Entwurf orchestration

One narrow dispatch capability connects independent siblings, not an agent factory. The record is the sole address authority. A pane, socket, native transcript id, model or process marker is a carrier or observation, never a second address axis. Liveness is read at dispatch time; an id's shape does not tell you its transport.

entwurf_v2 — canonical dispatch verb

pi / pi-durable / Claude Code / Copilot / OMP / Antigravity / Codex
  → record-backed garden id
    → entwurf_v2
      → control-socket | self-fetch mailbox | native-push
What you want Tool What its receipt means
Message, reply or hand off to an existing garden id entwurf_v2 {target, intent:"fire-and-forget", message} Receiver acceptance boundary, mailbox enqueue or native injection; not completion
Open a new visible sibling entwurf_fresh_call {backend, model, task, cwd?} Launch receipt only; the sibling's nonce callback envelope supplies its new garden id
Reopen a dormant pi citizen under its own id entwurf_resume_call {target} Separate LAUNCH and socket OBSERVATION receipts; no turn is run

Delivery starts no process. A live pi receives over its record-addressed control address (a Unix socket; on the experimental native-Windows Pi preview, a named pipe); an armed self-fetch citizen (Claude Code, Copilot, OMP, pi-durable) through its mailbox; a probe-alive native-push citizen (Antigravity, Codex) through its native conversation/thread. Dormant pi, undeliverable mailboxes, dead/indeterminate native push and record-less sockets reject honestly. Only control-socket dispatch takes the per-target lock; the other rails use their own deliverability/probe evidence.

A control-socket sent means a turn was triggered, not that the model read the text. queued-steer and queued-follow-up are volatile process queues, with no FIFO between them; abort drops them. accepted-unknown-boundary is acceptance we cannot classify, never a reason to retry. A mailbox enqueue is a durable file receipt. wants_reply is etiquette, not waiting, polling or ownership; replyability is a live rail fact, not merely a consequence of trusted identity. DELIVERY owns these distinctions.

One declared remote pair (opt-in, #107). The operator places an entwurf-remote-pair.json on each of two hosts. Then entwurf_v2 to the declared remote garden id runs the other host's entwurf remote-pair-receive once over the operator's own SSH, and that host checks the pair and dispatches locally. The trust is the same operator's SSH account. It makes one attempt with no retry, and it uses no relay or listener. DELIVERY owns the contract; setup covers the operator steps.

Mux launches; it never delivers. Inside Herdr, fresh opens a new unfocused tab in the caller's workspace, pi/Claude Code only, with no tmux fallback. Outside, it opens pi/pi-durable/Claude Code/Copilot/OMP/Codex visibly on the caller's own tmux server. pi-durable runs the installed carrier on its exact SDK set described above and refuses by name before any window when that verdict is not green; Herdr does not fresh-open it. The model is required; optional cwd is a literal absolute directory, omitted or empty means the caller's cwd. Optional placement.tmuxSession names an existing tmux session (not permitted inside Herdr), never a new session or a cwd lookup. Omitted tmux placement follows the caller: Codex beside its own TUI pane matched by thread-id, everyone else in their own session. Missing/ambiguous context refuses. A launch receipt is neither the callback address nor proof of task processing. Resume is pi-only, tmux-only, same id, record-supplied transcript/model/provider/cwd; a live or non-pi target refuses, and an unobserved window stays visible without retry. Exact boundaries: tmux launch and Herdr launch.

Concepts

Entwurf (기투, projection-of-self) connects independent visible siblings; garden id names a record-backed citizen, not its pane or native transcript. FAQ explains ACP, MCP and context carriers.

Pi integration

The pi adapter registers the compiled bridge with Pi's built-in MCP after record birth; Pi supervises the MCP child. MCP is ingress; pi receive remains the record-addressed control address (a Unix socket, or the native-Windows preview's named pipe). Garden identity and dispatch stay Entwurf's. Codemode is harness-internal, not another garden citizen.

Operation guides

What this repo owns, and does not

Owns: garden identity, live-fact dispatch and receipts, native bridge integrations, visible lifecycle launch seams, the pi adapter and isolated ACP plugin lifecycle. Does not: a second harness, memory DB, prompt reconstruction, transcript hydration, credential mediation, subscription bypass, pane-typing delivery or hidden orchestration. AGENTS owns these invariants and exact capability boundaries.

Verification surfaces

  • VERIFY: evidence strength, deterministic/package gates and LIVE release protocol.
  • BASELINE: operator-driven observations and dated host receipts.
  • DELIVERY: per-harness async receive capabilities, boundaries and limits.

Installation, a doctor, a fixture and an exact release candidate prove different things; none is interchangeable with the others or an all-host/long-haul guarantee.

References

License

MIT

About

Open visible sibling AI sessions in Herdr or tmux, reopen pi sessions in tmux under the same garden id, and exchange messages across pi, pi-durable, Claude Code, Codex, Copilot, OMP and Antigravity. Each harness keeps its own authentication, tools and transcript.

Topics

Resources

Contributing

Stars

28 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages