guild-cli 0.3.0__tar.gz → 0.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- guild_cli-0.4.2/.claude/skills/agent-config/SKILL.md +82 -0
- guild_cli-0.4.2/.claude/skills/agent-config/data/backend-fingerprints.yaml +30 -0
- guild_cli-0.4.2/.claude/skills/agent-config/scripts/show.sh +136 -0
- guild_cli-0.4.2/.claude/skills/guild/SKILL.md +146 -0
- guild_cli-0.4.2/.claude/skills/guild/scripts/overview.sh +76 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills.local.yaml.example +2 -1
- {guild_cli-0.3.0 → guild_cli-0.4.2}/CHANGELOG.md +89 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/CLAUDE.md +26 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/PKG-INFO +29 -1
- {guild_cli-0.3.0 → guild_cli-0.4.2}/README.md +28 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/docs/skill-sources.md +15 -2
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/cli/__init__.py +4 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/cli/_commands/__init__.py +8 -0
- guild_cli-0.4.2/guild/cli/_commands/overview.py +410 -0
- guild_cli-0.4.2/guild/cli/_commands/show.py +266 -0
- guild_cli-0.4.2/guild/cli/_repo.py +235 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/skills/__init__.py +6 -3
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/skills/ledger.py +36 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/pyproject.toml +1 -1
- guild_cli-0.4.2/tests/test_cli_overview.py +286 -0
- guild_cli-0.4.2/tests/test_cli_show.py +165 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_skills_convention.py +2 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_skills_ledger.py +56 -1
- {guild_cli-0.3.0 → guild_cli-0.4.2}/uv.lock +1 -1
- guild_cli-0.3.0/guild/cli/_repo.py +0 -116
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/cicd/SKILL.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/cicd/scripts/workflow.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/communicate/SKILL.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/onboard/SKILL.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/onboard/scripts/onboard.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/run-tests/SKILL.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/sonarclaude/SKILL.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/spec-to-plan/SKILL.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/teach/SKILL.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/teach/scripts/teach.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/think/SKILL.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/think/scripts/think.sh +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/version-bump/SKILL.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.claude/skills/version-bump/scripts/bump.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.devague/frames/guildmaster-ships-teach-and-onboard-two-agent-firs.json +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.devague/plans/guildmaster-ships-teach-and-onboard-two-agent-firs.json +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.flake8 +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.github/workflows/publish.yml +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.github/workflows/tests.yml +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.gitignore +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/.markdownlint-cli2.yaml +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/LICENSE +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/culture.yaml +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/docs/cutover.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/docs/plans/2026-05-24-guildmaster-ships-teach-and-onboard-two-agent-firs.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/docs/specs/2026-05-24-guildmaster-ships-teach-and-onboard-two-agent-firs.md +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/__init__.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/__main__.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/cli/_commands/_broadcast.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/cli/_commands/explain.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/cli/_commands/learn.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/cli/_commands/onboard.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/cli/_commands/teach.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/cli/_commands/whoami.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/cli/_errors.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/cli/_output.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/skills/identity.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/skills/render.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/guild/skills/sources.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/__init__.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_broadcast_post.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_cli.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_cli_explain.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_cli_learn.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_cli_onboard.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_cli_teach.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_cli_whoami.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_skills_identity.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_skills_render.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_skills_sources.py +0 -0
- {guild_cli-0.3.0 → guild_cli-0.4.2}/tests/test_version_fallback.py +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-config
|
|
3
|
+
description: >
|
|
4
|
+
Show a Culture agent's full configuration in one read-only view: its
|
|
5
|
+
system-prompt file (CLAUDE.md / AGENTS.md / GEMINI.md), the parallel
|
|
6
|
+
culture.yaml, and the agent's local .claude/skills index. Use when an
|
|
7
|
+
operator says "show agent <name>", "what does <agent> look like", or before
|
|
8
|
+
teaching/onboarding an agent and you need to see its current kit + config.
|
|
9
|
+
Backs the `guild show` verb. Vendored from steward (cite-don't-import);
|
|
10
|
+
inventory only — it reports, it does not judge alignment or drift.
|
|
11
|
+
type: command
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# agent-config — surface a Culture agent's config in one view
|
|
15
|
+
|
|
16
|
+
guildmaster is the mesh's skills supplier and owns the **inventory** surfaces:
|
|
17
|
+
"what kit + config does this agent have?" This skill answers exactly that for a
|
|
18
|
+
single agent, showing the three artifacts that together define it:
|
|
19
|
+
|
|
20
|
+
1. **System-prompt file** (`CLAUDE.md` / `AGENTS.md` / `GEMINI.md`) — the
|
|
21
|
+
prompt-side guidance for the agent's backend. The script detects which file
|
|
22
|
+
is present from a backend-fingerprint registry.
|
|
23
|
+
2. **`culture.yaml`** — the runtime-side config (`agents:` list with `suffix`,
|
|
24
|
+
`backend`, `model`, `system_prompt`, `channels`, `tags`, `acp_command`,
|
|
25
|
+
`extras`). Lives parallel to the prompt file at the project root.
|
|
26
|
+
3. **`.claude/skills/*/SKILL.md`** — the per-project skills the agent can
|
|
27
|
+
invoke, one line each (name + truncated description).
|
|
28
|
+
|
|
29
|
+
This is the **inventory half** of the steward → guildmaster split
|
|
30
|
+
([issue #12](https://github.com/agentculture/guildmaster/issues/12)): it reports
|
|
31
|
+
the config, it does **not** interpret drift or judge alignment. The relationship
|
|
32
|
+
graph and the "is this agent aligned?" judgment stay with `steward overview` /
|
|
33
|
+
`steward doctor`.
|
|
34
|
+
|
|
35
|
+
## When to use
|
|
36
|
+
|
|
37
|
+
- Before `guild teach` / `guild onboard` — see an agent's current kit + config.
|
|
38
|
+
- When an operator asks "show me agent `<name>`" or "what does `<agent>` run".
|
|
39
|
+
- Read it, don't guess — before answering a question about what an agent does.
|
|
40
|
+
|
|
41
|
+
## How to run
|
|
42
|
+
|
|
43
|
+
One script, two ways to call it (or just run `guild show`, which wraps it):
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Path mode — point at any directory with a prompt file + culture.yaml
|
|
47
|
+
.claude/skills/agent-config/scripts/show.sh ../culture
|
|
48
|
+
|
|
49
|
+
# Suffix mode — resolve a registered agent suffix via the Culture server's
|
|
50
|
+
# manifest (location set by culture_server_yaml in skills.local.yaml)
|
|
51
|
+
.claude/skills/agent-config/scripts/show.sh daria
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Output is three sections: the detected system-prompt file, `culture.yaml` (or
|
|
55
|
+
`(missing)`), and a one-line summary per local skill (name + description,
|
|
56
|
+
truncated to 120 chars).
|
|
57
|
+
|
|
58
|
+
## What to look at in `culture.yaml`
|
|
59
|
+
|
|
60
|
+
| Field | Why it matters |
|
|
61
|
+
|-------|----------------|
|
|
62
|
+
| `suffix` | Identifies the agent on the mesh. |
|
|
63
|
+
| `backend` | One of `claude` / `codex` / `copilot` / `acp`. The all-backends rule means a feature in one must land in all four. |
|
|
64
|
+
| `model` | Drift here changes behavior silently. |
|
|
65
|
+
| `system_prompt` | Should not contradict the prompt file. |
|
|
66
|
+
| `channels` | Where the agent listens. |
|
|
67
|
+
| `tags`, `extras`, `acp_command` | Backend-specific. |
|
|
68
|
+
|
|
69
|
+
## Notes
|
|
70
|
+
|
|
71
|
+
- **Read-only.** The script never edits agent files. It reports; it does not
|
|
72
|
+
flag or fix drift — that judgment is steward's lane.
|
|
73
|
+
- **Backend-aware.** Prompt-file detection comes from
|
|
74
|
+
`data/backend-fingerprints.yaml` (the `prompt:` mapping), falling back to the
|
|
75
|
+
built-in `(CLAUDE.md AGENTS.md GEMINI.md)` list if the registry is absent.
|
|
76
|
+
- **Per-machine config.** Suffix mode reads `culture_server_yaml` from
|
|
77
|
+
`.claude/skills.local.yaml` (git-ignored), falling back to
|
|
78
|
+
`.claude/skills.local.yaml.example`.
|
|
79
|
+
- **Vendored from steward** (`agent-config`). guildmaster owns this copy and may
|
|
80
|
+
diverge; re-sync from steward's canonical copy when it changes. Divergences:
|
|
81
|
+
the SKILL.md is reframed for guildmaster's inventory role and adds
|
|
82
|
+
`type: command` for the culture backend's skill loader.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Canonical backend fingerprint registry. Vendored from steward's agent-config
|
|
2
|
+
# skill (cite-don't-import); guildmaster owns this copy. Read by the agent-config
|
|
3
|
+
# show.sh (bash), which `guild show` shells out to. Upstream steward also reads
|
|
4
|
+
# it from a Python detector; guildmaster has no parallel detector, so only the
|
|
5
|
+
# `backends:` prompt mapping below is load-bearing here. Keep that mapping in
|
|
6
|
+
# sync with upstream when re-syncing.
|
|
7
|
+
#
|
|
8
|
+
# `prompt` — the backend's system-prompt filename at the repo root.
|
|
9
|
+
# `steering` — files/dirs distinctive enough to attribute to this backend.
|
|
10
|
+
# `shared_steering` — files/dirs that belong to NO specific backend. A repo
|
|
11
|
+
# declared as any backend may have these without triggering a
|
|
12
|
+
# mismatch. `.agents` is a generic Culture agent-config
|
|
13
|
+
# convention. `.claude/settings.json` and
|
|
14
|
+
# `.claude/settings.local.json` are generic Claude Code
|
|
15
|
+
# (editor/CLI) workspace config files — they appear in any
|
|
16
|
+
# repo that uses Claude Code as the development tool,
|
|
17
|
+
# regardless of the agent backend, so they must never be used
|
|
18
|
+
# to infer the backend or flag a mismatch. The claude backend
|
|
19
|
+
# is identified solely by its `CLAUDE.md` prompt file.
|
|
20
|
+
# `.github/copilot-instructions.md` is generic GitHub Copilot
|
|
21
|
+
# editor/IDE config — any repo may have it regardless of the
|
|
22
|
+
# declared agent backend, so it must not trigger a mismatch.
|
|
23
|
+
backends:
|
|
24
|
+
claude: { prompt: CLAUDE.md, steering: [] }
|
|
25
|
+
codex: { prompt: AGENTS.md, steering: [".codex"] }
|
|
26
|
+
acp: { prompt: AGENTS.md, steering: [".kiro"] }
|
|
27
|
+
copilot: { prompt: AGENTS.md, steering: [] }
|
|
28
|
+
gemini: { prompt: GEMINI.md, steering: [".gemini"] }
|
|
29
|
+
shared_steering: [".agents", ".claude/settings.json", ".claude/settings.local.json", ".github/copilot-instructions.md"]
|
|
30
|
+
prompt_fallback: AGENTS.md
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
# Show a Culture agent's full configuration in one view:
|
|
4
|
+
# the detected system-prompt file (CLAUDE.md / AGENTS.md / GEMINI.md), the
|
|
5
|
+
# parallel culture.yaml, and the .claude/skills/ index.
|
|
6
|
+
#
|
|
7
|
+
# Usage: show.sh <path-or-agent-suffix>
|
|
8
|
+
#
|
|
9
|
+
# Path mode: show.sh ../culture
|
|
10
|
+
# Suffix mode: show.sh daria (resolved via culture_server_yaml in skills.local.yaml)
|
|
11
|
+
#
|
|
12
|
+
# Exit codes:
|
|
13
|
+
# 0 success
|
|
14
|
+
# 1 environment error (missing manifest, missing PyYAML for suffix mode)
|
|
15
|
+
# 2 user error (no target given, unknown suffix, target path doesn't exist)
|
|
16
|
+
|
|
17
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
18
|
+
SKILL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
19
|
+
REPO_ROOT="$(cd "$SKILL_DIR/../../.." && pwd)"
|
|
20
|
+
|
|
21
|
+
CFG="$REPO_ROOT/.claude/skills.local.yaml"
|
|
22
|
+
[ -f "$CFG" ] || CFG="$REPO_ROOT/.claude/skills.local.yaml.example"
|
|
23
|
+
|
|
24
|
+
# Read a top-level YAML scalar from CFG. Schema is intentionally tiny:
|
|
25
|
+
# key: value (with optional surrounding quotes / trailing comment)
|
|
26
|
+
# No PyYAML dependency.
|
|
27
|
+
read_cfg() {
|
|
28
|
+
awk -v key="$1" '
|
|
29
|
+
$0 ~ ("^" key ":[[:space:]]*") {
|
|
30
|
+
sub("^" key ":[[:space:]]*", "")
|
|
31
|
+
sub(/[[:space:]]*#.*$/, "")
|
|
32
|
+
sub(/^[[:space:]]+/, ""); sub(/[[:space:]]+$/, "")
|
|
33
|
+
sub(/^["\047]/, ""); sub(/["\047]$/, "")
|
|
34
|
+
print
|
|
35
|
+
exit
|
|
36
|
+
}
|
|
37
|
+
' "$CFG"
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
target="${1:-}"
|
|
41
|
+
if [ -z "$target" ]; then
|
|
42
|
+
echo "Usage: $(basename "$0") <path-or-agent-suffix>" >&2
|
|
43
|
+
exit 2
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
if [ -d "$target" ]; then
|
|
47
|
+
DIR="$target"
|
|
48
|
+
else
|
|
49
|
+
SERVER_YAML_RAW="$(read_cfg culture_server_yaml)"
|
|
50
|
+
SERVER_YAML="${SERVER_YAML_RAW/#\~/$HOME}"
|
|
51
|
+
if [ ! -f "$SERVER_YAML" ]; then
|
|
52
|
+
echo "no server manifest at $SERVER_YAML — set culture_server_yaml in $CFG" >&2
|
|
53
|
+
echo "or pass an explicit path instead of suffix '$target'" >&2
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
# Suffix mode parses Culture's server manifest, whose schema is dictated by
|
|
57
|
+
# Culture (not by us) and includes nested mappings — too rich for awk.
|
|
58
|
+
# We use python+PyYAML here, with a friendly install hint if it's missing.
|
|
59
|
+
if ! python3 -c 'import yaml' 2>/dev/null; then
|
|
60
|
+
echo "suffix mode needs Python + PyYAML to parse $SERVER_YAML" >&2
|
|
61
|
+
echo " install: pip install --user pyyaml (or: uv pip install pyyaml)" >&2
|
|
62
|
+
echo " or pass an explicit path instead of suffix '$target'" >&2
|
|
63
|
+
exit 1
|
|
64
|
+
fi
|
|
65
|
+
# Use a dedicated exit code (2) for "unknown suffix" so the steward CLI
|
|
66
|
+
# wrapper can distinguish user errors (typo'd suffix) from env errors
|
|
67
|
+
# (missing manifest / PyYAML).
|
|
68
|
+
if ! DIR=$(python3 - "$SERVER_YAML" "$target" <<'PY'
|
|
69
|
+
import sys, yaml, pathlib
|
|
70
|
+
manifest_path, suffix = sys.argv[1], sys.argv[2]
|
|
71
|
+
m = yaml.safe_load(pathlib.Path(manifest_path).read_text()) or {}
|
|
72
|
+
agents = m.get('agents', {})
|
|
73
|
+
entry = agents.get(suffix)
|
|
74
|
+
if entry is None:
|
|
75
|
+
print(f"no agent registered with suffix {suffix!r} in {manifest_path}", file=sys.stderr)
|
|
76
|
+
sys.exit(2)
|
|
77
|
+
print(entry['directory'] if isinstance(entry, dict) else entry)
|
|
78
|
+
PY
|
|
79
|
+
); then
|
|
80
|
+
exit 2
|
|
81
|
+
fi
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
DIR="${DIR/#\~/$HOME}"
|
|
85
|
+
|
|
86
|
+
# Recognized prompt filenames come from the shared registry (single source
|
|
87
|
+
# of truth with the Python detector). Fall back to the built-in list if the
|
|
88
|
+
# registry isn't present (e.g. skill vendored without the data file).
|
|
89
|
+
REGISTRY="$SKILL_DIR/data/backend-fingerprints.yaml"
|
|
90
|
+
prompt_files=()
|
|
91
|
+
if [ -f "$REGISTRY" ]; then
|
|
92
|
+
while IFS= read -r pf; do
|
|
93
|
+
[ -n "$pf" ] && prompt_files+=("$pf")
|
|
94
|
+
done < <(grep -oE 'prompt:[[:space:]]*[^,}[:space:]]+' "$REGISTRY" | awk '{print $NF}' | sort -u)
|
|
95
|
+
fi
|
|
96
|
+
[ ${#prompt_files[@]} -eq 0 ] && prompt_files=(CLAUDE.md AGENTS.md GEMINI.md)
|
|
97
|
+
|
|
98
|
+
shown=0
|
|
99
|
+
for pf in "${prompt_files[@]}"; do
|
|
100
|
+
if [ -f "$DIR/$pf" ]; then
|
|
101
|
+
echo "=== $DIR/$pf ==="
|
|
102
|
+
cat "$DIR/$pf"
|
|
103
|
+
echo
|
|
104
|
+
shown=1
|
|
105
|
+
fi
|
|
106
|
+
done
|
|
107
|
+
if [ "$shown" -eq 0 ]; then
|
|
108
|
+
echo "=== $DIR (system prompt) ==="
|
|
109
|
+
echo "(no recognized prompt file: ${prompt_files[*]})"
|
|
110
|
+
echo
|
|
111
|
+
fi
|
|
112
|
+
echo "=== $DIR/culture.yaml ==="
|
|
113
|
+
if [ -f "$DIR/culture.yaml" ]; then cat "$DIR/culture.yaml"; else echo "(missing)"; fi
|
|
114
|
+
echo
|
|
115
|
+
echo "=== $DIR/.claude/skills/ ==="
|
|
116
|
+
found=0
|
|
117
|
+
for s in "$DIR"/.claude/skills/*/SKILL.md; do
|
|
118
|
+
[ -f "$s" ] || continue
|
|
119
|
+
found=1
|
|
120
|
+
name=$(awk '/^name:/{print $2; exit}' "$s")
|
|
121
|
+
desc=$(awk '
|
|
122
|
+
/^description:/ {
|
|
123
|
+
sub(/^description:[[:space:]]*/, "")
|
|
124
|
+
buf = $0
|
|
125
|
+
flag = 1
|
|
126
|
+
next
|
|
127
|
+
}
|
|
128
|
+
flag && /^[a-z_-]+:/ { flag = 0 }
|
|
129
|
+
flag { buf = buf " " $0 }
|
|
130
|
+
END { gsub(/^[[:space:]]+|[[:space:]]+$/, "", buf); print buf }
|
|
131
|
+
' "$s")
|
|
132
|
+
printf " %-30s %s\n" "$name" "${desc:0:120}"
|
|
133
|
+
done
|
|
134
|
+
if [ "$found" -eq 0 ]; then
|
|
135
|
+
echo " (no skills)"
|
|
136
|
+
fi
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: guild
|
|
3
|
+
description: >
|
|
4
|
+
Run guildmaster's skills-supplier overview and narrate it. Run `guild
|
|
5
|
+
overview` (via scripts/overview.sh) for the deterministic evidence pack — the
|
|
6
|
+
canonical skill set + versions/origins, the docs/skill-sources.md ledger, and
|
|
7
|
+
skills-scoped drift signals — then narrate three separated layers: observed
|
|
8
|
+
facts, inferred relationships, and suggestions (each naming the command that
|
|
9
|
+
enacts it). Use when an operator asks "what skills do we supply", "who
|
|
10
|
+
consumes what", "is anything drifting", or "what should I teach next".
|
|
11
|
+
Skills-scoped and reflect-only — it surfaces and interprets supplier-side
|
|
12
|
+
skill/version signals; it does NOT narrate the agent relationship graph or
|
|
13
|
+
judge alignment (that stays with steward's org-overview / steward doctor).
|
|
14
|
+
The skills-scoped excerpt of steward's `org-overview` narration contract
|
|
15
|
+
(cite-don't-import, issue #12).
|
|
16
|
+
type: command
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# guild — narrate guildmaster's own supplier surfaces
|
|
20
|
+
|
|
21
|
+
guildmaster is the mesh's skills **supplier**, and it owns the *inventory*
|
|
22
|
+
surfaces ([issue #12](https://github.com/agentculture/guildmaster/issues/12)).
|
|
23
|
+
The per-agent half (`guild show`) is backed by the vendored `agent-config`
|
|
24
|
+
skill. **This skill is the supplier half: the affordance for `guild overview`.**
|
|
25
|
+
It houses the scripts that run guildmaster's own read-only CLI surfaces and the
|
|
26
|
+
contract for narrating them — `overview` is the one script today.
|
|
27
|
+
|
|
28
|
+
Unlike the vendored skills, this one is **guildmaster's own** (origin =
|
|
29
|
+
`guildmaster`, not cited from steward): `guild overview` is a pure-Python,
|
|
30
|
+
read-only CLI verb, and `scripts/overview.sh` is the thin deterministic wrapper
|
|
31
|
+
that invokes it. The script picks how to call `guild` (installed console
|
|
32
|
+
script → `uv run` → `python -m guild`) and delegates; it interprets nothing.
|
|
33
|
+
|
|
34
|
+
**The load-bearing split** (this is the skills-scoped excerpt of steward's
|
|
35
|
+
`org-overview` narration contract — issue #12, cite-don't-import):
|
|
36
|
+
|
|
37
|
+
- **The CLI (`guild overview`) emits only deterministic facts** — the canonical
|
|
38
|
+
skill set, the ledger view, and neutral drift signals. No LLM, no
|
|
39
|
+
interpretation, mutates nothing.
|
|
40
|
+
- **This skill is where the agent interprets** — turning those facts into
|
|
41
|
+
inferred relationships and suggestions. **Never present an inference as a
|
|
42
|
+
fact**, and keep the layers in separate sections.
|
|
43
|
+
|
|
44
|
+
## What `overview` answers
|
|
45
|
+
|
|
46
|
+
A skills-scoped evidence pack — **not** `steward overview`'s ecosystem
|
|
47
|
+
relationship graph (issue #12: inventory → guildmaster; judgment → steward):
|
|
48
|
+
|
|
49
|
+
1. **Canonical skill set + versions** — every skill guildmaster supplies, its
|
|
50
|
+
origin (`guildmaster`, or a sibling it only re-broadcasts), and the current
|
|
51
|
+
canonical version, plus per-skill consumers.
|
|
52
|
+
2. **Ledger view** — who-consumes-which-skill, read from `docs/skill-sources.md`.
|
|
53
|
+
3. **Drift signals** — canonical skills no one consumes, canonical skills the
|
|
54
|
+
ledger doesn't track yet, and per-agent kit gaps. These feed `teach` /
|
|
55
|
+
`onboard`.
|
|
56
|
+
|
|
57
|
+
**Pre-cutover** the guildmaster ledger is still a consumer-side view with no
|
|
58
|
+
"Downstream" column, so the supplier ledger is empty and drift is inactive; the
|
|
59
|
+
verb reports the canonical set and says so plainly (see `docs/cutover.md`).
|
|
60
|
+
|
|
61
|
+
**`--scope mesh`** is the ledger-free alternative: it surveys every agent in the
|
|
62
|
+
workspace (`<workspace>/*/culture.yaml`) live off the filesystem and reports, per
|
|
63
|
+
agent, each canonical skill as **current** / **stale** (the agent's copy differs
|
|
64
|
+
from guildmaster's by content fingerprint) / **missing**, plus any non-canonical
|
|
65
|
+
"extra" skills. Use it to answer "what's missing or stale, and where" *today*,
|
|
66
|
+
without waiting for the cutover. Still skills-scoped — no relationship graph.
|
|
67
|
+
|
|
68
|
+
## When to use
|
|
69
|
+
|
|
70
|
+
- An operator asks "what skills do we supply" / "what's the canonical set".
|
|
71
|
+
- "Who has skill `<x>`?" / "who consumes what?" / "is anything drifting?"
|
|
72
|
+
- "What should I `teach` next?" — overview's gaps are the input to `teach`.
|
|
73
|
+
- Before `guild teach` / `guild onboard`, to see uncovered skills and kit gaps.
|
|
74
|
+
|
|
75
|
+
## How to run
|
|
76
|
+
|
|
77
|
+
One script. Pick the scope (or just run `guild overview`, which this wraps):
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Whole mesh — the canonical set + ledger + drift across all agents (default)
|
|
81
|
+
.claude/skills/guild/scripts/overview.sh
|
|
82
|
+
|
|
83
|
+
# One agent — that agent's kit + gaps (first positional → --scope self)
|
|
84
|
+
.claude/skills/guild/scripts/overview.sh daria
|
|
85
|
+
|
|
86
|
+
# Mesh survey — every agent's skills + missing/stale, live off the filesystem
|
|
87
|
+
.claude/skills/guild/scripts/overview.sh --scope mesh
|
|
88
|
+
|
|
89
|
+
# Machine-readable evidence for precise reasoning
|
|
90
|
+
.claude/skills/guild/scripts/overview.sh --json
|
|
91
|
+
.claude/skills/guild/scripts/overview.sh --scope mesh --json
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The script prints the CLI's markdown by default: the canonical-skill table, a
|
|
95
|
+
ledger section, and a drift section. The exact per-skill consumer and gap lists
|
|
96
|
+
live in `--json`.
|
|
97
|
+
|
|
98
|
+
## Narrate three layers — never blur them
|
|
99
|
+
|
|
100
|
+
`guild overview` emits only deterministic facts; this skill is where you
|
|
101
|
+
interpret them. Keep the three layers in separate sections, and never present
|
|
102
|
+
an inference as a fact:
|
|
103
|
+
|
|
104
|
+
1. **Observed facts.** Summarize the canonical set + versions/origins and the
|
|
105
|
+
ledger view in your own words — lead with what the counts reveal (the
|
|
106
|
+
canonical set, who's behind, who's unregistered). State only what the CLI
|
|
107
|
+
reported; don't reproduce the raw signal lists verbatim (read `--json` only
|
|
108
|
+
when you need an exact list to act on). Pre-cutover, say so plainly: the
|
|
109
|
+
ledger has no downstream column yet, so consumers are empty and drift is
|
|
110
|
+
inactive.
|
|
111
|
+
2. **Inferred relationships** (mark clearly as inferred). Connect facts no
|
|
112
|
+
single ledger row states outright — e.g. two consumers vendored from the
|
|
113
|
+
same upstream skill *both* lag a canonical bump (a shared exposure), or a
|
|
114
|
+
skill only `guildmaster` carries is a single point of supply.
|
|
115
|
+
3. **Suggestions** (kept separate from facts, and *named, not run*). Seed these
|
|
116
|
+
from the skills-scoped drift signals — for each, name the concrete next step
|
|
117
|
+
and the command that enacts it, then stop.
|
|
118
|
+
|
|
119
|
+
### Signal → suggestion (skills-scoped only)
|
|
120
|
+
|
|
121
|
+
These are the **skill/version** signals `guild overview` emits — guildmaster's
|
|
122
|
+
supplier lane:
|
|
123
|
+
|
|
124
|
+
| Drift signal (from `guild overview`) | Reading | Named follow-up — name it, do NOT auto-run |
|
|
125
|
+
|--------------------------------------|---------|--------------------------------------------|
|
|
126
|
+
| `unledgered_skills` | a canonical skill the ledger doesn't track (no owner row) | Fix the ledger: add it to `docs/skill-sources.md` |
|
|
127
|
+
| `uncovered_skills` | a canonical skill no agent consumes (orphan) | Confirm intentional, then `teach` it, or retire it |
|
|
128
|
+
| `agent_gaps` (per-agent missing skill) | a consumer behind / missing a skill | `guild teach --skill <name> --to <agent>` to close the gap |
|
|
129
|
+
| agent not registered in the ledger | a sibling not yet onboarded | `guild onboard --agent <owner/repo>` |
|
|
130
|
+
| consumer behind the canonical pin (post-cutover) | a team on an outdated procedure | Re-vendor: `guild teach` / `onboard` to the current pin |
|
|
131
|
+
|
|
132
|
+
### Out of scope — steward's lane
|
|
133
|
+
|
|
134
|
+
The **relationship** signals — `overlap`, `over-connected-agent`,
|
|
135
|
+
`isolated-repo` — and the typed agent relationship graph are **not** narrated
|
|
136
|
+
here. Those belong to steward's `org-overview` / `steward overview`. guildmaster
|
|
137
|
+
narrates skills/version drift, not the ecosystem graph or alignment judgment.
|
|
138
|
+
|
|
139
|
+
### Reflect-only
|
|
140
|
+
|
|
141
|
+
This skill **sees, reflects, and suggests — it does not act.** For every
|
|
142
|
+
suggestion, name the concrete next step and the command that enacts it, then
|
|
143
|
+
stop. Editing the ledger, filing an issue, or running `teach` / `onboard` is a
|
|
144
|
+
separate, explicit step the operator chooses. The skill writes nothing to disk
|
|
145
|
+
and mutates no repo — output is the chat conversation only. Read-only: no
|
|
146
|
+
`--apply`, no mutation, no network/LLM call.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
# overview — assemble the `guild overview` skills-supplier evidence pack for
|
|
4
|
+
# narration.
|
|
5
|
+
#
|
|
6
|
+
# The guildmaster agent runs this, then narrates the supplier view (the
|
|
7
|
+
# canonical skill set + versions/origins, the docs/skill-sources.md ledger, and
|
|
8
|
+
# the drift signals that feed `teach` / `onboard`). See SKILL.md.
|
|
9
|
+
# Deterministic glue only: resolve guildmaster's repo root, run from there,
|
|
10
|
+
# resolve how to invoke guild, pick the scope, and delegate to `guild overview`.
|
|
11
|
+
# No interpretation.
|
|
12
|
+
#
|
|
13
|
+
# Usage:
|
|
14
|
+
# overview.sh # whole ledger across the mesh (--scope all)
|
|
15
|
+
# overview.sh <agent> # one agent's kit + gaps (--scope self)
|
|
16
|
+
# overview.sh --scope mesh # live filesystem survey of every agent
|
|
17
|
+
# overview.sh --json # all, JSON evidence
|
|
18
|
+
# overview.sh <agent> --json # one agent, JSON evidence
|
|
19
|
+
#
|
|
20
|
+
# Contract: the FIRST argument, if it does not start with '-', is the agent
|
|
21
|
+
# (self scope). All remaining arguments pass through to `guild overview`.
|
|
22
|
+
#
|
|
23
|
+
# Exit codes:
|
|
24
|
+
# 0 success (delegates to `guild overview`; its exit code propagates)
|
|
25
|
+
# 1 environment error (no way to invoke guild)
|
|
26
|
+
|
|
27
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
28
|
+
|
|
29
|
+
# Resolve guildmaster's repo root and run from there, so `guild overview` always
|
|
30
|
+
# reports guildmaster's canonical set regardless of the caller's working
|
|
31
|
+
# directory (the CLI reads its repo from cwd). Prefer git (robust); fall back to
|
|
32
|
+
# climbing out of the fixed .claude/skills/<name>/scripts/ layout when git is
|
|
33
|
+
# unavailable.
|
|
34
|
+
REPO_ROOT="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null || true)"
|
|
35
|
+
if [ -z "$REPO_ROOT" ]; then
|
|
36
|
+
REPO_ROOT="$(cd "$SCRIPT_DIR/../../../.." && pwd)"
|
|
37
|
+
fi
|
|
38
|
+
cd "$REPO_ROOT"
|
|
39
|
+
|
|
40
|
+
# Resolve how to invoke guild: installed console script, then uv, then module.
|
|
41
|
+
if command -v guild >/dev/null 2>&1; then
|
|
42
|
+
GUILD=(guild)
|
|
43
|
+
elif [ -f "$REPO_ROOT/pyproject.toml" ] && command -v uv >/dev/null 2>&1; then
|
|
44
|
+
GUILD=(uv run --project "$REPO_ROOT" guild)
|
|
45
|
+
elif command -v python3 >/dev/null 2>&1; then
|
|
46
|
+
GUILD=(python3 -m guild)
|
|
47
|
+
else
|
|
48
|
+
echo "overview: cannot invoke guild (need 'guild', 'uv', or 'python3' on PATH)" >&2
|
|
49
|
+
exit 1
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
# Honor an explicit --scope passed through (advanced use); otherwise pick one.
|
|
53
|
+
has_scope=false
|
|
54
|
+
for arg in "$@"; do
|
|
55
|
+
case "$arg" in
|
|
56
|
+
--scope | --scope=*)
|
|
57
|
+
has_scope=true
|
|
58
|
+
break
|
|
59
|
+
;;
|
|
60
|
+
esac
|
|
61
|
+
done
|
|
62
|
+
|
|
63
|
+
overview_args=()
|
|
64
|
+
if [ "$#" -gt 0 ] && [[ "$1" != -* ]]; then
|
|
65
|
+
# First arg is an agent → one-agent (self) scope.
|
|
66
|
+
agent="$1"
|
|
67
|
+
shift
|
|
68
|
+
$has_scope || overview_args+=(--scope self)
|
|
69
|
+
overview_args+=("$agent")
|
|
70
|
+
else
|
|
71
|
+
# No leading agent → whole-ledger (all) view.
|
|
72
|
+
$has_scope || overview_args+=(--scope all)
|
|
73
|
+
fi
|
|
74
|
+
overview_args+=("$@")
|
|
75
|
+
|
|
76
|
+
exec "${GUILD[@]}" overview "${overview_args[@]}"
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
# Skills read skills.local.yaml first, falling back to this example.
|
|
4
4
|
|
|
5
5
|
# Path to the Culture server's agent manifest (suffix → directory mapping).
|
|
6
|
-
# Used by skills that resolve a registered agent suffix to its repo dir
|
|
6
|
+
# Used by skills that resolve a registered agent suffix to its repo dir —
|
|
7
|
+
# e.g. the agent-config skill / `guild show <suffix>` (suffix mode).
|
|
7
8
|
culture_server_yaml: ~/.culture/server.yaml
|
|
8
9
|
|
|
9
10
|
# Sibling project paths checked by cross-repo skills (cicd alignment delta,
|
|
@@ -5,6 +5,95 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/). This project
|
|
6
6
|
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.4.2] - 2026-05-24
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **`guild overview --scope mesh`** — a live filesystem survey of the whole
|
|
13
|
+
workspace, the answer to "what skills does every agent have, and what's
|
|
14
|
+
missing or stale, and where" without waiting for the cutover. Discovers every
|
|
15
|
+
agent (`<workspace>/*/culture.yaml`, via the new `discover_agents` helper) and
|
|
16
|
+
reports, per agent, each canonical skill as **current** / **stale** (the
|
|
17
|
+
agent's copy differs from guildmaster's by content fingerprint —
|
|
18
|
+
`skill_fingerprint`) / **missing**, plus any non-canonical "extra" skills.
|
|
19
|
+
Markdown + `--json`; `--workspace-root DIR` overrides the surveyed root
|
|
20
|
+
(default: the parent of this repo). Read-only, inventory only — no
|
|
21
|
+
dependency/relationship graph (that stays steward's lane). The existing
|
|
22
|
+
ledger-based `--scope all` / `--scope self` are unchanged.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
|
|
28
|
+
- Mesh-survey robustness (Qodo review on #15): `discover_agents` and
|
|
29
|
+
`iter_skills` now skip non-UTF-8 / unreadable `culture.yaml` and `SKILL.md`
|
|
30
|
+
(one bad file in a surveyed repo no longer crashes the run), and
|
|
31
|
+
`skill_fingerprint` skips symlinks (never follows links outside the skill dir;
|
|
32
|
+
keeps the digest deterministic).
|
|
33
|
+
|
|
34
|
+
## [0.4.1] - 2026-05-24
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- **`guild` skill** — the backing affordance + narration skill for `guild
|
|
39
|
+
overview`, the supplier-overview half of the inventory split (sibling to the
|
|
40
|
+
vendored `agent-config` skill that backs `guild show`). `scripts/overview.sh`
|
|
41
|
+
is a deterministic wrapper that resolves how to invoke `guild` (installed →
|
|
42
|
+
`uv` → `python -m guild`) and delegates to `guild overview`; `SKILL.md` is the
|
|
43
|
+
**skills-scoped excerpt of steward's `org-overview` narration contract**
|
|
44
|
+
([#12](https://github.com/agentculture/guildmaster/issues/12),
|
|
45
|
+
cite-don't-import): narrate three separated layers — observed facts, inferred
|
|
46
|
+
relationships, suggestions (each naming its enacting `teach` / `onboard` /
|
|
47
|
+
ledger command), reflect-only. Skills/version scope only — does NOT narrate
|
|
48
|
+
steward's relationship-graph signals (`overlap` / `over-connected-agent` /
|
|
49
|
+
`isolated-repo`). Recorded in `docs/skill-sources.md` as guildmaster-origin
|
|
50
|
+
(not vendored).
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
|
|
54
|
+
- `SELF_SKILLS` now includes `guild` — guildmaster's own affordance skill is
|
|
55
|
+
excluded from the canonical kit it supplies to siblings (like `teach` /
|
|
56
|
+
`onboard`), since it wraps the `guild` binary and is meaningless elsewhere.
|
|
57
|
+
|
|
58
|
+
### Fixed
|
|
59
|
+
|
|
60
|
+
## [0.4.0] - 2026-05-24
|
|
61
|
+
|
|
62
|
+
### Added
|
|
63
|
+
|
|
64
|
+
- **`guild overview`** — guildmaster's read-only skills-supplier overview surface
|
|
65
|
+
([#12](https://github.com/agentculture/guildmaster/issues/12)): the canonical
|
|
66
|
+
skill set + versions/origins, the `docs/skill-sources.md` ledger view, and
|
|
67
|
+
drift signals (unledgered skills, uncovered skills, per-agent kit gaps).
|
|
68
|
+
`--scope all` (default) and `--scope self <agent>`; markdown or `--json`.
|
|
69
|
+
Pure-Python, read-only — no `--apply`, no mutation, no LLM. Degrades
|
|
70
|
+
gracefully pre-cutover: when the ledger has no downstream column the verb
|
|
71
|
+
reports the canonical set and notes that drift activates after the
|
|
72
|
+
steward→guildmaster cutover. Skills-scoped only — does not reproduce
|
|
73
|
+
`steward overview`'s ecosystem relationship graph.
|
|
74
|
+
- **`guild show <path-or-suffix>`** — one agent's full config in one read-only
|
|
75
|
+
view ([#12](https://github.com/agentculture/guildmaster/issues/12)): the
|
|
76
|
+
detected system-prompt file (`CLAUDE.md` / `AGENTS.md` / `GEMINI.md`), the
|
|
77
|
+
parallel `culture.yaml`, and the `.claude/skills` index. Path mode or suffix
|
|
78
|
+
mode (resolved via `culture_server_yaml`). Target resolution happens once in
|
|
79
|
+
Python; the human view shells out to the vendored `agent-config` `show.sh`
|
|
80
|
+
(mirroring `steward show`), while `--json` emits a structured object (prompt
|
|
81
|
+
file + contents, parsed `culture.yaml`, skills index) built natively. Failure
|
|
82
|
+
output stays the structured `error:` / `hint:` shape. Inventory only — it
|
|
83
|
+
reports, it does not judge drift.
|
|
84
|
+
- **`agent-config` skill** vendored from steward (cite-don't-import) to back
|
|
85
|
+
`guild show`: `scripts/show.sh` + `data/backend-fingerprints.yaml` verbatim;
|
|
86
|
+
SKILL.md reframed for guildmaster's inventory role + `type: command`. Recorded
|
|
87
|
+
in `docs/skill-sources.md`; now part of the canonical skill set.
|
|
88
|
+
- `guild.skills.ledger.supplier_skills` / `consumer_map` — pure helpers that
|
|
89
|
+
read the supplier ledger (skills tracked + their consumers) for `overview`.
|
|
90
|
+
|
|
91
|
+
### Changed
|
|
92
|
+
|
|
93
|
+
- `VERBS` index + `README.md` + `CLAUDE.md` document the new inventory verbs and
|
|
94
|
+
the issue #12 division of labor (inventory → guildmaster; alignment judgment →
|
|
95
|
+
steward).
|
|
96
|
+
|
|
8
97
|
## [0.3.0] - 2026-05-24
|
|
9
98
|
|
|
10
99
|
### Added
|
|
@@ -106,6 +106,32 @@ asked for one; guildmaster fulfills the broadcast *role* via these two instead).
|
|
|
106
106
|
Going live is gated on the steward→guildmaster cutover (`docs/cutover.md`) — no
|
|
107
107
|
two live broadcasters.
|
|
108
108
|
|
|
109
|
+
**Inventory verbs — `overview` & `show` (the read-only surfaces).** guildmaster
|
|
110
|
+
owns the mesh's *inventory* surfaces per
|
|
111
|
+
[issue #12](https://github.com/agentculture/guildmaster/issues/12) — the
|
|
112
|
+
"what kit + config does an agent have?" view. The dividing rule from issue #12:
|
|
113
|
+
**inventory → guildmaster; judgment ("how do agents relate / are they aligned?")
|
|
114
|
+
→ steward.** Neither verb clones `steward overview`'s relationship graph.
|
|
115
|
+
|
|
116
|
+
- `guild overview [--scope all|self <agent>|mesh]` — the supplier view:
|
|
117
|
+
canonical skill set + versions/origins, the `docs/skill-sources.md` ledger,
|
|
118
|
+
and drift signals (uncovered skills, per-agent kit gaps). Pure-Python,
|
|
119
|
+
read-only, **no `--apply`**. Pre-cutover the ledger has no downstream column,
|
|
120
|
+
so `--scope all`/`self` drift is inactive and the verb says so (reads
|
|
121
|
+
whichever ledger is authoritative). `--scope mesh` is the ledger-free
|
|
122
|
+
alternative: it surveys every agent in the workspace
|
|
123
|
+
(`<workspace>/*/culture.yaml`) live off the filesystem and reports, per agent,
|
|
124
|
+
each canonical skill as current / **stale** (content fingerprint differs from
|
|
125
|
+
guildmaster's copy) / **missing** — answering "what's missing or stale, and
|
|
126
|
+
where" today. Still inventory only — no relationship graph.
|
|
127
|
+
- `guild show <path-or-suffix>` — one agent's full config: detected prompt file
|
|
128
|
+
(`CLAUDE.md` / `AGENTS.md` / `GEMINI.md`), parallel `culture.yaml`, and the
|
|
129
|
+
`.claude/skills` index. Thin wrapper that shells out to the vendored
|
|
130
|
+
`agent-config` skill's `show.sh` (cite-don't-import from steward), mirroring
|
|
131
|
+
`steward show`. Path mode or suffix mode (resolved via `culture_server_yaml`).
|
|
132
|
+
|
|
133
|
+
Both **report**; they do not flag or fix drift (that judgment is steward's lane).
|
|
134
|
+
|
|
109
135
|
**Backend:** guildmaster is a CLI *plus* an agent like steward, so the natural
|
|
110
136
|
fit is `backend: claude` with this `CLAUDE.md` as the runtime prompt and a
|
|
111
137
|
`culture.yaml` declaring the `guildmaster` agent suffix (steward's is
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: guild-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: guildmaster — an agent and CLI that manages skills for the AgentCulture mesh.
|
|
5
5
|
Project-URL: Homepage, https://github.com/agentculture/guildmaster
|
|
6
6
|
Project-URL: Issues, https://github.com/agentculture/guildmaster/issues
|
|
@@ -94,6 +94,34 @@ verification). After: **one command** propagates a skill set, or onboards a
|
|
|
94
94
|
sibling end-to-end. Going live is gated on the staged steward→guildmaster
|
|
95
95
|
cutover — see [`docs/cutover.md`](docs/cutover.md).
|
|
96
96
|
|
|
97
|
+
### Inventory verbs — `overview` & `show`
|
|
98
|
+
|
|
99
|
+
guildmaster owns the mesh's **inventory** surfaces (the read-only "what kit +
|
|
100
|
+
config does an agent have?" view) per
|
|
101
|
+
[issue #12](https://github.com/agentculture/guildmaster/issues/12). Both are
|
|
102
|
+
read-only — no `--apply`, no mutation, no drift verdict (judgment stays with
|
|
103
|
+
`steward overview` / `steward doctor`).
|
|
104
|
+
|
|
105
|
+
| Verb | What it does |
|
|
106
|
+
|------|--------------|
|
|
107
|
+
| `guild overview [--scope all\|self <agent>\|mesh]` | The supplier view: the canonical skill set + versions/origins, the `docs/skill-sources.md` ledger, and drift signals (uncovered skills, per-agent kit gaps). Feeds `teach` / `onboard`. `--scope mesh` instead surveys every agent's vendored skills live off the filesystem and flags what's **missing**/**stale** per agent. |
|
|
108
|
+
| `guild show <path-or-suffix>` | One agent's full config in one view — its detected prompt file (`CLAUDE.md` / `AGENTS.md` / `GEMINI.md`), its parallel `culture.yaml`, and its `.claude/skills` index. |
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
uv run guild overview # whole ledger + canonical set
|
|
112
|
+
uv run guild overview --scope self daria # one agent's kit + gaps
|
|
113
|
+
uv run guild overview --scope mesh # live survey: every agent's skills + missing/stale
|
|
114
|
+
uv run guild show ../culture # config by path
|
|
115
|
+
uv run guild show daria # config by registered suffix
|
|
116
|
+
uv run guild show ../culture --json # structured config object
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
`guild show` resolves a registered suffix via the Culture server manifest
|
|
120
|
+
(`culture_server_yaml` in `.claude/skills.local.yaml`); pass an explicit
|
|
121
|
+
directory path to skip the lookup. Pre-cutover the ledger is still a
|
|
122
|
+
consumer-side view with no downstream column, so `overview`'s drift signals
|
|
123
|
+
activate only after the steward→guildmaster cutover — the verb says so plainly.
|
|
124
|
+
|
|
97
125
|
## Develop
|
|
98
126
|
|
|
99
127
|
```bash
|