The bridge · coaia-narrative 0.26.1 → Asterion

coaia-narrative

coaia-narrative is the package agents use to write their charts. A chart says where things are now, what should exist, and the steps between. Each memory is one file, and each line of the file is one record.

jgwill/Miadi depends on it ("coaia-narrative": "^0.22.0" in package.json), and Asterion reads the same files. The bridge is how a chart an agent writes ends up on Asterion's pages. Since Asterion is planned to move into jgwill/Miadi, this bridge is also the first way the factory's threads reach a page.

1 · The package

Three doors into one file

MCP server
coaia-narrative. Agents call its tools to make charts, steps and beats.
writer
coaia-narrative/writer. Another service writes with the same code the tools use.
contract
coaia-narrative/contract. Reads a file and says what each line is. It touches no disk and no network.

A person can read the same file with the cnarrative command.

2 · The record · contract v2

What one memory file holds

These are the kinds of record the package writes. The list below is imported from the package jgwill/Miadi runs, so it changes when the package does.

structural_tension_chartdesired_outcomecurrent_realityaction_stepnarrative_beatwampum_belt
📈 structural_tension_chart
desired_outcome
what should exist
current_reality
where things are now
action_step × n
the steps between, each of which can grow a smaller chart
narrative_beat × n
a moment that happened on this chart
One chart in a memory file. A step can grow its own smaller chart, and a beat records a moment on a chart. A chart moves through germination, assimilation, completion.
3 · The bridge

From an agent's write to Asterion's pages

An agent
calls a tool
writes
memory file
.jsonl, the record
carried by
the door
after each save, a POST to /api/ingest/coaia-narrative
the registry sync
reads the file from git on a timer
by hand
an import script, for one file
read through the contract
Asterion
one mapper, then rows
The file is written first. Then one of three ways carries it, and one mapper in Asterion reads it through the package's contract. A post that fails is logged and dropped, so Asterion being down never costs a chart.

The door is on when the agent's MCP server has three settings: COAIA_ASTERION_URL, COAIA_ASTERION_TOKEN and COAIA_ASTERION_PROJECT. With none of them set, the server writes the file and nothing else.

4 · The mapping

What each record becomes

memory file
Asterion
a chart
a tension
an action step
an action step
a narrative beat
a beat, held by its chart
a chart family that carries beats
a thread, type chart, its state read from the root chart
every other entity and relation
the graph

The fourth row is where threads start. A chart and the charts grown from its steps make a family, and when the family carries at least one beat it becomes a thread. This is the only kind of thread on Asterion today: Threads.

5 · The rules

What the bridge keeps true

  1. The memory file is the record. Asterion keeps a copy and writes nothing back.
  2. A chart that came from a memory file cannot be edited on Asterion's site. The edit goes to the file.
  3. Each project is fed one way only, the door or the registry sync, so two ways never overwrite each other.
  4. Sending the same file twice writes nothing.
  5. A memory from a private repository is a private project, shown only to signed-in writers.
6 · Registered on 2026-10-06

The memories Asterion reads

projectchartscarried by
coaia-agent15registry sync, from git
medicine-wheel119registry sync, from a file
mino-triageprivate174registry sync, from a file
ep060private1the door, from its writer

jgwill/Miadi's own issue charts are not on this list. That repository is private, and Asterion serves three public sites.

7 · Toward one factory

Where Miadi already uses it

jgwill/Miadi writes and reads chart memories with this package today. Asterion reads the same files through the same contract. When Asterion moves into jgwill/Miadi, both sides of the bridge sit in one repository. What moves where is not decided yet.

lib/stc/issue-charts.tsWrites one chart per GitHub issue.writer
lib/stc/steer-charts.tsWrites the chart a steering bot keeps for a subject.writer
lib/stc/chart-view.tsReads a chart memory for the /stc-config panel.contract
app/api/stc/chart-memory/route.tsApplies one edit from that panel.writer
Issues

Where this is discussed

  • miadisabelle/asterion#17What Asterion's own /docs should say about the running product (DP1 to DP9). It is empty on every deployment today.
  • miadisabelle/asterion#19Where Asterion's layers and docs land in jgwill/Miadi when Asterion is absorbed.

The issues below are proposed. None of them exists yet. Each one is a discussion this guide needs, written so it can be filed as it stands.

ProposedPI4in jgwill/Miadi
Miadi's own issue charts reach Asterion as a private project

jgwill/Miadi writes one chart per issue through coaia-narrative's writer, and it is the one chart memory not connected to Asterion, because the repository is private and Asterion serves three public sites (F27). Asterion now registers private projects that only signed-in writers see.

Package facts are imported from coaia-narrative 0.26.1. Asterion facts were read on 2026-10-06 from miadisabelle/asterion: app/lib/asterion/coaia-projection.mjs, app/app/api/ingest/coaia-narrative/route.ts, scripts/coaia-sync.mjs, and from coaia-narrative src/asterion-bridge.ts.