Steward — aligns and maintains resident agents across Culture projects.
Project description
steward
Steward aligns and maintains resident agents across Culture projects. It owns the AgentCulture sibling-repo pattern, the corpus-derived "perfect patient" baseline, and the canonical copies of the skills that other siblings vendor.
What steward is responsible for
- Owning the sibling pattern every AgentCulture sibling repo follows — see
docs/sibling-pattern.md. - Maintaining the perfect-patient baseline synthesized from the live corpus
on every
steward doctor --scope siblingsrun — seedocs/perfect-patient.md. - Hosting the canonical copies of skills that siblings vendor (cite, don't
import) — see
docs/skill-sources.md. - Running diagnostics today, not repairs. The repair mode (
--apply) is described indocs/sibling-pattern.mdbut is not implemented yet.
Concepts
- Sibling repo — a Culture-mesh-adjacent project (e.g.
culture,daria,cfafi,ghafi) that wears the shape defined indocs/sibling-pattern.md. Steward is itself a sibling and the reference exemplar. - Perfect patient — the corpus-derived baseline of what a healthy sibling
looks like, regenerated from every
culture.yamlin the workspace each timesteward doctor --scope siblingsruns. The frequency-derived sections (culture.yamlfields,CLAUDE.mdheadings) are regenerated wholesale; the skills tier list is manually curated. - Skill supplier — steward owns the canonical copy of most cross-sibling
skills. Siblings copy those skills into their own
.claude/skills/and may diverge intentionally; steward tracks who owns what indocs/skill-sources.md.
When to use steward
- You're starting a new AgentCulture sibling repo and want to know the shape it should wear.
- You want to check whether an existing sibling still matches the pattern.
- You want to audit a sibling's vendored skill copies for drift against the
canonical upstream (the
--applyrepair mode that performs the refresh itself is on the roadmap). - You're auditing the corpus to decide what the "common skills baseline" should be.
How the pieces fit
flowchart LR
subgraph Steward["steward (this repo)"]
SCLI["steward CLI<br/>(show / doctor / overview)"]
Skills[".claude/skills/<br/>canonical copies"]
SP["docs/sibling-pattern.md<br/>(the contract)"]
PP["docs/perfect-patient.md<br/>(corpus baseline)"]
SS["docs/skill-sources.md<br/>(upstream/downstream map)"]
end
subgraph Sibling["each sibling repo"]
SC["culture.yaml<br/>CLAUDE.md<br/>.claude/skills/"]
Sugg["docs/steward/<br/>steward-suggestions.md"]
end
SCLI -- "reads" --> SC
SCLI -- "scores against" --> SP
SCLI -- "regenerates" --> PP
SCLI -- "writes per-target" --> Sugg
Skills -- "vendored into (cite, don't import)" --> SC
SS -. "tracks" .-> Skills
SS -. "tracks" .-> SC
Install
pip install steward-cli
Or, with uv:
uv tool install steward-cli
Usage
steward show <target> — surface a sibling's agent config
Prints the target sibling's CLAUDE.md, the parallel culture.yaml, and an
index of its .claude/skills/ in one view. Thin wrapper over the agent-config
skill at .claude/skills/agent-config/scripts/show.sh.
$ steward show ../culture
=== ../culture/CLAUDE.md ===
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
**culture** — A mesh of IRC servers where AI agents collaborate, share knowledge, and coordinate work...
...
steward doctor <target> — single-repo diagnosis
Runs the AgentCulture sibling-pattern invariants against a single repo
(currently portability and skills-convention; see the status table below).
Read-only. Exits non-zero on findings.
$ steward doctor .
doctor clean (2 checks against /<workspace>/steward)
$ echo $?
0
Findings against a repo with a /home/<user>/... path leak:
$ steward doctor /tmp/doctor-demo
portability: .: ❌ Hard-coded /home/<user>/ paths:
notes.md:1:/home/<user>/secrets
Fix: use ../sibling, repo URL, or $WORKSPACE/sibling instead.
$ echo $?
1
The same findings as JSON (for scripting):
steward doctor /tmp/doctor-demo --json
[
{
"check": "portability",
"path": ".",
"message": "Hard-coded /home/<user>/ paths: notes.md:1:/home/<user>/secrets — use ../sibling, repo URL, or $WORKSPACE/sibling instead."
}
]
Run a single check with --check:
steward doctor . --check portability
steward doctor . --check skills-convention
steward doctor --scope siblings — corpus walk
Walks every culture.yaml in the workspace, scores each declared agent against
a corpus-derived baseline, regenerates docs/perfect-patient.md from the
corpus, and writes per-target feedback into each sibling's
docs/steward/steward-suggestions.md. Diagnostic-only — exits 0 even when
individual agents drift from the baseline; per-agent gaps are reported in the
per-target file.
steward doctor --scope siblings
# wrote: ../culture/docs/steward/steward-suggestions.md
# wrote: ../daria/docs/steward/steward-suggestions.md
# refreshed: docs/perfect-patient.md (8 agents across 6 repos)
The synthesized docs/perfect-patient.md looks like:
# Perfect patient
> Auto-generated by `steward doctor` on 2026-04-26.
> Synthesized from 8 agents across 6 repos.
## Required `culture.yaml` fields
- `backend`
- `suffix`
## Recommended skills
- `cicd` — Branch, commit, push, create PR, wait for bots, triage, reply, ...
- `run-tests` — Run pytest with parallel execution and coverage.
- `version-bump` — Bump semver in `pyproject.toml` ...
...
steward overview — ecosystem sense-making
The sense-making companion to doctor. Where doctor asks "is this sibling
healthy?", overview asks "what exists, how does it fit together, and what
seems missing?". It deterministically assembles an evidence pack — an
agent inventory plus a typed relationship graph — and leaves the
interpretation to the agent (or human) reading it. No LLM, no repo mutation.
The graph has typed nodes (repo, agent, skill, channel, package) and
observed edges, each citing its source:
| Edge | Meaning | Source |
|---|---|---|
declares |
repo → agent | culture.yaml |
supplies / consumes |
repo → skill | docs/skill-sources.md |
present_on |
agent → channel | culture.yaml |
depends_on |
repo → package (and repo → sibling repo) | pyproject.toml |
references |
repo → repo | CLAUDE.md / README.md |
It also emits candidate signals — neutral, deterministic flags for the
narrating agent to interpret (not conclusions): orphan-skill,
unowned-skill, ledger-gap, overlap, over-connected-agent,
isolated-repo.
# Whole ecosystem, human-readable (markdown with a mermaid graph):
steward overview --scope siblings
# A single repo's ego graph (the repo + its directly-incident edges):
steward overview ../culture
# Machine-readable, neo4j-loadable graph for scripts:
steward overview --scope siblings --json
The --json output is a flat {scope, generated, nodes, edges, signals}
structure (plus a warnings array when a culture.yaml can't be parsed):
{
"scope": "siblings",
"generated": "2026-05-21",
"nodes": [{"id": "cicd", "type": "skill", "props": {}}],
"edges": [{"source": "steward", "target": "cicd", "type": "supplies", "basis": "skill-sources.md"}],
"signals": [{"kind": "orphan-skill", "subject": "cicd", "detail": "..."}]
}
Steward stops at observed facts + neutral signals; the agent that ran it narrates the inferred relationships (owns / depends-on / observes / aligns / governs / overlaps-with / …) and suggestions layers, keeping them clearly separate from the facts.
Status: diagnostics vs repairs
steward is read-only today. The --apply repair mode is described in
docs/sibling-pattern.md but is not implemented.
| Check / repair | Status | Verb |
|---|---|---|
portability (no /home/..., no ~/.<dotfile> refs in committed docs) |
Implemented | steward doctor --check portability |
skills-convention (every SKILL.md has scripts/ + matching frontmatter name) |
Implemented | steward doctor --check skills-convention |
changelog-format |
Planned | — |
lint-config-local (repo-local .markdownlint-cli2.yaml) |
Planned | — |
Repair: vendor missing .markdownlint-cli2.yaml |
Planned (--apply) |
— |
Repair: vendor missing .claude/skills.local.yaml.example |
Planned (--apply) |
— |
Repair: create empty .claude/skills/<name>/scripts/ |
Planned (--apply) |
— |
Repair: skeleton CHANGELOG.md |
Planned (--apply) |
— |
Relationship to other AgentCulture tools
cultureruns the agent mesh. Steward does not run agents — it aligns their configuration and lifecycle policies across the mesh.dariais an awareness agent that observes Culture state at runtime. Steward is the static-analysis counterpart: it runs against repos on disk, not live agents.afi-cliandghafiare sibling CLIs that follow the same sibling pattern steward maintains. The eventual--applyrepair mode will consume../afi-cli/afi/cite/_engine.pyrather than re-implement vendoring.
Further reading
docs/sibling-pattern.md— the contractsteward doctorhonors (required artifacts, invariants, planned repairs).docs/perfect-patient.md— the auto-generated corpus baseline.docs/skill-sources.md— which repo owns the canonical copy of each skill.CLAUDE.md— project shape, build/test/publish details, and the skills convention.
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file steward_cli-0.14.0.tar.gz.
File metadata
- Download URL: steward_cli-0.14.0.tar.gz
- Upload date:
- Size: 172.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c2225b2f9a944792ab13fe41912e3753193b711f1687991ece5ab6e3dcbd98c
|
|
| MD5 |
132fc522573f9cbf5a16e30fbeadfe1b
|
|
| BLAKE2b-256 |
9c22ee9dec89f39a0236b022985e86439a57f787836aa2aa769f4cd5a974914e
|
File details
Details for the file steward_cli-0.14.0-py3-none-any.whl.
File metadata
- Download URL: steward_cli-0.14.0-py3-none-any.whl
- Upload date:
- Size: 39.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33fade12b77de653c00a947f23bc23166a1a5328dbfbd0f72be6105cb8ef4c11
|
|
| MD5 |
85c668ae984c4bb90767bba999dd7982
|
|
| BLAKE2b-256 |
216a657d9d314c553155fe56251d31b02aa3f51098560f92e8bfccb3dea4437f
|