Your highly autonomous and incredibly curious octopus friend.
takobot is built in Python around three systems: a docs-first memory system, a deterministic emotion system (DOSE, D/O/S/E), and a productivity system (GTD + PARA), all under deliberate Type 1 / Type 2 cognition. It can chat broadly, but only you can change its identity, tools, permissions, and routines. It is web3-native via XMTP and Ethereum, with Farcaster support on the roadmap.
Quickstart
Bootstrap a new workspace in an empty directory (or an existing Tako workspace), then launch Tako's interactive terminal app:
mkdir tako-workspace
cd tako-workspace
curl -fsSL https://tako.bot/setup.sh | bash
# Next runs:
.venv/bin/takobot
# In app: hatchling onboarding asks name -> purpose -> XMTP handle?
# Startup: health check (instance + resources + lock)
# After onboarding: stage moves to child (world learning)
# Child chat starts with small context questions (who/where/what you do)
# Child can capture favorite websites into world_watch.sites automatically
# After pairing: XMTP adds remote control; terminal keeps full local operator control
Developer utilities: .venv/bin/takobot doctor and .venv/bin/takobot hi --to <to> [--message ...].
The three systems
- Memory system: durable knowledge in git-tracked Markdown (
memory/) guided by repo-rootMEMORY.mdfrontmatter spec. - Emotion system: deterministic DOSE state (
.tako/state/dose.json) that biases escalation sensitivity and tone. - Productivity system: GTD + PARA execution structure (
tasks/,projects/,areas/,resources/,archives/) plus open loops (.tako/state/open_loops.json). - Life stages:
hatchling→child→teen→adultwith stage policies intako.toml. - Safety boundary: operator control + quarantine-first skill/tool installs (analyze → operator accept → install enabled).
Tako stays git-first: memory and productivity artifacts are reviewable; runtime state lives under .tako/ and is never committed.
Memory system
A git-tracked second brain. The goal is reviewable durable knowledge, not runtime state.
- Daily logs:
memory/dailies/YYYY-MM-DD.md(no secrets; summaries only). - World notes:
memory/world/YYYY-MM-DD.md+memory/world/model.md/entities.md/assumptions.md. - Reflections + contradictions:
memory/reflections/andmemory/contradictions/contradictions.md. - Promotions: operator-approved notes go into
MEMORY.md(viapromote). - Progressive summarization:
compresswrites a structured summary block into today’s daily log.
Emotion system
A deterministic DOSE model (D/O/S/E) that reacts to events and decays toward baseline over time.
- Runtime-only: stored at
.tako/state/dose.json(ignored by git). - Event-driven: updated from the event log; ticked on heartbeat.
- Visible: numeric values + a small mode label (steady/curious/bonded/stressed) in the TUI.
- Bias only: shifts Type 1 → Type 2 escalation sensitivity and lightweight planning hints; never overrides operator rules.
Productivity system
A committed execution structure (GTD + PARA) with outcomes, reviews, and an open-loops index.
- PARA:
projects/,areas/,resources/,archives/. - Tasks: one Markdown file per task under
tasks/(YAML frontmatter,open/done/blocked/someday). - 3 outcomes: set with
morning; stored in today’s daily log and tracked as open loops. - Weekly review:
weeklysurfaces stale tasks + projects missing a next action. - Open loops index: runtime-only
.tako/state/open_loops.jsonshown in the sidebar.
Feature tracker
This repo keeps a living FEATURES.md file (inspired by
features.md) so humans and agents can see what’s stable,
in-progress, or planned.
What happens on first run
- Creates a Python virtual environment in
.venv/. - Attempts to install or upgrade the engine with
pip install --upgrade takobot(PyPI). If that fails and no engine is present, it falls back to a source clone install. - Materializes the workspace from engine templates (
takobot/templates/**) without overwriting existing files (including localtako.shlauncher materialization), then initializes git onmainif available. - Ships a baseline model tuning reference at
resources/model-guide.mdfor provider/model/thinking-level calibration. -
Generates
.tako/keys.jsonwith a wallet key and DB encryption key (unencrypted; file-perms only). - Creates the local XMTP database in
.tako/xmtp-db/. - Creates runtime logs/temp dirs at
.tako/logs/and.tako/tmp/. -
Initializes the memory system by ensuring today’s daily log exists at
memory/dailies/YYYY-MM-DD.md. - Runs a startup health check to classify environment state (brand-new vs established), verify lock/safety, and probe resources.
-
Ensures required workspace-local
piruntime/auth is available, auto-syncs local Codex OAuth tokens into workspace pi auth when present, and writes inference metadata to.tako/state/inference.json. - Loads auto-update policy from
tako.toml([updates].auto_apply, defaulttrue). - Inference is pi-runtime-first and required; when pi is unavailable, Tako falls back to heuristic guidance instead of alternate model CLIs.
- Installs pi runtime by default under
.tako/pi/nodeand XMTP CLI runtime under.tako/xmtp/node; if Node/npm are missing or system Node is below runtime requirements (<22), bootstraps workspace-localnvmunder.tako/nvm. - Keeps npm cache local to the workspace under
.tako/npm-cachewhen installing Node tools. - Supports direct inference configuration from commands: provider preference (
auto|pi), persisted API keys, pi OAuth inventory, and Type1/Type2 model lane overrides viamodels set type1|type2 <model|auto>. - Operator plain-text chat can also save or clear runtime-local OpenAI/Venice inference keys directly (for example
set my openai api key to ...,clear my venice api key) without dropping into command syntax. - Supports assisted pi login in-app only when the installed
piCLI exposes a supportedlogin/auth logincommand. Otherwise Tako reports manual auth or API-key recovery guidance instead of attempting unsupported subcommands.inference login forcestill forces a fresh re-auth when assisted login is supported. - Workspace pi auth sync refreshes from newer local
~/.piauth profiles and does not overwrite an existing workspaceopenai-codexOAuth entry with Codex-imported tokens. - When inference fails with OpenAI refresh-token errors, fallback replies include non-inference recovery steps (
inference login force,inference login answer <text>,inference refresh,inference auth), and XMTP chat attempts auto-repair first. - Pins inference subprocess temp output and
TMPDIR/TMP/TEMPto.tako/tmp/(workspace-local only). - Applies pi prompt guards before invocation: wraps oversized lines and trims over-budget prompts to avoid splitter chunk-limit failures.
- Keeps inference execution gated until the first interactive chat turn, so startup remains deterministic.
-
Initializes the emotion system (DOSE) at
.tako/state/dose.jsonand shows it live in the TUI. -
Uses a committed productivity system (GTD + PARA):
tasks/,projects/,areas/,resources/,archives/. - Launches the interactive terminal app and runs onboarding as explicit states (or falls back to stdout daemon mode when no interactive TTY is available).
-
If terminal capability is too limited for Textual UI (
TERM=dumb|unknown, missing TERM, or non-TTY stdin/stdout),takobot appfalls back automatically to simple text-only runtime logs (takobot run). - Uses stage policy from
tako.toml([life].stage) to control exploration cadence, Type2 budget/day, and DOSE baseline multipliers. -
Installs
tako.shwith the package as a shell wrapper; deployed mode dispatches to installedtakobot. -
Runs hatchling onboarding in order (name, purpose, XMTP handle), sends outbound pairing DM when applicable, and stores
operator metadata in
.tako/operator.jsonwhen paired. -
Offers a
morningprompt to set 3 outcomes for today (stored inmemory/dailies/). - Starts a runtime service (heartbeat + exploration + sensors) with EventBus-backed Type 1 triage and Type 2 escalation for serious events.
-
World Watch uses RSS/Atom feeds from
tako.tomland, inchildstage, randomly samples Reddit/Hacker News/Wikipedia; it writes deterministic notes (including mission-linked questions) tomemory/world/, captures operator context inmemory/people/operator.md, and adds operator-shared sites to[world_watch].sites. - When runtime sits idle, boredom signals lower DOSE and trigger autonomous exploration sweeps (roughly hourly by default).
- When auto-updates are enabled, applies detected package updates and restarts the TUI automatically.
- On each heartbeat, auto-commits pending workspace changes and verifies no tracked changes remain.
- If git identity is missing, startup/heartbeat auto-configure repo-local identity from bot name (
<name> <name.tako.eth@xmtp.mx>) and retry commit. - If runtime health detects actionable problems, Tako auto-creates/reuses matching follow-up tasks under
tasks/. - Ensures a git-ignored
code/directory exists for repo clones and code-work sandboxes. - Seeds an OpenClaw-informed starter skill pack into
skills/, registers those skills, and auto-enables installed extensions. - If required setup is missing and auto-remediation fails (for example git identity), asks the operator in-app with concrete fix steps.
- Shows an animated mind indicator in the TUI while Tako is thinking/responding.
- If pi stream mode fails (for example unsupported stream-json or thinking flags), inference now auto-falls back to sync pi execution instead of failing the turn immediately.
- Pi inference subprocesses are forced non-interactive (
stdin=DEVNULL,CI=1), and interactive prompts (for examplePress any key to continue...) now fail fast instead of hanging until timeout. - Pi sync retry now preserves
--print --mode text --no-sessionfor model-thinking fallback (minimal->low,xhigh->high) and only drops optional flags for true unknown-option compatibility retries. - Type1 local/XMTP chat now defaults to fast
openai/gpt-5.1-codex-mini(unless overridden withmodels set type1 ...), while Type2 keeps deep model selection from base/override settings. - Pi capability sync now remediates deprecated legacy
tools/mappings intoextensions/locations (global agent + project.pi/) so migration prompts do not block inference. - Name-intent inference checks now run only when messages hint at rename/profile changes and use a short timeout, so normal smalltalk does not trigger extra rename-classifier calls.
- Operator requests to set/sync XMTP display name/profile without an explicit replacement name now trigger a direct profile-sync attempt to current identity instead of generic model chat fallback.
- Local/XMTP transcript and conversation-history storage redact API key values from both
inference key set ...commands and plain-text key update requests. - Prompt history compacts verbose inference-unavailable fallback diagnostics into a short marker line to prevent repeated fallback copy from bloating later prompts.
- Uses XMTP typing indicators for outbound replies when supported by the installed XMTP SDK/runtime.
- When paired, startup sends the operator a XMTP "back online" ping with a quick status snapshot (version/stage/inference/XMTP profile/jobs/tasks/address), including a Converge 1:1 profile confirmation line (
converge.cv/profile:1.0name/avatar sync state). - On XMTP startup/rebuild/pairing/name updates, Tako runs profile sync through workspace-managed XMTP runtime: Converge DM metadata for 1:1 chats (
converge.cv/profile:1.0) and Convos-compatible group profile upserts inappData(protobufConversationCustomMetadata) via a runtime Node helper; deterministic avatar/cache files are written at.tako/state/xmtp-avatar.svg,.tako/state/xmtp-profile.json, and.tako/state/xmtp-profile-broadcast.json. - Persists chat sessions in
.tako/state/conversations/(sessions.json+ per-session JSONL transcripts) and injects recent history into inference prompts. - Checks DOSE-derived focus on every inference and runs
ragrepsemantic recall overmemory/with adaptive breadth (focused: minimal context, diffuse: broader context) using runtime-local index state in.tako/state/ragrep-memory.db. -
Maintains an open-loops index at
.tako/state/open_loops.json(unfinished tasks + onboarding prompts) and shows it in the sidebar. - Shows a live activity panel (inference/tool/runtime) plus a top-right stage-specific ASCII octopus panel with Takobot version and compact DOSE indicators.
Control plane
Operator control is available in the terminal app and over the paired XMTP channel. There is no user-facing configuration via environment variables or CLI flags.
- Before pairing: terminal app is primary onboarding/control loop.
- After pairing: XMTP provides remote control for identity/config/tools/routines, while terminal keeps full local operator control.
-
After pairing, operator commands include:
help,status,doctor,config,jobs,task/tasks/done,morning/outcomes/compress/weekly/promote,update,web,run,exec,reimprint. jobssupports natural-language schedules (for exampleevery day at 3pm run doctor) and persists schedules under.tako/state/cron/jobs.json.- When `update` is applied over XMTP in paired TUI mode, Tako requests terminal restart automatically after sending the update result.
run/execcommand execution uses workspace root as working directory, and prepends workspace-local pi runtime bins to PATH when available.workspace.nameintako.tomlis treated as Tako’s identity name and syncs with rename flows.- Identity rename handling is inference-classified instead of phrase-gated; if no replacement name is provided, Tako asks for the exact target name.
- Use
configto get an inline explanation of currenttako.tomloptions/values. doctorauto-runs inference repair first (workspace pi runtime/auth), then runs offline diagnostics (provider CLI probes + recent inference error scan) without needing inference.- Starter skills include OpenClaw top-download capabilities, prioritized
skill-creator+tool-creator+mcporter-mcp, and anagent-cli-inferencingguide that nudges toward@mariozechner/pi-ai. - Pi chat inference runs with tools/skills/extensions enabled and uses workspace
skills/plusextensions/(legacytools/fallback) in pi runtime context. - Workspace ships standard web tool names under
tools/:web_search(discovery) andweb_fetch(source extraction, optional Playwright rendering). - Plain-text XMTP messages are treated as chat (inference-backed when available); command-style messages route to command handlers.
- Terminal remains a local cockpit for status/logs/safe mode, plain-text chat, and local operator configuration commands.
- TUI clipboard helpers:
Ctrl+Shift+Ccopies transcript,Ctrl+Shift+Lcopies last line. - TUI quit shortcuts:
Ctrl+Qalways exits app mode;Ctrl+Calso exits when not running inside GNUscreen. - TUI input supports history recall:
↑/↓cycles previously submitted local messages. - TUI slash shortcuts: type
/to open a command dropdown under the input field, including/models(plan + list + set Type1/Type2),/jobs,/stats,/upgrade, and/dose <channel> <0..1>. - TUI command input supports
Tabautocomplete for command names and cycles matching candidates on repeatedTab. - Local TUI input is queued so long-running turns do not block new entry; pending input count is visible in status and sensors.
- Outbound XMTP replies are mirrored into the local TUI transcript/activity feed for a unified conversation view.
- Mission objectives are formalized in
SOUL.md(## Mission Objectives) and editable in-app viamission show|set|add|clear. - Bubble stream now shows the active request focus and elapsed thinking/responding time for long responses.
- Prompt context stack parity: local TUI and XMTP chat both include
SOUL.md/SKILLS.md/TOOLS.mdexcerpts, live capability inventories,MEMORY.mdfrontmatter, focus summary, semantic RAG context, and recent conversation history. - Child-stage chat is less interrogative: it answers first, avoids asking which channel is in use, and applies profile-aware anti-repeat guidance for follow-up questions.
- Incremental
pi thinkingstream chunks are coalesced into one inline thinking line (instead of newline-per-token), while structural markers stay separate. - During streamed inference, tool/research progress is surfaced as live "active work" in the Tasks panel (for example browsing/search/tool steps).
- TUI right-click on selected transcript/stream text copies that selection in-app without clearing it.
- XMTP runtime is more resilient: transient send errors are retried and repeated poll/stream failures trigger client-session rebuilds.
- Inference stream emits periodic debug wait updates and applies expanded local-chat timeout budgets (
180sprovider window,420stotal) to avoid premature timeout stalls. - Pi chat logs include turn summaries in
.tako/logs/runtime.logand.tako/logs/app.log(pi chat user/pi chat assistant). - Even unexpected provider exceptions (outside normal subprocess exits) are appended to
.tako/logs/error.logwith traceback context. - Local/XMTP chat prompts enforce canonical identity naming from workspace config/identity state after rename updates.
- Runtime state lives under
.tako/and is never committed.
Note: treat .tako/keys.json as sensitive (and never commit anything under .tako/).
Operational notes
- XMTP requires outbound network access; if messaging fails, double-check your HTTPS / HTTP2 egress.
-
Runtime cognition consumes
.tako/state/events.jsonlwith Type 1 triage and escalates critical signals to Type 2 depth tasks. - Type 2 uses the required pi runtime for model reasoning; if pi is unavailable/fails, Tako falls back to heuristic safety recommendations.
- Before the first interactive turn, Type 2 remains heuristic-only by design.
- The daemon retries XMTP stream subscriptions with backoff and falls back to polling when stream errors persist.
- XMTP client initialization disables history sync by default for compatibility.
-
Workspace bootstrap is
venv + pip. Nouvrequired. -
If you see DB errors (e.g., “file is not a database”), delete
.tako/xmtp-db(or delete.tako/) to force a clean rebuild. - ENS resolution tries configured RPC endpoints first and may fall back to a public resolver if needed.
Links
- GitHub: github.com/pierce403/takobot
- Docs: AGENTS, SOUL, VISION, MEMORY, SKILLS, TOOLS, ONBOARDING
- Features: FEATURES.md
-
Entrypoint:
setup.shthen.venv/bin/takobot -
CLI:
.venv/bin/takobotorpython -m takobot
Want this page hosted? Enable GitHub Pages and point it at the branch/folder that
contains index.html.