// local-first · terminal-native · built on MCP

太刀 tachi-agent

A local-first orchestration agent.

tachi-agent — local-first agent runtime. Dokoro gives it memory. TachiBot gives it better judgment. (TachiBot orchestrates models; tachi-agent orchestrates work.)

A small, pluggable ReAct hub that fuses dokoro (persistent memory) with tachibot (multi-model council) over MCP. The default brain runs 100% local — Qwen2.5 via Ollama — so multi-model reasoning runs entirely offline: no API keys, no cloud cost. Open an interactive chat session with bare tachi-agent, run skill bundles with --skill <name>, or deploy it as an unattended daemon with a persistent queue, recurring schedules, and per-task hearts.

┌─ what it is

The loop lives in the client — never inside an MCP server.

The ReAct agent loop runs in the client. That keeps the hub small, embeddable, and free of nested-loop coupling — no agent-inside-a-server recursion, no hidden control flow on the wire.

Every front-end — CLI, REPL, Telegram, Slack, Claude Code, the Gateway, OpenClaw — just calls orchestrator.run(task). The core depends on three interfaces and nothing else, so the same hub composes everywhere without being modified.

// the three seams

Pluggable without a plugin framework.

The core depends only on Driver, ToolHost, and Memory. Swap any one without touching the orchestrator.

the brain

Driver

Default: Qwen2.5 / Ollama, fully local. Pick a heart with TACHI_DRIVERollama · hermes · openai · openrouter — or register your own via registerDriver. Each queued task can carry its own driver. One interface, any brain.

the tools

ToolHost

dokoro + tachibot MCP servers merged and namespaced ${server}_${tool}. Add or remove servers via config, not code — tools just auto-appear. The agent ships a small curated allowlist; browse the full multi-model council at tachibot.

the memory

Memory

dokoro session recall and log wrap each run. Swap the backend or disable persistence entirely — the orchestrator is stateless between runs.

“Pluggable without a plugin framework — the core depends only on these three interfaces.”

// interactive chat & skills

A REPL by default. Skill bundles on demand.

Bare tachi-agent opens an interactive chat session — no arguments needed. Unified /commands work across the REPL and Telegram. Point at a skill with --skill <name> to narrow the tool surface and prefill the system prompt.

interactive chat

REPL by default

Run bare tachi-agent to open a persistent chat session. The prompt shows the active state: tachi [driver·skill] ›. History persists at ~/.tachi-agent/repl_history. Pass --driver or --skill to start configured.

skills / recipes

Skill bundles

Drop a Markdown file in .tachi/skills/ (or set TACHI_SKILLS_DIR). Frontmatter carries name, description, tools (allowlist), and driver. The body becomes the system prompt. See examples/skills/ for ready-made recipes.

unified /commands

Commands everywhere

/help · /tools · /model · /status · /driver · /skill · /reset · /jury · /search · /think · /task · /schedule · /exit — the same surface in the REPL and Telegram.

bash — chat quickstart
# open interactive chat (default — no args needed)
tachi-agent

# start with a specific driver or skill
tachi-agent --driver openai
tachi-agent --skill researcher "explain the CAP theorem trade-offs"

# inside the REPL
/skill repo-review
/driver openai
/jury "Is this design thread-safe?"
┌─ roadmap

From core to swarm.

  1. L0 — core✅ shipped

    The Orchestrator + seams

    The ReAct hub and the Driver / ToolHost / Memory interfaces, fully tested with mocks — no network needed.

  2. L1 — adapters✅ shipped

    Real brains, tools, and memory

    OllamaDriver (Qwen2.5) + HermesDriver via a driver registry; McpToolHost (dokoro + tachibot over stdio); DokoroMemory; a CLI.

  3. L2 — front-ends✅ shipped

    Talk to it from anywhere

    CLI, REPL, Telegram, Slack (Socket Mode), Claude Code via a run_agent MCP server, an HTTP/SSE Gateway, and the OpenClaw bridge.

  4. L2.5 — daemon✅ shipped

    Long-running, attachable

    A daemon reusing the gateway with thin-client attach, session handoff, durable event sequence, buffered replay, refcount-aware TTL/GC, and graceful drain.

  5. L3 — swarm✅ shipped

    Fan out, then synthesize

    N role-specialized agents run one task in parallel, then a synthesizer merges their answers. Bounded concurrency, quorum warnings, per-member memory isolation.

    Read the Swarm page →

  6. L4 — standalone✅ shipped

    Unattended operation

    A crash-safe persistent task queue with retry/backoff, recurring schedules from a hand-edited JSON file, per-task multi-heart drivers (ollama · hermes · openai · openrouter), outcome notifications to Telegram/Slack, durable per-run JSONL logs, and queue/run-log CLI commands.

    Read the Standalone page →

  7. L5 — hermes-parity chat✅ new in v0.4.0

    Interactive chat, skills, and service install

    Bare tachi-agent opens an interactive REPL session. Unified /commands surface shared across REPL and Telegram (/help, /tools, /model, /status, /driver, /skill, /reset, /jury, /search, /think, /task, /schedule, /exit). Skill bundles (.tachi/skills/*.md) carry a system-prompt body, a tool allowlist, and a driver preset. tachi-agent service install bootstraps a macOS launchd LaunchAgent — the primary macOS daemon path. tachi-agent doctor runs preflight diagnostics.