Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/figures/family-dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion docs/figures/family-light.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
35 changes: 33 additions & 2 deletions docs/figures/make_family.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,56 @@
statement stays on one line under 88 characters.
"""

import importlib
import re
import sys
from pathlib import Path

import palette as p

ROOT = Path(__file__).resolve().parents[2]
REGISTRY = ROOT / "registry.yaml"
MATRIX_SRC = ROOT / "src"

W, H = 800, 420
NAME, ROLE = 13, 11
WIDE, NARROW, ARM = 74, 34, 22


def catalog_count():
"""Policies in the catalog's registry.yaml, or None in a repo that carries none."""
if not REGISTRY.is_file():
return None
text = REGISTRY.read_text(encoding="utf-8").split("\nskills:\n", 1)[0]
return len(re.findall(r"^- id: \S+", text, re.MULTILINE)) or None


def agent_count():
"""Agents in agentseam's capability matrix, or None in a repo that has none."""
if not (MATRIX_SRC / "agentseam" / "matrix.py").is_file():
return None
sys.path.insert(0, str(MATRIX_SRC))
return len(importlib.import_module("agentseam.matrix").agents())


# Only the repo holding each source names its count; the others say it without one.
_N, _A = catalog_count(), agent_count()
POLICIES = f"the policies \N{EM DASH} {_N}," if _N else "the policies \N{EM DASH}"
AGENTS = f"across {_A} agents" if _A else "across the supported agents"

# Split into fragments joined with a space: a magic trailing comma keeps each list
# exploded, so `ruff format` leaves this alone at 88, 100 and 120 alike.
ROLES = {
"agentseam": [
"the primitives — one handler API and a verified capability",
"matrix across 16 agents",
"matrix " + AGENTS,
],
"chock": [
"the compiler — one policy into git hooks, CI gates and",
"native pre-tool hooks",
],
"chock-catalog": [
"the policies — 39, each labelled enforced or advisory,",
POLICIES + " each labelled enforced or advisory,",
"with replayed evals",
],
"context-report": [
Expand Down
11 changes: 7 additions & 4 deletions llms.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# agentseam

> The primitives layer for every coding agent — one handler API over per-agent hooks,
> instruction files, plugin packaging, and config.
> The primitives layer under Chock's guardrails for AI coding agents: one handler API over
> per-agent hooks, instruction files, plugin packaging, and config.

Every coding agent (Claude Code, Cursor, VS Code Copilot, Codex CLI, Gemini CLI, Windsurf,
and more) invented its own hook system, instruction-file convention, and permission
Expand All @@ -10,8 +10,11 @@ language. agentseam normalizes them into one handler API, one decision type
`ask` and `rewrite` remain as deprecated aliases of `escalate` and `transform`), and an
explicit capability matrix that states what each agent can *actually* enforce — `enforced`,
`best-effort`, `enforceable`, `detect`, or `none` — rather than assuming they are equivalent.
A matrix row is only claimed when a `verified: {version, date, method}` record backs it;
most rows rest on vendor documentation and are marked as such, not on an observed live run.
The matrix (`src/agentseam/matrix.py`) covers 16 agents by 12 events: 192 cells, of which 101
are `none`, 55 `detect`, 34 `best-effort`, 2 `enforceable` and 0 `enforced`. A matrix row is
only claimed when a `verified: {version, date, method}` record backs it; 10 of the 16 agents
rest on vendor documentation, 1 on a live run, 3 on a partial live run, 1 on the vendor's
source and 1 on a third-party install, and each is marked as such.

License: Apache-2.0. Status: pre-1.0 — the CLI surface, manifest schema, and compiled
output can change between MINOR releases.
Expand Down
Loading