Skip to main content

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 siblings run — see docs/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 in docs/sibling-pattern.md but is not implemented yet.

Concepts

  • Sibling repo — a Culture-mesh-adjacent project (e.g. culture, daria, cfafi, ghafi) that wears the shape defined in docs/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.yaml in the workspace each time steward doctor --scope siblings runs. The frequency-derived sections (culture.yaml fields, CLAUDE.md headings) 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 in docs/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 --apply repair 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

This provides the steward, agents-lens, and culture-lens commands (all the same CLI). culture-lens is also published as its own thin-wrapper package — pip install culture-lens pulls in steward-cli and exposes the culture-lens command:

pip install culture-lens   # installs steward-cli + the `culture-lens` command

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.

By default overview is the agent-relationship layer. The graph has typed nodes (repo, agent, channel, package) and observed edges, each citing its source:

Edge Meaning Source
declares repo → agent culture.yaml
present_on agent → channel culture.yaml
depends_on repo → package (and repo → sibling repo) pyproject.toml
references repo → repo CLAUDE.md / README.md
documents repo → repo doc-source registry

Rendered, the graph reads like an org chart. Here is a slice around culture showing every default node and edge type (GitHub renders the Mermaid below; steward overview emits the whole-ecosystem version):

graph LR
  classDef repo fill:#cde,stroke:#369,color:#000;
  classDef agent fill:#dfd,stroke:#393,color:#000;
  classDef channel fill:#fde,stroke:#a39,color:#000;
  classDef package fill:#eee,stroke:#999,color:#000;

  culture["culture"]:::repo
  culture_agent["culture/culture"]:::agent
  general["#general"]:::channel
  agtag["agtag"]:::repo
  pyyaml["PyYAML"]:::package
  daria["daria"]:::repo
  katvan["katvan"]:::repo

  culture -->|declares| culture_agent
  culture_agent -->|present_on| general
  culture -->|depends_on| agtag
  culture -->|depends_on| pyyaml
  daria -->|references| culture
  katvan -->|documents| culture

It also emits candidate signals — neutral, deterministic flags for the narrating agent to interpret (not conclusions): over-connected-agent, isolated-repo, overlap, doc-coverage-gap, backend-mismatch.

Skill-supply layer (--include-skills, transitional). The skill node type, the supplies / consumes / uses edges (from docs/skill-sources.md and SKILL.md/scripts), and the orphan-skill / ledger-gap / unowned-skill signals are off by default. Pass --include-skills to restore them. That inventory is moving to guildmaster's guild overview (guildmaster#12); the flag is a bridge until cutover (#63).

# 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

# Interactive HTML page — open in a browser for edge-type toggles,
# pan/zoom, and node click-to-focus (filter to a node's neighbours):
steward overview --scope siblings --html > overview.html

# Include the (transitional) skill-supply layer:
steward overview --scope siblings --include-skills

--json and --html are mutually exclusive. The HTML page renders the same graph client-side (Mermaid + pan/zoom from a CDN, so it needs network to draw; the inventory/connectivity/signal tables work offline).

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": "culture/culture", "type": "agent", "props": {"backend": "claude"}}],
  "edges": [{"source": "culture", "target": "afi-cli", "type": "depends_on", "basis": "pyproject.toml"}],
  "signals": [{"kind": "over-connected-agent", "subject": "culture/culture", "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

  • culture runs the agent mesh. Steward does not run agents — it aligns their configuration and lifecycle policies across the mesh.
  • daria is 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-cli and ghafi are sibling CLIs that follow the same sibling pattern steward maintains. The eventual --apply repair mode will consume ../afi-cli/afi/cite/_engine.py rather than re-implement vendoring.

Further reading

License

Apache 2.0 — see LICENSE.

Metadata

Release files for steward-cli 0.28.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for steward-cli 0.28.1
File Size Uploaded
steward_cli-0.28.1.tar.gz 362.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for steward-cli 0.28.1
File Interpreter ABI Platform
steward_cli-0.28.1-py3-none-any.whl Python 3 none any Details

Total release size: 438.1 kB

Release files / steward_cli-0.28.1.tar.gz

Download URL steward_cli-0.28.1.tar.gz
Size 362.2 kB
Tags Source
SHA-256 checksum
How to use checksums
0c82eab6a8b2386ec86d7df29d42109da496bfc3f26946c36ff73c275fd73d88
BLAKE2b-256 checksum
How to use checksums
ba1d1d987679d6cf77cf1c1812c4d01d8f324a4865bb55183d7b2eabf8cdcba1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","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}

Release files / steward_cli-0.28.1-py3-none-any.whl

Download URL steward_cli-0.28.1-py3-none-any.whl
Size 76.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a2c024243188ae827a854e089b02926d8ae52551e43ff005288c04724d77866e
BLAKE2b-256 checksum
How to use checksums
ed64e09c503f827311941bd016298733b9b3e9c7ec82ab0b95bc0853e4548499
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","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}

Release history Release notifications | RSS feed

This release

0.28.1 This release

2 release files

0.26.0

2 release files

0.25.2

2 release files

0.25.1

2 release files

0.25.0

2 release files

0.24.0

2 release files

0.23.0

2 release files

0.22.0

2 release files

0.21.0

2 release files

0.20.0

2 release files

0.19.3

2 release files

0.19.2

2 release files

0.19.1

2 release files

0.19.0

2 release files

0.18.3

2 release files

0.18.2

2 release files

0.18.1

2 release files

0.18.0

2 release files

0.17.1

2 release files

0.17.0

2 release files

0.16.0

2 release files

0.15.0

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.11.1

2 release files

0.11.0

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page