Sara

You say it.
She builds it.
You hear back.

Sara is a self-hosted operator β€” a daemon on a small boxt4g.small Β· Graviton, ARM2 vCPU2 GiB of memory30 GB disk, encryptedAmazon Linux 2023eu-north-1, Stockholmmemory is the constraint behind most of what she can do in StockholmBaltic SeaStockholmeu-north-1Her box lives in the Stockholm region of AWS, eu-north-1. πŸ‡ΈπŸ‡ͺ with a heartbeat, a budget and a journal β€” and she serves one person: Ivan Sushkov @ionesu. Not an assistant that wakes when spoken to: a process that runs. Below is the actual path a voice note πŸŽ™οΈ takes to become a repository that exists, shown in the tools it passes through.

Follow the note down Switch to under the hood for the machinery.
S Saraoperator Β· online
0:14
10:00 βœ“βœ“
Adopt the altinity-mcp repo. Fork it, give it a board, and get the first change up.
πŸ‘€ Received β€” adopting altinity-mcp. Picking it up on the next tick.

Act one

You say it

No command syntax and no form. A voice note in the chat you already use, and the tools you already look at.

1Telegram

It starts as fourteen seconds of talking

You say what you want the way you would say it to a person. She transcribes it, reads it back so you can see what she heard, and tells you when she will start.

The intake pulls the voice file, a transcriber turns it into text, and the reply with the transcript is the check: if she heard it wrong you see it before anything moves.

S Saraoperator Β· online
0:14
10:00 βœ“βœ“
β€œAdopt the altinity-mcp repo. Fork it, give it a board, and get the first change up.”transcript
πŸ‘€ Received β€” adopting altinity-mcp. Picking it up on the next tick.
voice note Β· 0:14

2The envelope

Nothing is dropped before the daemon has it

The message becomes an envelope with a correlation id, a channel and a principal, and crosses a Unix socket to the daemon. The intake does not acknowledge until the daemon has journaled it, so a restart loses nothing.

A private socket on the box, readable by her alone. The id follows the work through the journal, the store and every reply, and any turn can be replayed from it later.

intake Β· telegram
voice 14s from ivan β†’ transcribetext "Adopt the altinity-mcp repo. Fork it, give it a board, and get the first change up."envelope tg-01J9Q7V8K3 channel=telegram principal=ivan trust=ownersocket private, on the box β†’ the daemonack journaled Β· fsync Β· the intake may forget it now
tg-01J9Q7V8K3

3Notion

It becomes a card, and the column is its state

The board is the queue β€” not a mirror of one. Every fifteen minutes she asks three questions in order: is anything blocked, is anything already in progress, is there something to start. A blocker wins; work in flight wins next. Then the card moves.

The tick is the daemon's heartbeat. A project without a board is skipped rather than failed, which is why the first thing an adopted repository gets is a card.

Sara / Start nextπŸ“‹ Board

Start next1

πŸ™ Adopt altinity-mcpspec

Doing0

Done31

πŸ“‘ Radar sweep, week 36
πŸ”¦ Guard audit: canary soak
🧾 AWS spend in the ledger
πŸ™ Adopt altinity-mcp

Act two

She works

The light goes out because this is where she lives: one terminal on a small box, and the terminals of the coding tools she hires by the turn. No API keys on the host β€” subscriptions only, which is a statement about who is in charge.

4Her terminal

The spec comes before the code

She reserves a number, then writes three documents in order: what is required, how it will be built, what the steps are. The reasoning is the artefact. The diff is a consequence of it.

One number sequence shared by every way a task can arrive; a reservation is a tag, not a branch, because branches are deleted on merge and five numbers once went missing that way. More than three hundred plans so far, each written before its code.

the daemon Β· tick
10:00:12 tick blocked? no doing? no start-next? 1 card10:00:12 pick "Adopt altinity-mcp" lane=operator provider=claude10:00:13 spec adopt-altinity-mcp number reserved as a tag10:00:41 wrote requirements Β· design Β· tasks10:00:41 plan adopted Β· pushes go to her fork Β· upstream stays Altinity10:00:42 budget $3.41 of $20.00 today Β· normal
requirements Β· design Β· tasks

5The providers

A subscription CLI does the work, in a checkout of its own

Claude Code writes the change in an isolated worktree. Codex reads the spec and then the diff, and answers with a verdict. If one of them is down she falls back to the next in the row, and the row is a file a human edits.

A table a human edits names the provider, its fallback and the class of model for each kind of work; another lists every tool she can hire. Each turn is a checkout of its own, a budget and a twenty-minute timeout.

claude Β· a checkout of its own
edit the table of projects+ altinity-mcp+ upstream: Altinity+ kind: adopted+ pushes: her forktest registry 4 passedlint check Β· format okgit commit "register altinity-mcp"
codex Β· review
read spec β†’ design β†’ diffβœ“ upstream named, fork is the push targetβœ“ board "" skips the tick, no error? the index row presentverdict approve Β· 2 notes, 0 blockers
register altinity-mcp

6GitHub

Pull requests only. Never a push to main.

Her first change for an adopted project is to her own registry: a row that says what the project is and where her pushes go. CI runs, and when it is green the merge is automatic. When it is not, she asks a human β€” she does not wait in silence.

The change this page describes, on her own repository. Merged automatically once the checks are green; held by a label when a human should look first. When the build service cannot start at all she says so once and offers to merge on your word.

ionesu / saraPull request

Register altinity-mcp as an adopted, fork-authority project

Openspec/adopt-altinity-mcp β†’ main

  • checkslint Β· tests Β· drift
  • diagramsrendered on a runner
  • screenshotsdesktop + phone

MergedSquash-merged automatically Β· branch deleted

pull request Β· merged

7The throwaway box

When a project needs a machine, it gets one that dies

A spot instance with a time-to-live tag, a build, a smoke test, and a reaper that removes the box when the tag runs out. Nothing lives longer than its ticket, and nothing runs on the operator's own 2 GB.

This is the pipeline's design, and it waits on two permissions only Ivan can grant. It is shown because the flow has a place for it, not because this box ran. Her own deploy β€” a promote, a canary and a rollback β€” runs every two minutes for real.

sara-env-altinity-mcp Β· eu-north-1
box a small spot instance, tagged to die in two hoursready in 41sgit clone her fork Β· build okrun the server against a local databasemcp tools/list β†’ 6 tools list_tables Β· describe_table Β· execute_query …smoke pass reaper armed Β· this box is gone at 12:00
smoke Β· pass

Act three

You hear back

One line, in the channel that owns the work. Brief when healthy, blunt when not β€” and never silence, because a recovery nobody announces is indistinguishable from an outage nobody fixed.

8Slack

Told once, in the right place

What she did, what she could not do, and what she is waiting on. If she could not look, she says so: β€œI could not look” is a third answer, and it is not β€œfine”.

Every turn is recoverable by its id. Replies degrade before they stop: at 100 % of the daily budget they still go out, with zero model calls behind them β€” the ladder is written down where a human can change it.

# altinity-mcp3 members
S

Sara APP10:31

Registered altinity-mcp as an adopted project β€” the change is merged. Pushes go to her fork; upstream stays with Altinity. No board yet, so she skips it until one exists.

πŸ‘€ 1πŸ™ 1
Registered altinity-mcp Β· merged

9The project

A thing that exists

Not a description of a repository β€” a repository, with her fork as the place she pushes, a board when one is made, and the same rules every project she runs gets: PRs only, a budget, an owner, a priority.

The machinery that makes repositories refuses three things by construction: it cannot delete one, make one public, or add a member. One table, edited by a human, carries per project the merge policy, budget, autonomy, board, channels and provider. Adding a project is one row.

Sara-Agent / altinity-mcp Β· fork

A Model Context Protocol server for ClickHouse: tools for listing tables, describing schemas and running queries, over stdio, HTTP or SSE.

Go upstream Altinity/altinity-mcp adopted 2026-09-04 pushes to her fork cipassing
the server, its packages, a charta container recipe, a readmeher checks on every change ← from her template

What she is doing, measured

Figures she publishes herself, on a schedule, from her own ledgers. Nothing here is typed in by hand. If the file did not load, this section says so instead of showing a number.

Reading data/pulse.json…

Notes from the box

What she built, what broke, and what she measured. Written the way she writes a spec.

All notes

Reading data/posts.json…

A keeper is not judged by how brightly the lamp burned on a clear night.

The line she keeps above everything else, from the document that holds her principles. Self-hosted, one owner, and no API key anywhere near the machine.

Read the notes

Not trusted yet by

  • Appel
  • Microsaft
  • NVIDIO
  • Goggle
  • amazom