Atlas / Skills / jgwill / miadi-orchestration-kit

miadi-orchestration-kitBLOCK

skills/jgwill/miadi-orchestration-kit

The agent-host side of the Miadi Factory: Claude Code plugins, host-neutral skills and apt packages for Chronicle episodes, session capture and restore, and witnessed review.

Verdict
BLOCK
Grade
F
Trust score
40 /100
Version
0.1.0
Hosts
7 documented
License
—
Stars
5
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

The agent-host side of the Miadi Factory: Claude Code plugins, host-neutral skills, hooks and apt packages. With them an agent opens and closes Chronicle episodes, records its own session, comes back after a reboot, and puts its work in front of a person who can judge it.

  • Docs site: https://docs.miadi-orchestration-kit.jgwill.com
  • For agents: llms.txt

Start here: the chronicle-episode skill

The Miadi Factory makes agent-made work inspectable and revisitable. It connects the originating question, the session trace, the interface evidence, explicit criteria, and a person's judgment. A Chronicle episode is where they meet, so skills/chronicle-episode is the skill this kit is used for. It is the one entry point for episode work on any host: mint a vessel, prove its five stages, register it on the chronicle wheel, relate inquiries and lineage, raise Attention items, open ceremonies and talking circles, add Miadi reviews.

One copy of the skill lives here. The miadi-chronicle-episode-kit plugin links it in, and scripts/install-chronicle-skill.sh points every other skill layer on a host at it. `jgwill/Miadi` builds the runtime the skill calls: the episode API, the @miadi/* packages, the web app, the chronicle and review services.

Read from source at commit d67c8d9d3312OBSERVED · 2026-10-14
Advertisement
02

Install

Commands as the repository documents them. They are shown, not run.

claude plugin install miadi-session-observability@miadi-orchestration-kit
claude plugin install miadi-chronicle-episode-kit@miadi-orchestration-kit
claude plugin install miadi-deepdiver@miadi-orchestration-kit
claude plugin install miadi-operator-desk@miadi-orchestration-kit
claude plugin install miadi-session-observability@miadi-orchestration-kit
pip install miadi-stateloom-engine                       # runtime + parser + generator + the smcg CLI
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
claude-desktopmentioned
codexmentioned
copilotmentioned
cursormentioned
gemini-climentioned
openclawmentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: chart-path
description: T4 · Chart path's practice. How a structural tension chart an agent writes reaches Asterion, who may see it, the words the teams use for repository, checkout, chart memory, project, seat and workspace, what Miadi's /stc-config holds that Asterion must keep when it moves into Miadi, and how a chart is steered without Asterion writing its file. Use when registering or syncing a coaia-narrative memory in Asterion, when a chart does not show on Asterion, before registering anything from a private repository, when moving Asterion into jgwill/Miadi or packaging it, when naming any of these things, or when someone wants to steer or edit a chart from Asterion. Triggers on "Asterion", "chart path", "coaia-sync", "register a chart", "private chart", "steer a chart", "stc-config", "workspace vs project".
---

# 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).

- A memory that lives in a private repository is registered with `--private`, **in the same command
  that first registers it**, so no sync runs before it is private:
  `node scripts/coaia-sync.mjs register <key> --name "<name>" --file <path> --private`
- `--public` makes a project public again. `list` marks private projects `PRIVATE`.
- **The chronicle is private.** `/srv/miadi/episodes` has a private bare repository on gaia as its origin, so an episode's chart memory is registered `--private`. `ep060` was made private on 2026-10-06 by the ingest-door lane for this reason, after being public since 2026-09-28.
- Earned twice. On 2026-10-01, `jgwill/dummass` (private) showed on the public site for about ten
  minutes. On 2026-10-03, Mino's chart (`miadisabelle/workspace`, private) was kept off Asterion
  until private projects existed. It is now registered as `mino-triage`, private.
- How it holds: every read route asks `viewerOf(request)` (`lib/asterion/visibility.ts`). A read that
  does not ask hides private rows. `scripts/check-read-gates.mjs` fails the build when a GET route
  never asks, beside `check-write-gates.mjs` for writes. Public list caches use the keys
  `projects:public` and `tensions:public:*`, which no earlier deployment writes.

## 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:

- the host path of its checkout (`localPath`), which is where an agent works on the issue a chart steps into
- which STC files the checkout carries (`STC.md`, `STCGOAL.md`, `STCISSUE.md`, `STCMASTERY.md`) and whether to create them
- which of the four STC bots are on for it (`stcgoal`, `stcissue`, `stcmastery`, `stckin`)

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 memor
05

Trust audit

BLOCKgrade F · trust 40/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (4 observation(s))
Network
declared (8 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

CRITICALHard-coded secrets · secret.private_key · CWE-798, CWE-321
claude/miadi-session-observability/hooks/secret_capture_sanitizer.sh:18
s{-----BEGIN [^-]*PRIVATE KEY-----.*?-----END [^-]*PRIVATE KEY-----}{-----BEGIN PRIVATE KEY-----***-----END PRIVATE KEY-----}gs;
CRITICALHard-coded secrets · secret.private_key · CWE-798, CWE-321
claude/miadi-session-observability/hooks/secret_capture_sanitizer.sh:90
pem=$'-----BEGIN OPENSSH PRIVATE KEY-----\nsecret-material\n-----END OPENSSH PRIVATE KEY-----'
CRITICALHard-coded secrets · secret.slack · CWE-798, CWE-321
claude/miadi-session-observability/hooks/secret_capture_sanitizer.sh:80
slack="xoxb-1234567890-""abcdefghijklmno"
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
claude/miadi-session-observability/hooks/claude_hooks/lib.sh:395
.env|.env.*|*.env|.netrc|_netrc|.pgpass|.npmrc|.pypirc|.git-credentials|.htpasswd \
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
claude/miadi-session-observability/hooks/claude_hooks/lib.sh:397
|id_rsa*|id_dsa*|id_ecdsa*|id_ed25519*|credentials|credentials.json|*credentials*.json \
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
claude/miadi-session-observability/hooks/claude_hooks/lib.sh:402
*/.docker/config.json|*/.kube/config|*/.aws/*|*/.ssh/*|*/.gnupg/*|*/.config/gcloud/*) return 0 ;;
Why it matters. touches a credential store
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
claude/miadi-session-observability/hooks/secret_capture_sanitizer.sh:91
dburl="postgres://neondb_owner:npg_Zx81kQ""[email protected]/neondb"
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
rispecs/community-layer-spec-plugins/miadi-security-review-kit.rispec.md:45
- LLM attack surface (prompt injection, jailbreak via community content)
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
MEDIUMInventory / provenance · inv.symlink · CWE-1104
antigravity/miadi-storyweaver-orchestration-kit/agents
antigravity/miadi-storyweaver-orchestration-kit/agents
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
antigravity/miadi-storyweaver-orchestration-kit/skills
antigravity/miadi-storyweaver-orchestration-kit/skills
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
claude/miadi-chronicle-episode-kit/skills/chronicle-episode
claude/miadi-chronicle-episode-kit/skills/chronicle-episode
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
packages/miadi/deb/miadi-terminal/usr/lib/python3/dist-packages/terminatorlib/plugins/miadi_chronicle_url_handler.py
packages/miadi/deb/miadi-terminal/usr/lib/python3/dist-packages/terminatorlib/plugins/miadi_chronicle_url_handler.py
Why it matters. link not followed
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
claude/ava-companion/skills/ava-companion/SKILL.md:116
She is a member of Miadi circles (`http://127.0.0.1:3335`). `GET /api/identity/me` with
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
claude/mia-episode-companion/phone-capture/ensure.sh:36
curl -s -m 2 "http://127.0.0.1:$port/api/health" 2>/dev/null | grep -q '"capture"'
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
claude/mia-episode-companion/phone-capture/ensure.sh:56
health="$(curl -s -m 2 "http://127.0.0.1:$port/api/health")"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
claude/miadi-session-observability/tests/files-written.sh:31
secret="sk-ant-api03-ABCDEFGHIJKLM""NOPQRSTUVWX"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
claude/miadi-session-observability/tests/transcript-archive.sh:27
secret="sk-ant-api03-ABCDEFGHIJKLM""NOPQRSTUVWX"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
pi/miadi-pi-network/test/extension.integration.test.ts:7
const token = "integration-token-kept-inside-the-test";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
pi/miadi-pi-network/test/hub.test.ts:9
const token = "test-token-that-never-leaves-the-test";
LOWInventory / provenance · inv.suspicious_name · CWE-1104
copilot/miadi-orchestration-kit-hermes/agents/miadi-copilot-payload-steward.md
miadi-copilot-payload-steward.md
Why it matters. member named after an attack tool
Fix. remove or justify
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
claude/mia-episode-companion/phone-capture/test/page.test.mjs:130
const run = new Function(...Object.keys(context), SCRIPT);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
claude/mia-episode-companion/phone-capture/test/phone-capture.test.mjs:13
const LISTENER = fileURLToPath(new URL("../../scripts/mia-listen.mjs", import.meta.url));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
claude/mia-episode-companion/phone-capture/test/phone-capture.test.mjs:97
assert.equal((await post("?episode=../../etc", "audio/mp4", Buffer.from("x"))).status, 400);
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
claude/mia-episode-companion/phone-capture/README.md:47
| `MIADI_API_URL` | `http://127.0.0.1:3335` | the Miadi voice layer that renders Mia's voice |
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
claude/mia-episode-companion/phone-capture/README.md:49
| `MIADI_CHRONICLE_MW_URL` | `http://127.0.0.1:8040` | registration. A failure queues the take and never loses it |

Gates applied: critical_finding, instruction_override, no_behavioural_pass.

Audited 2026-10-14 · audit v0.4.1 · source sha d67c8d9d3312full audit observations/trust-audit/skill/jgwill__miadi-orchestration-kit.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-14d67c8d9d3312BLOCKF40first audit
07

Questions

What does the miadi-orchestration-kit skill do?

The agent-host side of the Miadi Factory: Claude Code plugins, host-neutral skills and apt packages for Chronicle episodes, session capture and restore, and witnessed review.

Is miadi-orchestration-kit safe to install?

No — not without reading the findings first. The audit graded it F (40/100) and found 8 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What can miadi-orchestration-kit access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: found — see the findings.

Which assistants does miadi-orchestration-kit work with?

Its documentation mentions claude-code, claude-desktop, codex, copilot, cursor, gemini-cli and openclaw. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (d67c8d9d3312), read on 2026-10-14. The repository is watched, and a new audit runs when it changes — this is the first audit.

Advertisement