Self-extending terminal agent

A personal agent that
writes its own tools.

MySiri lives in your terminal and remembers across sessions. When it hits something it can't do, it writes a brand-new tool as real Python source, commits it to git, and uses it in the same turn — growing more capable every time you talk to it.

mysiri — zsh
you › make yourself a tool that tells the weather, then the weather in Berlin
→ using tools: build a capability for current weather…
   create_tool {name: get_weather}ok
      │ written to tools/generated/get_weather.py, committed a1b2c3d
   get_weather {city: "Berlin"}ok
mysiri › It's 18°C and clear in Berlin. I built a get_weather tool and
        committed it — next time I'll just call it.
01

From a request to a new capability

Every turn runs a doctrine. If a capability is missing, MySiri doesn't refuse — it builds one.

CHECK

What's known

Its memory and current tools — before relying on anything.

LEARN

Look it up

Read files, run commands, or search the web. Never guess.

CONNECT

Use / build a tool

Reuse a tool, or write a new one as committed Python.

ASK

Only if needed

One concise question when genuinely ambiguous.

DO

Execute & verify

Run it, check its own result, report briefly.

02

Modes for the terminal

Shift+Tab cycles normal → network → coding. Network mode is locked to the security toolkit — recon, scans, and the interactive attack-plan — with no tool-writing.

mysiri — network mode
[network] you › block the internet of 192.168.178.140
→ network mode: only security tools, no tool-writing
   bettercap is high-risk. Run it? y
  🔑 sudo password (needed for root security tools): ••••••
   bettercap {arp.spoof.ban: true, target: …140}ok
mysiri › 192.168.178.140 is ARP-banned on en0 — internet cut while active.
03

What it can do

‹/›

Self-extension

Writes, repairs, and removes its own tools as committed Python — usable the same turn.

Modes

Shift+Tab between normal, network, and coding — each reshapes what the agent is allowed to do.

Network & security

net scans, port scans, recon, and the ported toolkit — bettercap, aircrack, ettercap, mitmproxy — behind a risk-gated, interactive attack-plan. Authorized own-network only.

Health data

Asks about your body — heart rate, sleep, recovery — pulled live from your wearable bracelet (Amazfit/Zepp + Oura) via biostream. Never guessed.

API tools

Point it at an API; vclient generates a typed client and MySiri scaffolds a permanent tool — key saved for you.

Coding swarm

Coding mode hands the terminal to dogukan — a swarm of coding agents, each in its own git worktree.

Any model

Claude, OpenAI, or a local Ollama model — the agent loop is provider-agnostic.

Memory

Preferences, facts, and tool-reliability stats persist across every session.

Accountable

Every action is in an append-only audit log; every self-change is a git commit you can /undo. Broken tools self-repair from their traceback.

04

Built with

MySiri stands on a few focused libraries — each does one thing well.

dogukan

The multi-agent coding swarm that powers Coding mode — plan, parallelize across git worktrees, and talk to each agent live.

biostream

Collects live data from the wearable bracelet (Amazfit/Zepp over Bluetooth) and Oura Ring, and serves it over a local API — so MySiri answers body questions with real numbers.

vclient

Auto-discovers an API's schema and generates a type-safe client — the engine behind MySiri's on-demand API tools.

05

Start in two commands

Python 3.12+. Installs the global mysiri command, then a guided first-run sets up your provider, tools, and keys.

$ ./install.sh
$ mysiri --init # provider · tools · permissions
$ mysiri
ClaudeOpenAIlocal OllamaShift+Tab modesgit-committed tools