miadi-orchestration-kit

Chart path

Written by T4 · Chart path (teams/README.md in this kit) from its own work. Any agent of any kind reads this, and any agent that learns something about the chart path writes it here, not in its own private memory. That is how the practice evolves where every seat can see it.

Desired outcome

Every chart an agent writes reaches one place where the people it concerns can read and steer it, and whether that place is public is decided per source.

The path, as it runs today (2026-10-03)

  1. An agent writes charts through the COAIA MCP (coaia-narrative). Every write ends in one save of a chart memory, a .jsonl file. The file is the record. Asterion only holds a projection of it.
  2. The memory reaches Asterion one of two ways:
    • The door. With COAIA_ASTERION_URL, COAIA_ASTERION_TOKEN and COAIA_ASTERION_PROJECT set on the MCP server (coaia-narrative 0.18.0 or later), each save posts the whole file to POST /api/ingest/coaia-narrative.
    • The registry sync. On gaia, asterion-coaia-sync.timer runs every 5 minutes and reads each registered file, from disk (--file) or from a repository’s origin/main (--git).
  3. One mapper (app/lib/asterion/coaia-projection.mjs in miadisabelle/asterion) turns charts into tensions, steps into action steps, beats into beats, and a chart family with beats into a thread.

See it live at /bridge and /settings on any Asterion address. List the registry from miadisabelle/asterion/app with node scripts/coaia-sync.mjs list (it needs app/.env.local, so on gaia only).

Private sources

Asterion’s public addresses (asterion.jgwill.com, asterion.tushell.com, asterion.sanctuaireagentique.com, asterion-zeta.vercel.app) answer anyone. A private project is shown only to a signed-in writer (signed in at /signin with a Miadi token, or holding the writer token).

The words

The factory used “workspace” for three different things. T4 uses one word per thing. Correct this section when William does.

word means where it lives today
repository owner/repo on GitHub everywhere
checkout one repository cloned on one host, at a path Miadi config/stc-workspaces.json (repository, localPath), shown at /stc-config, where it is called a “workspace”
chart memory one coaia-narrative .jsonl file of charts a checkout’s .coaia/, an episode folder, ~/workspace/.mino/coaia/
project Asterion’s unit: one key, one or more chart memories, public or private asterion.projects, registered with coaia-sync.mjs
seat the agent session responsible for steering a project’s charts Miadi config/stc-steering.json (seats, each a tmux session)
workspace an agent’s home, the way Mia’s ~/workspace is hers miadisabelle/workspace for Mia; the example community users follow

When Asterion moves into Miadi, /stc-config’s “workspaces” become checkouts, and “workspace” stays free for the agent’s home.

What Miadi’s /stc-config holds that Asterion must keep

Asterion knows where a chart memory is. It does not know where the work happens. /stc-config (29 entries in config/stc-workspaces.json, 2026-10-03) holds, per repository:

When Asterion moves into Miadi, a project gains its checkouts (repository, host, path) and its seat. Keep /stc-config working beside Asterion’s pages until the project page shows all three.

Steering a chart (the seat is built, the steer is not)

Asterion does not write a chart memory. The sync would overwrite the edit, and the memory belongs to the agent that keeps it. Steering goes to the seat instead:

  1. A person steers a chart on Asterion. Asterion records the steer as an event on that chart.
  2. The steer goes to the project’s seat through Miadi’s steering (config/stc-steering.json, lib/stc/steering.ts), the same path a GitHub action takes to reach a seat today.
  3. If the seat’s session is closed, it is brought back first (T1: tide agents restore, the binding line).
  4. The seat changes the chart through its MCP, and the save returns through the door or the sync.

Built 2026-10-06 (miadisabelle/asterion 015a767): a project names its seat. The project page shows it to everyone. A signed-in writer names, changes or clears it there, or with PATCH /api/projects/<id> and { "seat": { "session": "<tmux session>", "host": "<host>" } } (or { "seat": null }). It is kept in projects.metadata.seat as { kind: 'tmux', session, host, set_by, set_at }, the shape of a seat in Miadi’s config/stc-steering.json, and the registry sync never touches it. Every change is a project.seat_named or project.seat_cleared event. First seat: ep060 → episode-060-coaia-agent-asterion-system on gaia.

Name a seat only for a session that should receive steers. A session renamed *-OFFLINE is one its person took offline on purpose: naming it routes steers back in. mino-triage stays without a seat until William brings Mino’s seat back online (Mino recommends stcbot on gaia).

What is missing: a steer made on Asterion is not yet an event that reaches the seat (steps 1 and 2 above).

Where Asterion goes (absorption into jgwill/Miadi)

Before you change the path