Show HN: Twine is a meta-harness with workflows, cross-agent memories and traces Standing Desks released Twine, a native macOS workspace for coordinating AI coding agents, requiring macOS 26 or later on Apple Silicon and installable via Homebrew cask standing-desks/tap/twine-ade. Twine groups work into sessions containing workflow tabs — Terminal, Single agent, Adversarial, Coordinator and Custom — with the Adversarial workflow pairing an implementer agent against a reviewer that approves or sends changes back, and custom agent graphs saved as TOML files in ~/.config/twine/workflows. The tool adds visual traces that record each command and LLM call, cross-agent memory, and terminal splits of up to four panes, aiming to give developers a terminal-first collaboration layer for multi-agent coding. A native macOS workspace for coordinating coding agents. Install install · Quick start quick-start · User guide https://standing-desks.github.io/twine/documentation/guide/ · Contributing contributing Twine is the terminal-first collaboration layer for AI coding agents. Bring agents together through controlled workflows, visual traces, and cross-agent memory. Twine requires macOS 26 or later on Apple Silicon . Install it with Homebrew https://brew.sh : brew install --cask standing-desks/tap/twine-ade Then open Twine from Applications. To install manually instead, download the .dmg from the latest release https://github.com/standing-desks/twine/releases/latest , open it, and drag Twine onto Applications . To update a manual install, see the install notes https://standing-desks.github.io/twine/documentation/guide/ install . Agent workflows also need at least one supported harness supported-harnesses installed and signed in. Terminal workflows need nothing else. This takes about a minute and needs no agent harness. 1. Open Twine and choose Open Folder… ⌘O . Pick any project folder. 2. Create a session. A session groups the work for one task. 3. Add a workflow in a new tab and choose Terminal . 4. Run a command in the terminal, for example git status . You should see the command's output in the terminal and one step for that command in the Traces panel. Selecting the step jumps to its output. To run your first agent workflow, add another tab and choose Adversarial . Pick a harness for the implementer and for the reviewer, start the workflow, and type a task in the implementer's terminal. When the implementer submits its completion, the reviewer's terminal receives the work and either approves it or sends changes back. A session is a named body of work in a folder. Each top-level tab in a session is a workflow . Select a built-in workflow or create your own agent graph: | Workflow | How it works | |---|---| | Terminal | A plain shell, with optional split panes. | | Single agent | One interactive coding agent. | | Adversarial | An implementer does the task; a reviewer approves it or requests changes. | | Coordinator | A planner sends a shared plan to two workers. A coordinator waits for both results and checks their work. | | Custom | Your own graph of agents and event links. Run agents in parallel, stream pieces, review results, or compare times. | Click + , then Create your own , to open the native graph editor in the new tab. Saved workflows are TOML files in $XDG CONFIG HOME/twine/workflows default ~/.config/twine/workflows . Copy these files to share workflows or keep them in version control. Agent instructions use native harness instruction channels; setup does not start agent work. Common tasks, each covered in the user guide https://standing-desks.github.io/twine/documentation/guide/ : - Advance a workflow yourself. Use Mark done… to submit a completion, review decision, or assignment on an agent's behalf. See agent workflows https://standing-desks.github.io/twine/documentation/guide/ agent-workflows . - Split a terminal into up to four panes, and paste images or drop files into a pane as paths. See terminal panes https://standing-desks.github.io/twine/documentation/guide/ terminal-panes . - Browse and edit files in the open folder with syntax highlighting. See files https://standing-desks.github.io/twine/documentation/guide/ files . - Change the terminal font in Twine → Settings… ⌘, , which edits ~/.config/twine/config.toml and applies changes on save. See configuration https://standing-desks.github.io/twine/documentation/guide/ configuration . terminal font family = "JetBrains Mono" font size = 13.0 - Inspect recorded agent activity in Traces → In Depth . Overview shows activity counts and an Inspect activity action. LLM calls include public responses/summaries, model and usage details when the harness supplies them; missing timings or request bodies remain marked as unrecorded. Show full details opens complete saved inputs and results. The storage control shows usage, pins a step, and clears completed, unpinned details. Twine keeps compact metadata in SQLite and deduplicates large details in adjacent files. Active steps and pinned details can exceed the cache budget. Native harness files remain untouched. traces detail budget mb = 512 retention days = 90 Closed, unpinned workflows; 0 disables age expiry. Saved Codex, Claude Code, Pi, and OMP conversations can recover activity for their linked steps. Recovery uses native IDs or an unambiguous prompt/time match within the same conversation. It cannot recover data absent from both the observer and native history. OpenCode and Antigravity use live observers. A harness is the external agent CLI that fills a role. Twine finds each one by its command on your shell's PATH : | Harness | Command | Prompt and tool detail in Traces | |---|---|---| | Codex | codex | Yes | | Claude Code | claude | Yes | | pi | pi | Yes | | OMP | omp | Yes | | Antigravity | agy | Yes; model invocation details where exposed | | OpenCode v2 | opencode | Yes | Install and authenticate harnesses separately. Model choices come from each harness's own CLI, and provider access and usage charges follow your harness configuration. Twine never edits your harness config files. Twine is in early development . It is usable day to day, but features, integrations, and saved formats can change between releases, and there are no stability guarantees yet. The changelog https://github.com/standing-desks/twine/blob/main/CHANGELOG.md lists what changed in each release. Known limitations: - Agents run directly in the open folder. Twine does not create worktrees or sandboxes, and file ownership between parallel workers is advisory. - Twine is an interactive desktop app. It does not run workflows unattended or headless. - Harness support depends on CLI versions, and a harness update can break an integration until Twine catches up. - Tracing is best effort. Recorded terminal output is capped at 64 MiB per terminal and 512 MiB overall, so older output can expire. - Resuming a conversation depends on the harness recording a session handle. Contributing Guide https://github.com/standing-desks/twine/blob/main/CONTRIBUTING.md · Developer Certificate of Origin https://github.com/standing-desks/twine/blob/main/DCO Bug reports and feedback on real workflows are welcome in GitHub Issues https://github.com/standing-desks/twine/issues . Include your macOS, Twine, and harness versions, what you expected, and what happened. For larger changes, open an issue to discuss the idea before you start. Changes reach main through pull requests. You will need: - Xcode 27.0 , selected as the active developer toolchain. Command Line Tools alone are not enough. - The Xcode Metal Toolchain : xcodebuild -downloadComponent MetalToolchain . - Stable Rust , installed through rustup https://rustup.rs . git clone https://github.com/standing-desks/twine.git cd twine make debug open out/debug/Build/Products/Debug/Twine.app Debug builds keep their data in out/runtime/debug/ , separate from an installed copy of Twine. make fmt format the library and the app make check lint and unit-test the library and the app make list every target make ui-test runs the UI suite and takes over the desktop while it runs. | Path | Contents | |---|---| | macOS/ | The SwiftUI and AppKit front end. | | twine-core/ | The Rust application library that owns behavior and saved state. | | twine-bridge/ | The C ABI adapter between the two. | | docs/ | Source for the website and guides https://standing-desks.github.io/twine/ . | The development guide https://standing-desks.github.io/twine/documentation/development/ covers setup, harness integration, and releases. CONTEXT.md https://github.com/standing-desks/twine/blob/main/CONTEXT.md defines the terms used in the code and UI, and AGENTS.md https://github.com/standing-desks/twine/blob/main/AGENTS.md holds the repository conventions. Please report vulnerabilities privately through GitHub security advisories https://github.com/standing-desks/twine/security/advisories/new instead of a public issue. Thank you to AI Tinkerers Seattle https://seattle.aitinkerers.org/ for the opportunity to demo and premiere Twine. Twine's terminal emulation uses SwiftTerm https://github.com/migueldeicaza/SwiftTerm . Twine is available under the MIT License https://github.com/standing-desks/twine/blob/main/LICENSE .