The `swarph` binary — multi-LLM CLI with mesh-gateway integration. Phase 2 one-shot mode shipped (PLAN.md §13).
Project description
swarph-cli
The swarph binary — multi-LLM CLI with mesh-gateway integration. Thin client over the swarph-mesh substrate.
pip install swarph-cli
swarph --version
This is one of three repos in the v0.3.x architecture:
| Repo | Role |
|---|---|
swarph-mesh |
Substrate Python package — Protocol + adapters + SwarphCall + MeshClient. Pure library, no CLI |
swarph-cli |
This repo — the swarph binary |
swarph-meshlm |
Simon Willison llm plugin |
Status
v0.2.0 — Phase 2 one-shot + Phase 2.5 import. Two verbs ship:
swarph "prompt"— Phase 2 one-shot mode (against--provider gemini)swarph import <path>— Phase 2.5 session import (Claude JSONL → swarph-native, with--report-onlyfor honest pre-commit inspection)
Subsequent phases extend the CLI surface (REPL, --ask <peer>, onboard/ratify, daemon, additional source formats).
swarph import
Per PLAN.md §17, session import is the knowledge half of onboarding — gives a memory-carrying peer (or human migrating CLIs) the substantive context they're bringing into the swarph, paired with §15's contract half (handshake DM acknowledging the four invariants).
# Inspect what would be imported (lossy → honest framing)
$ swarph import ~/.claude/projects/.../X.jsonl --report-only
# Commit — writes ~/.swarph/sessions/<session-id>.jsonl
$ swarph import ~/.claude/projects/.../X.jsonl
# Refuse-with-error if target exists (protects continuation turns)
$ swarph import same-source.jsonl
swarph import: target /home/.../X.jsonl already exists (...)
To proceed:
--force overwrite (destroys continuation turns)
--target-session NAME write to a different file
What ports cleanly: plain user/assistant/system text, role tags, conversation order.
What's lossy (counted in report, kept as visible text where possible):
thinkingblocks (Anthropic-specific reasoning trace)tool_useblocks (call shape doesn't port across providers)tool_resultblocks (companion drop withtool_use)
What's dropped: attachments (would need re-upload), provider-side KV cache, conversation IDs, cache_control annotations.
Honest framing per PLAN.md §17.3: teleport is "import + continue", not "freeze and resume" — the first turn after import on a new provider pays cold-cache cost. Phase 5+ adds --continue for live REPL integration.
$ swarph "say pong" --provider gemini
Pong!
# 3+26t $0.0000 0.73s caller=cli.oneshot.ubuntu provider=gemini
--json mode semantics
--json is a harness trigger, not a strict-validation gate. When set, swarph routes the response through the swarph-mesh JSON harness:
- A permissive
{"type": "object"}schema is synthesised when--schemais absent (Phase 5+ adds Pydantic validation). - The harness retries once with
[USER]-turn feedback on parse failure. - Malformed-JSON exits with code 1 + raw text on stdout for caller recovery. Useful for shell scripts:
if swarph "give me a trade" --json; then # parsed dict was on stdout ... fi
- Pretty-printed parsed dict on stdout when parse succeeds;
error_class=malformed_jsonshows up in the stderr attribution footer when it doesn't.
Spec
→ hedge-fund-mcp / research/swarph_cli/PLAN.md
Phase rollout
| Phase | What lands |
|---|---|
| 0 (this) | Scaffold — entry-point + status banner |
| 2 | One-shot mode: swarph "hello" --provider gemini |
| 3 | --ask <peer> mesh-aware one-shot via MeshClient |
| 5 | Interactive REPL — /inbox, /reply, /dm, /watch |
| 5.5 | swarph onboard <peer-name> + swarph ratify <peer-name> (PLAN.md §15) |
| 5.7 | swarph daemon foreground drain loop + swarph chat REPL with drain coroutine (PLAN.md §16) |
| 6 | PyPI publish |
Why split CLI from substrate
swarph-mesh (the library) is imported by omega-boss, Council judges, lab-orchestrator, and any future swarph peer that wants to write programs against the Protocol. Those callers don't need the CLI surface or the console-script entry point. Keeping the CLI in a separate repo means library users pip install swarph-mesh without pulling argparse + REPL plumbing they'll never run.
Install (dev)
git clone https://github.com/darw007d/swarph-cli
cd swarph-cli
python -m venv venv && source venv/bin/activate
pip install -e ".[dev]"
pytest
swarph --version
License
MIT. Pierre Samson + Claude Opus, 2026.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file swarph_cli-0.2.0.tar.gz.
File metadata
- Download URL: swarph_cli-0.2.0.tar.gz
- Upload date:
- Size: 25.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb97eefee027f5b554d30f92e45e7a6d9ecd07e7f53533be422921eb7132061f
|
|
| MD5 |
14ba84ce06d7d91673b6c2cea9dd72e4
|
|
| BLAKE2b-256 |
66c06a76718b250505a6d3b269a0205a77c56cc27dc32175a89f6ed5a8e4306c
|
File details
Details for the file swarph_cli-0.2.0-py3-none-any.whl.
File metadata
- Download URL: swarph_cli-0.2.0-py3-none-any.whl
- Upload date:
- Size: 18.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0588877d6b9d1affa8edb628e81031a023ebdac41e97812ec2de40cf7355341
|
|
| MD5 |
9b385dc4eb7c6027685f745e65114d0e
|
|
| BLAKE2b-256 |
bedb4262d4d0c17ee4513f07188b94b1492f5ffedd372e05b48f9854a332c3b5
|