guild-cli 0.20.0__tar.gz → 0.20.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.
Files changed (129) hide show
  1. {guild_cli-0.20.0 → guild_cli-0.20.2}/.eidetic/memory/guildmaster__public.jsonl +9 -6
  2. {guild_cli-0.20.0 → guild_cli-0.20.2}/CHANGELOG.md +64 -0
  3. {guild_cli-0.20.0 → guild_cli-0.20.2}/PKG-INFO +1 -1
  4. {guild_cli-0.20.0 → guild_cli-0.20.2}/docs/skill-sources.md +12 -12
  5. {guild_cli-0.20.0 → guild_cli-0.20.2}/pyproject.toml +1 -1
  6. {guild_cli-0.20.0 → guild_cli-0.20.2}/uv.lock +1 -1
  7. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/agent-config/SKILL.md +0 -0
  8. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
  9. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/agent-config/scripts/show.sh +0 -0
  10. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/ask-colleague/SKILL.md +0 -0
  11. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
  12. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/ask-colleague/prompts/review.md +0 -0
  13. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/ask-colleague/prompts/write.md +0 -0
  14. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
  15. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  16. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  17. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/challenge/SKILL.md +0 -0
  18. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/challenge/scripts/challenge.sh +0 -0
  19. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/cicd/SKILL.md +0 -0
  20. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  21. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  22. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  23. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  24. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  25. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/communicate/SKILL.md +0 -0
  26. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  27. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  28. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  29. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  30. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
  31. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  32. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/deviate/SKILL.md +0 -0
  33. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/deviate/scripts/deviate.sh +0 -0
  34. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  35. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  36. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/guild/SKILL.md +0 -0
  37. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/guild/scripts/configure-repo.sh +0 -0
  38. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/guild/scripts/create.sh +0 -0
  39. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/guild/scripts/overview.sh +0 -0
  40. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/onboard/SKILL.md +0 -0
  41. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/onboard/scripts/onboard.sh +0 -0
  42. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/outsource/SKILL.md +0 -0
  43. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/outsource/prompts/explore.md +0 -0
  44. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/outsource/prompts/review.md +0 -0
  45. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/outsource/prompts/write.md +0 -0
  46. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/outsource/scripts/outsource.sh +0 -0
  47. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
  48. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
  49. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/recall/SKILL.md +0 -0
  50. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/recall/scripts/recall.sh +0 -0
  51. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/remember/SKILL.md +0 -0
  52. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/remember/scripts/remember.sh +0 -0
  53. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/run-tests/SKILL.md +0 -0
  54. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/run-tests/scripts/test.sh +0 -0
  55. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/scope/SKILL.md +0 -0
  56. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/scope/scripts/scope.sh +0 -0
  57. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/sonarclaude/SKILL.md +0 -0
  58. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  59. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  60. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  61. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/summarize-delivery/SKILL.md +0 -0
  62. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/summarize-delivery/scripts/summarize-delivery.sh +0 -0
  63. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/teach/SKILL.md +0 -0
  64. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/teach/scripts/teach.sh +0 -0
  65. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/think/SKILL.md +0 -0
  66. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/think/scripts/think.sh +0 -0
  67. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/version-bump/SKILL.md +0 -0
  68. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills/version-bump/scripts/bump.py +0 -0
  69. {guild_cli-0.20.0 → guild_cli-0.20.2}/.claude/skills.local.yaml.example +0 -0
  70. {guild_cli-0.20.0 → guild_cli-0.20.2}/.devague/frames/guildmaster-ships-teach-and-onboard-two-agent-firs.json +0 -0
  71. {guild_cli-0.20.0 → guild_cli-0.20.2}/.devague/plans/guildmaster-ships-teach-and-onboard-two-agent-firs.json +0 -0
  72. {guild_cli-0.20.0 → guild_cli-0.20.2}/.eidetic/memory/default__public.jsonl +0 -0
  73. {guild_cli-0.20.0 → guild_cli-0.20.2}/.flake8 +0 -0
  74. {guild_cli-0.20.0 → guild_cli-0.20.2}/.github/workflows/publish.yml +0 -0
  75. {guild_cli-0.20.0 → guild_cli-0.20.2}/.github/workflows/tests.yml +0 -0
  76. {guild_cli-0.20.0 → guild_cli-0.20.2}/.gitignore +0 -0
  77. {guild_cli-0.20.0 → guild_cli-0.20.2}/.markdownlint-cli2.yaml +0 -0
  78. {guild_cli-0.20.0 → guild_cli-0.20.2}/CLAUDE.md +0 -0
  79. {guild_cli-0.20.0 → guild_cli-0.20.2}/LICENSE +0 -0
  80. {guild_cli-0.20.0 → guild_cli-0.20.2}/README.md +0 -0
  81. {guild_cli-0.20.0 → guild_cli-0.20.2}/culture.yaml +0 -0
  82. {guild_cli-0.20.0 → guild_cli-0.20.2}/docs/cutover.md +0 -0
  83. {guild_cli-0.20.0 → guild_cli-0.20.2}/docs/onboarding/reachy-mini-mcp.json +0 -0
  84. {guild_cli-0.20.0 → guild_cli-0.20.2}/docs/plans/2026-05-24-guildmaster-ships-teach-and-onboard-two-agent-firs.md +0 -0
  85. {guild_cli-0.20.0 → guild_cli-0.20.2}/docs/specs/2026-05-24-guildmaster-ships-teach-and-onboard-two-agent-firs.md +0 -0
  86. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/__init__.py +0 -0
  87. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/__main__.py +0 -0
  88. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/__init__.py +0 -0
  89. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_commands/__init__.py +0 -0
  90. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_commands/_broadcast.py +0 -0
  91. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_commands/_provision_template.py +0 -0
  92. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_commands/create.py +0 -0
  93. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_commands/explain.py +0 -0
  94. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_commands/learn.py +0 -0
  95. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_commands/onboard.py +0 -0
  96. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_commands/overview.py +0 -0
  97. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_commands/show.py +0 -0
  98. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_commands/teach.py +0 -0
  99. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_commands/whoami.py +0 -0
  100. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_errors.py +0 -0
  101. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_output.py +0 -0
  102. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/cli/_repo.py +0 -0
  103. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/scaffold/__init__.py +0 -0
  104. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/scaffold/instantiate.py +0 -0
  105. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/skills/__init__.py +0 -0
  106. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/skills/identity.py +0 -0
  107. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/skills/ledger.py +0 -0
  108. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/skills/render.py +0 -0
  109. {guild_cli-0.20.0 → guild_cli-0.20.2}/guild/skills/sources.py +0 -0
  110. {guild_cli-0.20.0 → guild_cli-0.20.2}/sonar-project.properties +0 -0
  111. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/__init__.py +0 -0
  112. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_broadcast_post.py +0 -0
  113. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_cli.py +0 -0
  114. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_cli_create.py +0 -0
  115. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_cli_explain.py +0 -0
  116. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_cli_learn.py +0 -0
  117. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_cli_onboard.py +0 -0
  118. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_cli_overview.py +0 -0
  119. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_cli_show.py +0 -0
  120. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_cli_teach.py +0 -0
  121. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_cli_whoami.py +0 -0
  122. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_configure_repo_sonar.py +0 -0
  123. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_scaffold_instantiate.py +0 -0
  124. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_skills_convention.py +0 -0
  125. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_skills_identity.py +0 -0
  126. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_skills_ledger.py +0 -0
  127. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_skills_render.py +0 -0
  128. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_skills_sources.py +0 -0
  129. {guild_cli-0.20.0 → guild_cli-0.20.2}/tests/test_version_fallback.py +0 -0
@@ -1,12 +1,15 @@
1
1
  {"id": "league-of-agents-platform-created-2026-07-10", "hash": "f380d634b886b82f4384e756bbfc3c2ac06c649a0b9577ae3bc231ccc8584b3d", "content": "2026-07-10: guild create --apply provisioned public agentculture/league-of-agents-platform \u2014 the HOSTING layer that runs the league-of-agents arena online at https://league-of-agents.ai as a turn-based game for humans AND agents (fun + benchmark). It does not reimplement the arena; it runs it. Distinct lane from league-of-agents (the runtime) \u2014 do not conflate. Identifiers: command league-site, import pkg league_site, dist league-of-agents-platform (= repo token, so no --dist override), backend claude, public, full 14-skill kit. Four defining properties: (1) turn-based for humans+agents \u2014 one state projected into two faces via the agentfront contract; (2) works everywhere \u2014 polling is a legitimate client; (3) continuable \u2014 the arena's append-only event log with a stable state_hash IS the resume substrate, do not invent session storage; (4) safeguards vs overload \u2014 enforced safe capacity (queue or refuse, never degrade silently), price-aware S3 archival, cleanup of abandoned matches; the last two are destructive so dry-run by default. AWS-hosted; long-term storage is cloud: S3 for logs/replays (the arena's self-contained single-file HTML replay is a perfect S3 object, and archived matches must stay replayable straight from the bucket), MongoDB + Neo4j for live state and standings. Ledger registration = guildmaster PR #86 (v0.19.1, PATCH). Build brief = league-of-agents-platform#1. Cross-link ask = katvan#59. Closest repo-shape precedent is culture-tools: a Python CLI package plus a web app (site-astro/) in one repo, against the agentfront contract. Owed: Trusted Publisher on PyPI + TestPyPI, /init, backend reconcile (culture.yaml inherits backend colleague from the template while the CLAUDE.md seed prose says claude).", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "project", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "agent": "league-of-agents-platform", "pr": 86, "date": "2026-07-10"}, "created": "2026-07-10T03:58:39.269155+00:00", "last_recall": "2026-07-22T04:23:06.521693+00:00", "recall_count": 5, "links": ["guild-create-desc-350-char-limit"], "supersedes": null, "lifecycle": "active", "added_by": null}}
2
- {"id": "guild-create-desc-350-char-limit", "hash": "d39fd8769ee9db74d1dd5d0e728dbc446cfd979fafff781632bab7e4b3095d9f", "content": "GOTCHA x4 \u2014 guild create emits a clone that fails its OWN CI (2026-07-10, provisioning league-of-agents-platform; filed upstream as guildmaster issue #87). One class of bug: --desc and the repo token are untrusted input to a text transform whose output must satisfy the template's own CI, and the dry-run models none of it. Durable fix recommended in #87: a post-transform CI gate that runs the clone's lint + test jobs after the rename and before the genesis commit \u2014 it catches 2,3,4 and the next one; only 1 needs a separate guard. (1) --desc over 350 chars breaks gh repo create: GitHub caps repo descriptions at 350 chars; the dry-run prints a clean plan and full ledger diff, then --apply dies with 'GraphQL: Could not clone: Description cannot be more than 350 characters'. Benign because ATOMIC \u2014 it fails before the clone, so no repo, no clone dir, no ledger write; verify with gh repo view (expect Could not resolve), ls -d ../<repo>, git status --short docs/. Contrast agent-lifecycle, where a configure-repo abort mid-apply DID leave partial state and needed register_consumer recovery. Measure with: echo -n \"$DESC\" | wc -m. Long-form scope belongs in the build-brief issue, not --desc. (2) A repo token longer than the template's overflows flake8: the rename is culture-agent-template (22 chars) to the repo token; league-of-agents-platform is 25, the first sibling token longer than the template's own, so two lines just under flake8's 100-char limit spilled over and the genesis Tests run landed red. Every earlier sibling had a shorter token so the rename always SHORTENED these lines and the latent overflow never fired. It fires again for any token over 22 chars. (3) A bare URL in --desc fails the clone's markdownlint: --desc is injected verbatim into the README.md intro AND the CLAUDE.md seed; a bare https:// URL is MD034/no-bare-urls and the template's lint job runs markdownlint-cli2 '**/*.md'. Angle-bracket it. The right upstream fix is to autolink, not to refuse \u2014 naming your site in your description is reasonable. (4) THE CONSEQUENTIAL ONE \u2014 --command different from the repo token fails the rubric gate: teken cli doctor --strict's explain_self check runs '<console-script> explain <console-script>'. The explain catalog keys its root entry by the REPO TOKEN (what the rename tracks) while --command retargets only the [project.scripts] entry-point key. When they differ you get 'FAIL explain_self: explain league-site exit=1', 25/26 checks, and the lint job goes red. Evidence this is a recurring MANUAL repair: every sibling whose command differs from its token carries BOTH root keys, hand-added \u2014 reachy-mini-cli (reachy), discord-bot-cli (discord), jetson-ai-lab-cli (jlab), dgx-spark-cli (spark), unsloth-cli (sloth). Six repos, six identical hand-fixes. Fix: guild create should add the console-script alias to the catalog root when --command differs from the token; it is a no-op when they are equal, so the byte-identical no-override guarantee holds. So the --command retarget gap is NOT merely cosmetic \u2014 CI enforces the catalog. Docstrings and learn prose are a softer, separate call.", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "gotcha", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "tool": "guild create", "issue": 87, "date": "2026-07-10"}, "created": "2026-07-10T04:08:22.598281+00:00", "last_recall": "2026-07-22T04:23:06.521693+00:00", "recall_count": 4, "links": ["league-of-agents-platform-created-2026-07-10"], "supersedes": null, "lifecycle": "active", "added_by": null}}
3
- {"id": "org-created-private-2026-07-10", "hash": "aa3a32ca4e097147695076329d3b04b616826cf5eb5aa6a203b91556e80b7ead", "content": "2026-07-10: guild create --apply provisioned PRIVATE agentculture/org \u2014 the AgentCulture org site: source of the web presence published to AgentCulture.org, REPLACING the deleted landing-page repo (deleted outright, never registered in the ledger, no redirect, no surviving local checkout \u2014 no content migration, the site starts fresh). Identifiers: command = pkg = dist = repo token org, backend claude. FIRST no-PyPI sibling: the user asked for no PyPI package, and guild create has no flag for it, so the PyPI lane was stripped post-create as operator-side provisioning (NOT product hand-building): deleted publish.yml, dropped the vendored pypi-maintainer skill + its row in org docs/skill-sources.md, reworded README baseline bullet + version-check comment; org is intentionally excluded from guildmaster pypi-maintainer ledger row WITH an explicit note so the gap reads as intent. TWO OPERATIONAL FACTS: (1) the genesis push fires one doomed Publish-to-PyPI run before you can strip it \u2014 completed red before it could be cancelled, one-time and harmless; (2) main-requires-PR ruleset is active on private repos (paid plan), so the post-create fix could NOT be pushed to main directly \u2014 it needed branch + version bump (org 0.4.0\u21920.4.1) + PR: landed as org#1 (merged), which also means the build brief landed at org#2 (same slot-shift as league-of-agents). Ledger registration = guildmaster PR #88 (v0.19.2, PATCH). Owed: /init, backend reconcile (template culture.yaml ships backend colleague vs seed prose claude), site stack + IA proposal on org#2, deploy workflow (Pages/S3/Cloudflare \u2014 private repo, public site) + operator-owned DNS cutover for AgentCulture.org. Repo-shape precedent for the brief = culture-tools (CLI + site dir in one repo).", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "project", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "agent": "org", "pr": 88, "date": "2026-07-10"}, "created": "2026-07-10T15:08:06.175651+00:00", "last_recall": "2026-07-22T04:23:06.521693+00:00", "recall_count": 3, "links": ["league-of-agents-platform-created-2026-07-10", "guild-create-desc-350-char-limit"], "supersedes": null, "lifecycle": "active", "added_by": null}}
4
- {"id": "guild-create-seeds-sonar-token-2026-07-10", "hash": "0cefcc3f176f52199c30273f51cbc74271e20c6921caa45115b41e2ffe87c1b6", "content": "Fixed 2026-07-10, guildmaster PR #89 (v0.19.3). guild create's configure-repo.sh step 4 used to create the new sibling's SONAR_TOKEN repo secret EMPTY. The culture-agent-template tests.yml gates its SonarCloud step on env.SONAR_TOKEN != '', so an empty secret means SonarCloud NEVER runs on that repo, silently \u2014 and the operator had been pasting the token into each new repo's GitHub UI by hand. The fix: step 4 now seeds the secret from the operator's own exported $SONAR_TOKEN, passed on STDIN not argv (the process table is world-readable). When $SONAR_TOKEN is unset it still writes the empty placeholder but WARNS to stderr with the exact gh secret set command to fix it. An already-present secret is NEVER clobbered (the value in GitHub wins); a whitespace-only token is treated as absent. Test: tests/test_configure_repo_sonar.py runs the REAL configure-repo.sh in --apply against a fake gh on PATH (no network) covering seed-from-env, empty+warn, never-clobber, whitespace-as-absent. Reusable pattern for testing shell scripts guildmaster ships: fake gh echoes benign responses for api and secret list and logs secret set stdin; make api .../rulesets echo the ruleset name so the script's already-present branch skips the heredoc create. GOTCHA for backfilling live repos: because the fix (correctly) never clobbers an existing secret, re-running configure-repo.sh does NOT fix a repo that already has the empty placeholder \u2014 that needs a direct 'printf %s \"$SONAR_TOKEN\" | gh secret set SONAR_TOKEN --repo <r>' override. league-of-agents-platform and org (created 2026-07-10) still carry empty secrets. Distinct still-OPEN sibling bug in the same area: cicd's pr-status.sh reads SonarCloud ANONYMOUSLY (no Authorization header, no curl -f), so for PRIVATE projects it gets HTTP 404 and reports 'Quality Gate UNKNOWN, 0 issues, 0 hotspots' \u2014 a false clean \u2014 and workflow.sh await only greps for the literal 'Quality Gate ERROR', so a missing/unreadable gate reads as PASS. Not fixed yet (operator chose the create-flow fix, option B).", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "project", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "pr": 89, "date": "2026-07-10"}, "created": "2026-07-10T15:49:28.579056+00:00", "last_recall": "2026-07-22T04:23:06.521693+00:00", "recall_count": 3, "links": ["league-of-agents-platform-created-2026-07-10"], "supersedes": null, "lifecycle": "active", "added_by": null}}
5
- {"id": "learn-cli-created-2026-07-10", "hash": "0256e26f7cfa603ba14d7ec8339d4a1187ac9e533af001818b7902d63dee04d8", "content": "2026-07-10: guild create --apply provisioned public agentculture/learn-cli \u2014 the mesh's LEARNING FRONT: a CLI (command learn), an MCP server, and a web site over one product, where humans AND agents learn a subject step by step. It does NOT tutor; it fronts per-subject tutor CLIs \u2014 the same host-don't-reimplement shape league-of-agents-platform has with the arena runtime. Identifiers: command learn, import package learn, dist learn-cli (= repo token, no --dist override), backend claude, public, full 14-skill kit. First two subjects: french-cli (command french) and spanish-cli (command spanish) \u2014 public backend:colleague private-language-tutor CLIs (track progress, overview, advice, read stories, learn & practice written+spoken online from your phone), both already full-kit consumers. Not language-limited: culture-guide (PRIVATE \u2014 learn core AI concepts, build your first agents, create useful CLIs, adopt agent-first development patterns, i.e. learning to lead teams of agents) is the worked non-language subject the operator named. Design spine in build brief learn-cli#1: the SUBJECT-PLUGIN CONTRACT is the central design (define once so a third subject is a registration not a fork); the three faces (CLI/MCP/HTTP) should be agentfront surfaces derived from one registry so they cannot drift; cross-subject learner state = one profile/login spanning subjects. Parallel worth remembering: katvan aggregates sibling DOCS onto culture.dev, learn-cli aggregates sibling TUTORS onto a learning site. Ledger registration = guildmaster PR #90 (v0.19.4, PATCH). CLEAN GENESIS \u2014 first sibling created since the SONAR_TOKEN seeding fix (PR #89): the SONAR_TOKEN secret was seeded from the operator env at create time so SonarCloud RAN on the genesis commit (no manual paste), and genesis CI was fully green (lint/test/publish). The explain_self catalog-key bug that needed a follow-up on league-of-agents-platform did NOT fire here \u2014 KEY LESSON: it fires only when the command differs from the import PACKAGE (underscore form), e.g. league-site vs league_site, NOT when command differs from the repo token; here command==package==learn so the catalog root already resolves under the command name. learn-cli 0.4.0 PUBLISHED to production PyPI on the genesis push because a Trusted Publisher for the name was already registered, so no Trusted Publisher is owed (unusual for a new sibling); every push to main publishes so bump the version every PR. Owed: /init, backend reconcile (culture.yaml declares backend colleague with AGENTS.colleague.md while the CLAUDE.md seed prose may still say claude; both subject siblings run colleague). Open decisions parked in the brief: hosting (league-of-agents-platform/org/culture-tools precedents), model access (cloudai-cli/ec2bedrock-cli), progress storage (eidetic-cli/data-refinery-cli), and a culture.dev cross-link via katvan if it gets a public domain.", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "project", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "agent": "learn-cli", "pr": 90, "date": "2026-07-10"}, "created": "2026-07-10T16:31:19.593705+00:00", "last_recall": "2026-07-22T04:23:06.521693+00:00", "recall_count": 3, "links": ["league-of-agents-platform-created-2026-07-10", "guild-create-seeds-sonar-token-2026-07-10"], "supersedes": null, "lifecycle": "active", "added_by": null}}
6
- {"id": "sensibo-cli-created-public-2026-07-14", "hash": "ff78fd4ce2bb64b6cd1e1f67add5a36d95e2ae81da5504a9abc2b6e92205b53f", "content": "2026-07-14: guild create --apply provisioned PUBLIC agentculture/sensibo-cli \u2014 an agent + CLI for Sensibo smart-AC control at home. Three pillars from the operator: (1) control the AC, (2) collect every sensor reading LOCALLY, (3) set up automated conditions that drive the AC. Identity: repo token sensibo-cli, console command sensibo, import package sensibo, dist sensibo-cli on PyPI, backend claude. Ledger registration + the #87 catalog-alias fix shipped together as guildmaster PR #92 (v0.19.6, PATCH). CLEAN GENESIS: Sonar ran, Tests green, teken cli doctor --strict 26/26, 0.4.0 auto-published to PyPI (Trusted Publisher pre-registered). GOTCHA (benign, expected): the genesis push shows a FAILED Publish run alongside the successful one \u2014 the failure is on GitHub's own Initial commit (443ac83), which is still literally culture-agent-template, so it tries to publish the template dist. Not our clone; ignore it. Build brief = sensibo-cli#1, which deliberately parks TWO honest unknowns rather than guessing: (a) LOCALLY IS UNVERIFIED \u2014 Sensibo devices are cloud-connected and the documented surface is the cloud REST API (/api/v2 + account API key); if no LAN protocol exists, the honest design is poll-cloud + persist-to-a-local-store, and the README must NOT imply a local protocol it does not have; (b) Sensibo ALREADY ships Climate React (server-side threshold automation) + schedules, so the CLI must be explicit about which conditions run in the cloud vs which need the local daemon alive \u2014 a rule that silently dies when a laptop sleeps is worse than no rule. Safety constraint: this drives real compressors, so hysteresis / minimum-off-time to prevent short-cycling is a requirement, not a nicety. Unofficial community tool; Sensibo is a trademark of Sensibo Ltd (qodo-cli is the disclaimer precedent). Owed: /init in the new repo, backend reconcile.", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "note", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "tool": "guild create", "agent": "sensibo-cli", "pr": 92, "issue": 1, "date": "2026-07-14", "visibility_note": "public sibling"}, "created": "2026-07-14T13:01:42.860309+00:00", "last_recall": "2026-07-20T06:00:56.199297+00:00", "recall_count": 1, "links": ["guild-create-explain-catalog-alias-fix-2026-07-14", "guild-create-desc-350-char-limit"], "supersedes": null, "lifecycle": "active", "added_by": null}}
2
+ {"id": "guild-create-desc-350-char-limit", "hash": "d39fd8769ee9db74d1dd5d0e728dbc446cfd979fafff781632bab7e4b3095d9f", "content": "GOTCHA x4 \u2014 guild create emits a clone that fails its OWN CI (2026-07-10, provisioning league-of-agents-platform; filed upstream as guildmaster issue #87). One class of bug: --desc and the repo token are untrusted input to a text transform whose output must satisfy the template's own CI, and the dry-run models none of it. Durable fix recommended in #87: a post-transform CI gate that runs the clone's lint + test jobs after the rename and before the genesis commit \u2014 it catches 2,3,4 and the next one; only 1 needs a separate guard. (1) --desc over 350 chars breaks gh repo create: GitHub caps repo descriptions at 350 chars; the dry-run prints a clean plan and full ledger diff, then --apply dies with 'GraphQL: Could not clone: Description cannot be more than 350 characters'. Benign because ATOMIC \u2014 it fails before the clone, so no repo, no clone dir, no ledger write; verify with gh repo view (expect Could not resolve), ls -d ../<repo>, git status --short docs/. Contrast agent-lifecycle, where a configure-repo abort mid-apply DID leave partial state and needed register_consumer recovery. Measure with: echo -n \"$DESC\" | wc -m. Long-form scope belongs in the build-brief issue, not --desc. (2) A repo token longer than the template's overflows flake8: the rename is culture-agent-template (22 chars) to the repo token; league-of-agents-platform is 25, the first sibling token longer than the template's own, so two lines just under flake8's 100-char limit spilled over and the genesis Tests run landed red. Every earlier sibling had a shorter token so the rename always SHORTENED these lines and the latent overflow never fired. It fires again for any token over 22 chars. (3) A bare URL in --desc fails the clone's markdownlint: --desc is injected verbatim into the README.md intro AND the CLAUDE.md seed; a bare https:// URL is MD034/no-bare-urls and the template's lint job runs markdownlint-cli2 '**/*.md'. Angle-bracket it. The right upstream fix is to autolink, not to refuse \u2014 naming your site in your description is reasonable. (4) THE CONSEQUENTIAL ONE \u2014 --command different from the repo token fails the rubric gate: teken cli doctor --strict's explain_self check runs '<console-script> explain <console-script>'. The explain catalog keys its root entry by the REPO TOKEN (what the rename tracks) while --command retargets only the [project.scripts] entry-point key. When they differ you get 'FAIL explain_self: explain league-site exit=1', 25/26 checks, and the lint job goes red. Evidence this is a recurring MANUAL repair: every sibling whose command differs from its token carries BOTH root keys, hand-added \u2014 reachy-mini-cli (reachy), discord-bot-cli (discord), jetson-ai-lab-cli (jlab), dgx-spark-cli (spark), unsloth-cli (sloth). Six repos, six identical hand-fixes. Fix: guild create should add the console-script alias to the catalog root when --command differs from the token; it is a no-op when they are equal, so the byte-identical no-override guarantee holds. So the --command retarget gap is NOT merely cosmetic \u2014 CI enforces the catalog. Docstrings and learn prose are a softer, separate call.", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "gotcha", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "tool": "guild create", "issue": 87, "date": "2026-07-10"}, "created": "2026-07-10T04:08:22.598281+00:00", "last_recall": "2026-07-23T15:07:45.685204+00:00", "recall_count": 5, "links": ["league-of-agents-platform-created-2026-07-10"], "supersedes": null, "lifecycle": "active", "added_by": null}}
3
+ {"id": "org-created-private-2026-07-10", "hash": "aa3a32ca4e097147695076329d3b04b616826cf5eb5aa6a203b91556e80b7ead", "content": "2026-07-10: guild create --apply provisioned PRIVATE agentculture/org \u2014 the AgentCulture org site: source of the web presence published to AgentCulture.org, REPLACING the deleted landing-page repo (deleted outright, never registered in the ledger, no redirect, no surviving local checkout \u2014 no content migration, the site starts fresh). Identifiers: command = pkg = dist = repo token org, backend claude. FIRST no-PyPI sibling: the user asked for no PyPI package, and guild create has no flag for it, so the PyPI lane was stripped post-create as operator-side provisioning (NOT product hand-building): deleted publish.yml, dropped the vendored pypi-maintainer skill + its row in org docs/skill-sources.md, reworded README baseline bullet + version-check comment; org is intentionally excluded from guildmaster pypi-maintainer ledger row WITH an explicit note so the gap reads as intent. TWO OPERATIONAL FACTS: (1) the genesis push fires one doomed Publish-to-PyPI run before you can strip it \u2014 completed red before it could be cancelled, one-time and harmless; (2) main-requires-PR ruleset is active on private repos (paid plan), so the post-create fix could NOT be pushed to main directly \u2014 it needed branch + version bump (org 0.4.0\u21920.4.1) + PR: landed as org#1 (merged), which also means the build brief landed at org#2 (same slot-shift as league-of-agents). Ledger registration = guildmaster PR #88 (v0.19.2, PATCH). Owed: /init, backend reconcile (template culture.yaml ships backend colleague vs seed prose claude), site stack + IA proposal on org#2, deploy workflow (Pages/S3/Cloudflare \u2014 private repo, public site) + operator-owned DNS cutover for AgentCulture.org. Repo-shape precedent for the brief = culture-tools (CLI + site dir in one repo).", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "project", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "agent": "org", "pr": 88, "date": "2026-07-10"}, "created": "2026-07-10T15:08:06.175651+00:00", "last_recall": "2026-07-23T15:07:45.685204+00:00", "recall_count": 4, "links": ["league-of-agents-platform-created-2026-07-10", "guild-create-desc-350-char-limit"], "supersedes": null, "lifecycle": "active", "added_by": null}}
4
+ {"id": "guild-create-seeds-sonar-token-2026-07-10", "hash": "0cefcc3f176f52199c30273f51cbc74271e20c6921caa45115b41e2ffe87c1b6", "content": "Fixed 2026-07-10, guildmaster PR #89 (v0.19.3). guild create's configure-repo.sh step 4 used to create the new sibling's SONAR_TOKEN repo secret EMPTY. The culture-agent-template tests.yml gates its SonarCloud step on env.SONAR_TOKEN != '', so an empty secret means SonarCloud NEVER runs on that repo, silently \u2014 and the operator had been pasting the token into each new repo's GitHub UI by hand. The fix: step 4 now seeds the secret from the operator's own exported $SONAR_TOKEN, passed on STDIN not argv (the process table is world-readable). When $SONAR_TOKEN is unset it still writes the empty placeholder but WARNS to stderr with the exact gh secret set command to fix it. An already-present secret is NEVER clobbered (the value in GitHub wins); a whitespace-only token is treated as absent. Test: tests/test_configure_repo_sonar.py runs the REAL configure-repo.sh in --apply against a fake gh on PATH (no network) covering seed-from-env, empty+warn, never-clobber, whitespace-as-absent. Reusable pattern for testing shell scripts guildmaster ships: fake gh echoes benign responses for api and secret list and logs secret set stdin; make api .../rulesets echo the ruleset name so the script's already-present branch skips the heredoc create. GOTCHA for backfilling live repos: because the fix (correctly) never clobbers an existing secret, re-running configure-repo.sh does NOT fix a repo that already has the empty placeholder \u2014 that needs a direct 'printf %s \"$SONAR_TOKEN\" | gh secret set SONAR_TOKEN --repo <r>' override. league-of-agents-platform and org (created 2026-07-10) still carry empty secrets. Distinct still-OPEN sibling bug in the same area: cicd's pr-status.sh reads SonarCloud ANONYMOUSLY (no Authorization header, no curl -f), so for PRIVATE projects it gets HTTP 404 and reports 'Quality Gate UNKNOWN, 0 issues, 0 hotspots' \u2014 a false clean \u2014 and workflow.sh await only greps for the literal 'Quality Gate ERROR', so a missing/unreadable gate reads as PASS. Not fixed yet (operator chose the create-flow fix, option B).", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "project", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "pr": 89, "date": "2026-07-10"}, "created": "2026-07-10T15:49:28.579056+00:00", "last_recall": "2026-07-23T15:07:45.685204+00:00", "recall_count": 4, "links": ["league-of-agents-platform-created-2026-07-10"], "supersedes": null, "lifecycle": "active", "added_by": null}}
5
+ {"id": "learn-cli-created-2026-07-10", "hash": "0256e26f7cfa603ba14d7ec8339d4a1187ac9e533af001818b7902d63dee04d8", "content": "2026-07-10: guild create --apply provisioned public agentculture/learn-cli \u2014 the mesh's LEARNING FRONT: a CLI (command learn), an MCP server, and a web site over one product, where humans AND agents learn a subject step by step. It does NOT tutor; it fronts per-subject tutor CLIs \u2014 the same host-don't-reimplement shape league-of-agents-platform has with the arena runtime. Identifiers: command learn, import package learn, dist learn-cli (= repo token, no --dist override), backend claude, public, full 14-skill kit. First two subjects: french-cli (command french) and spanish-cli (command spanish) \u2014 public backend:colleague private-language-tutor CLIs (track progress, overview, advice, read stories, learn & practice written+spoken online from your phone), both already full-kit consumers. Not language-limited: culture-guide (PRIVATE \u2014 learn core AI concepts, build your first agents, create useful CLIs, adopt agent-first development patterns, i.e. learning to lead teams of agents) is the worked non-language subject the operator named. Design spine in build brief learn-cli#1: the SUBJECT-PLUGIN CONTRACT is the central design (define once so a third subject is a registration not a fork); the three faces (CLI/MCP/HTTP) should be agentfront surfaces derived from one registry so they cannot drift; cross-subject learner state = one profile/login spanning subjects. Parallel worth remembering: katvan aggregates sibling DOCS onto culture.dev, learn-cli aggregates sibling TUTORS onto a learning site. Ledger registration = guildmaster PR #90 (v0.19.4, PATCH). CLEAN GENESIS \u2014 first sibling created since the SONAR_TOKEN seeding fix (PR #89): the SONAR_TOKEN secret was seeded from the operator env at create time so SonarCloud RAN on the genesis commit (no manual paste), and genesis CI was fully green (lint/test/publish). The explain_self catalog-key bug that needed a follow-up on league-of-agents-platform did NOT fire here \u2014 KEY LESSON: it fires only when the command differs from the import PACKAGE (underscore form), e.g. league-site vs league_site, NOT when command differs from the repo token; here command==package==learn so the catalog root already resolves under the command name. learn-cli 0.4.0 PUBLISHED to production PyPI on the genesis push because a Trusted Publisher for the name was already registered, so no Trusted Publisher is owed (unusual for a new sibling); every push to main publishes so bump the version every PR. Owed: /init, backend reconcile (culture.yaml declares backend colleague with AGENTS.colleague.md while the CLAUDE.md seed prose may still say claude; both subject siblings run colleague). Open decisions parked in the brief: hosting (league-of-agents-platform/org/culture-tools precedents), model access (cloudai-cli/ec2bedrock-cli), progress storage (eidetic-cli/data-refinery-cli), and a culture.dev cross-link via katvan if it gets a public domain.", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "project", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "agent": "learn-cli", "pr": 90, "date": "2026-07-10"}, "created": "2026-07-10T16:31:19.593705+00:00", "last_recall": "2026-07-23T15:07:45.685204+00:00", "recall_count": 4, "links": ["league-of-agents-platform-created-2026-07-10", "guild-create-seeds-sonar-token-2026-07-10"], "supersedes": null, "lifecycle": "active", "added_by": null}}
6
+ {"id": "sensibo-cli-created-public-2026-07-14", "hash": "ff78fd4ce2bb64b6cd1e1f67add5a36d95e2ae81da5504a9abc2b6e92205b53f", "content": "2026-07-14: guild create --apply provisioned PUBLIC agentculture/sensibo-cli \u2014 an agent + CLI for Sensibo smart-AC control at home. Three pillars from the operator: (1) control the AC, (2) collect every sensor reading LOCALLY, (3) set up automated conditions that drive the AC. Identity: repo token sensibo-cli, console command sensibo, import package sensibo, dist sensibo-cli on PyPI, backend claude. Ledger registration + the #87 catalog-alias fix shipped together as guildmaster PR #92 (v0.19.6, PATCH). CLEAN GENESIS: Sonar ran, Tests green, teken cli doctor --strict 26/26, 0.4.0 auto-published to PyPI (Trusted Publisher pre-registered). GOTCHA (benign, expected): the genesis push shows a FAILED Publish run alongside the successful one \u2014 the failure is on GitHub's own Initial commit (443ac83), which is still literally culture-agent-template, so it tries to publish the template dist. Not our clone; ignore it. Build brief = sensibo-cli#1, which deliberately parks TWO honest unknowns rather than guessing: (a) LOCALLY IS UNVERIFIED \u2014 Sensibo devices are cloud-connected and the documented surface is the cloud REST API (/api/v2 + account API key); if no LAN protocol exists, the honest design is poll-cloud + persist-to-a-local-store, and the README must NOT imply a local protocol it does not have; (b) Sensibo ALREADY ships Climate React (server-side threshold automation) + schedules, so the CLI must be explicit about which conditions run in the cloud vs which need the local daemon alive \u2014 a rule that silently dies when a laptop sleeps is worse than no rule. Safety constraint: this drives real compressors, so hysteresis / minimum-off-time to prevent short-cycling is a requirement, not a nicety. Unofficial community tool; Sensibo is a trademark of Sensibo Ltd (qodo-cli is the disclaimer precedent). Owed: /init in the new repo, backend reconcile.", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "note", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "tool": "guild create", "agent": "sensibo-cli", "pr": 92, "issue": 1, "date": "2026-07-14", "visibility_note": "public sibling"}, "created": "2026-07-14T13:01:42.860309+00:00", "last_recall": "2026-07-23T15:07:45.685204+00:00", "recall_count": 2, "links": ["guild-create-explain-catalog-alias-fix-2026-07-14", "guild-create-desc-350-char-limit"], "supersedes": null, "lifecycle": "active", "added_by": null}}
7
7
  {"id": "guild-create-explain-catalog-alias-fix-2026-07-14", "hash": "a58f29317f035d52c7e8640976124cd1d8101bc189ed8be987c6d143f71ff6a9", "content": "FIXED 2026-07-14 (guildmaster 0.19.6, PR #92) \u2014 guildmaster issue #87 item 4, the explain-catalog root alias, THE consequential guild create gotcha. THE BUG: culture-agent-template keys its explain catalog root by the REPO TOKEN \u2014 (\"<repo-token>\",): _ROOT in <pkg>/explain/catalog.py \u2014 because the global rename is all that normally touches it. But the clone's own lint gate, `teken cli doctor --strict`, runs its explain_self check as `<console-script> explain <console-script>`. When --command is retargeted away from the repo token, that lookup has NO catalog entry, explain exits 1, and the genesis Tests run lands RED. SIX siblings carried the identical alias, hand-added after the fact: reachy-mini-cli, discord-bot-cli, jetson-ai-lab-cli, dgx-spark-cli, unsloth-cli, league-of-agents-platform. KEY CORRECTION to the earlier learn-cli memory, which claimed the trigger was command != pkg (underscore form): WRONG. The trigger is command != REPO TOKEN. learn-cli passed CI by ACCIDENT, not by rule \u2014 the template ships a real `learn` VERB, so (\"learn\",) already existed as a catalog key and `learn explain learn` resolved to the VERB's docs instead of the root. Verified empirically by running teken cli doctor --strict against the learn-cli checkout. THE FIX: guild/scaffold/instantiate.py::_alias_explain_root, called from _retarget_command (which now takes pkg). It inserts (\"<command>\",): _ROOT immediately after the repo-token line, reusing whatever symbol that line binds. TWO GUARDS: (1) skip when (\"<command>\",) is ALREADY a catalog key \u2014 a command can legitimately collide with a real verb (the learn case), and a duplicate dict key would silently SHADOW that verb's own docs; (2) only called when command != repo_token, so the byte-identical plain-rename guarantee holds. Degrades to a no-op if the catalog or anchor line is absent. The dry-run plan now lists the alias as an explicit step, so it is visible before --apply. FIRST CLEAN RESULT: sensibo-cli (command sensibo, token sensibo-cli) is the first command-retargeted clone to pass its own CI unpatched \u2014 26/26 strict checks including `PASS explain_self: explain sensibo produced 932 chars`. NOTE the other #87 items are still OPEN: --desc >350 chars kills gh repo create; repo token >22 chars overflows flake8 E501; a bare URL in --desc trips MD034. The durable fix for all of them remains a post-transform CI gate.", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "gotcha", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "tool": "guild create", "issue": 87, "pr": 92, "version": "0.19.6", "date": "2026-07-14"}, "created": "2026-07-14T13:01:59.652794+00:00", "last_recall": "2026-07-22T04:23:06.521693+00:00", "recall_count": 2, "links": ["sensibo-cli-created-public-2026-07-14", "guild-create-desc-350-char-limit", "learn-cli-created-public"], "supersedes": null, "lifecycle": "active", "added_by": null}}
8
8
  {"id": "shell-cli-created-public", "hash": "f08e967ec5bf17f97343b8e4fc669c6060355a42765319980d6cc09600882a72", "content": "2026-07-18: guild create --apply provisioned PUBLIC agentculture/shell-cli \u2014 the agent + CLI that OWNS THE FILE-AND-SHELL TOOL SURFACE for AI coding agents, extracted out of colleague so the safe-execution layer is written once and imported, not reimplemented per host. Identity: repo token shell-cli, console command shell, import package shell, dist shell-cli (= repo token, no --dist override), public, backend claude(seed)/colleague(template culture.yaml). CLEAN GREEN GENESIS: Tests + Publish both success on the scaffold commit; SONAR_TOKEN seeded non-empty from operator env; shell-cli AUTO-PUBLISHED to production PyPI (Trusted Publisher pre-registered, HTTP 200) so NO Trusted Publisher owed. The #87/#92 explain-catalog root alias FIRED (command shell != repo token shell-cli) \u2014 catalog.py:122 got (\"shell\",): _ROOT so `shell explain shell` resolves and teken explain_self passed. SEAM EVIDENCE (surveyed live, not guessed): colleague/tools.py (1360 lines) declares its tool schemas flat; SIX are extractable \u2014 read_file, view_media, write_file, edit_file, list_dir, run_command (handlers ToolExecutor._read_file.._run_command, tools.py:813-1050) \u2014 vs colleague-specific culture/devague/subagent/subagents/memory/run_tests/check_test_integrity/finish/deepthink. TWO OPERATOR DECISIONS taken via AskUserQuestion, both recorded in brief shell-cli#1: (1) DEP POSTURE = pure-stdlib core + allow-list it as colleague's SECOND sanctioned base dep. This matters because colleague pins dependencies = [\"agentfront>=0.20.0\"] EXACTLY and tests/test_zero_deps.py is a GUARD TEST asserting that list is exactly that \u2014 so a naive `pip install shell-cli` into colleague FAILS CI. agentfront was allow-listed precisely because its core is pure-stdlib; shell-cli must clear the same bar. VERIFIED the extracted code already meets it: policy.py imports only hashlib/hmac/json/shlex/dataclasses/pathlib; tools.py only json/os/shlex/subprocess/sys/dataclasses/pathlib/typing. (2) EXTRACT SCOPE = EVERYTHING INCLUDING THE APPROVAL POLICY, not just primitives \u2014 _safe_path (root-escape refusal, tools.py:730), _refuse_clone_write (read-only clone tree, tools.py:737), _truncate (tools.py:724), _number_lines (tools.py:599), plus colleague/policy.py (400 lines: frozen Verdict, Policy.check_run_command at policy.py:205, check_file, file_checksum/verify_checksum, _first_token, policy-file loading). Rationale: primitives WITHOUT the safety model = thin wrapper with no value. colleague gates ONLY run_command (loop.py:895-903); all other tools pass through. REAL WORK IS DECOUPLING NOT COPYING \u2014 the files are stdlib-clean but NOT import-clean: tools.py does `from colleague import culture, devague, media, memory, testintegrity` (NOTE: **media** is imported for view_media, which IS an extracted tool \u2014 so media either travels or view_media stays; parked as an open question), and policy.py does `from colleague.configdir import resolve_file` + `from colleague.layers import sanitize_model`. ToolExecutor is ONE class mixing both halves so extraction = splitting it; encouragingly its constructor is already injection-shaped (spawn/batch_spawn/deepthink callables + allowlist, tools.py:669-723), so the natural shape is shell-cli owning a base executor and colleague extending it. CRITICAL POSTURE TO PRESERVE \u2014 GUARD, NOT SANDBOX: colleague's own comments are candid that the clone-exec guard is a best-effort substring/shlex check, bypassable by sh -c, pipelines, variable expansion and here-docs (\"a guard, not a sandbox\"; \"document rather than overclaim\"). A package NAMED shell-cli whose headline is safe execution will be READ as offering a sandbox \u2014 the brief explicitly forbids the extraction from silently upgrading that claim, and requires a stated threat model (protects against careless/accidental model behaviour, NOT adversarial). Real isolation (namespaces/containers/seccomp) is separately-scoped future work. Migration rule in the brief: colleague's change is COLLEAGUE'S TO MAKE \u2014 shell-cli PROPOSES via an issue, does not push. Ledger registration = guildmaster PR #98 (v0.19.10, PATCH), based on MAIN (not stacked \u2014 all prior ledger PRs #95/#96/#97 had merged, so the stacked-PR CI-skip gotcha did NOT apply; all checks ran and passed). Owed on the new repo: /init (CLAUDE.md still self-init seed), backend reconcile (culture.yaml backend colleague vs seed prose claude). Housekeeping: two git stashes hold pre-create memory-counter runtime churn (now stale \u2014 origin/main's ff-merge already moved those files).\n", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "decision", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "tool": "guild create", "agent": "shell-cli", "pr": 98, "issue": 1, "date": "2026-07-18", "visibility_note": "public sibling"}, "created": "2026-07-18T16:29:46.055321+00:00", "last_recall": "2026-07-20T06:00:56.199297+00:00", "recall_count": 1, "links": [], "supersedes": null, "lifecycle": "active", "added_by": null}}
9
9
  {"id": "guildmaster-embeddings-cli-created-public-2026-07-20", "hash": "6118037bcba38be5ace7c2e7367870cc391d6617a747bd5660f835d39d9f34d9", "content": "2026-07-20: guild create --apply provisioned PUBLIC agentculture/embeddings-cli \u2014 an agent + CLI that MAPS THE GEOMETRY OF MEANING produced by embedding models. Core reframe: study an embedding SPACE AS A SYSTEM, not individual vectors. A single embedding is near-uninterpretable (dimensions rarely map to clean human concepts); the space has measurable structure \u2014 semantic regions/clusters, neighborhoods and boundaries, recurring directions of meaning, dense/sparse/ambiguous areas, gaps, and differences between models/datasets/domains/versions. Moves the question from 'which documents are closest to this query?' to 'what kind of world does this embedding model create?'. Sketched verbs: survey corpus.jsonl / regions / neighbors <text> / directions discover / gaps / compare model-a model-b / map --html. Explicit NON-goal: assigning human-readable meaning to every dimension (unstable and misleading). SECOND ROLE: the deterministic tool surface for a SURVEYOR AGENT that runs experiments against the space (sample concepts, find clusters, PROPOSE region names, TEST names against independent examples, discover candidate directions, MEASURE whether they generalize, record evidence). Division of labor is the whole design: prose from the agent, numbers from the CLI, every claim traceable to a re-runnable command. Output artifact = an ATLAS (datasets+models used, representative points, hierarchical region maps, discovered directions, cluster/boundary evidence, coverage+density, model comparisons, known limitations) \u2014 the Atlas is NOT the space, it is an evidence-backed INTERPRETATION of it, and that distinction must be load-bearing in the data model. IDENTITY: repo token embeddings-cli, console command embeddings, import package embeddings, dist embeddings-cli (= repo token, no --dist override needed \u2014 operator confirmed mid-turn 'pypi project is embeddings-cli'), public, backend claude(seed)/colleague(template culture.yaml), 18-skill kit. CLEAN GREEN GENESIS: Tests + Publish both success on the scaffold commit; SONAR_TOKEN seeded non-empty from operator env; embeddings-cli 0.6.0 AUTO-PUBLISHED to production PyPI (Trusted Publisher pre-registered) so NO Trusted Publisher owed. The #87/#92 explain-catalog root alias FIRED (command embeddings != repo token embeddings-cli) \u2014 catalog.py:122 got (\"embeddings\",): _ROOT. THREE LOAD-BEARING DESIGN CONSTRAINTS parked in brief embeddings-cli#1 rather than guessed: (1) `gaps` IS THE RISKIEST VERB \u2014 a sparse area in a SURVEYED CORPUS is a gap in the CORPUS, not necessarily in what the model can represent; conflating them is the most damaging claim this tool could make, since 'the model has a blind spot here' is exactly what readers act on. Defensible version PROBES the region with generated/held-out inputs rather than inferring absence from silence. (2) `compare model-a model-b` HAS NO SHARED COORDINATE FRAME \u2014 different dimensionalities/scales, and cosine values from two models are not on the same ruler; comparison must be RELATIONAL (k-NN set overlap / rank correlation, CKA/RSA on a shared probe set, or explicit Procrustes alignment whose RESIDUAL is reported). Never emit a cross-model number that quietly assumes a shared frame. (3) PROJECTIONS AND CLUSTERINGS ARE PARAMETER-DEPENDENT ARTIFACTS \u2014 UMAP/t-SNE and k-means/HDBSCAN produce structures that look meaningful and shift with params/seeds; since the CLI is the REPRODUCIBLE half of the Surveyor loop, every measurement records seed+params and structural claims carry a stability measure (survives resampling / different seed / different algorithm). A region that exists only at one parameter setting is a finding about the parameters. OTHER PARKED UNKNOWNS: which backends ship first (model-gear's local embed gear at localhost:8002, Qwen/Qwen3-Embedding-0.6B \u2014 already eidetic recall's default \u2014 is the zero-cost start, making `compare` cheap; API providers add cost/rate-limits to an inherently BULK-embedding tool, so an on-disk cache keyed by (model, text-hash) is probably not optional); Atlas storage format + whether `map --html` should CONSUME storybook-cli rather than build a bespoke renderer (league-of-agents' single-file HTML replay is the other precedent); whether 'Surveyor' becomes the agent identity in culture.yaml or stays a role description. LANE BOUNDARIES stated in the brief: eidetic-cli owns the memory store and already does vector recall (--mode approximate, SAME embed gear) \u2014 embeddings-cli must NOT become a vector DB or retrieval engine; it is plausibly eidetic's EVALUATOR ('does the store's embedding model actually distinguish what recall needs distinguished?' = a good first real-world study). data-refinery-cli owns data quality in storage/retrieval (coverage is arguably a data-quality signal \u2014 state the boundary). model-gear hosts models, consume don't reimplement serving. coherence-cli owns info-quality JUDGMENT; measurement here, judgment there. Ledger registration = guildmaster PR #99 (v0.19.11, PATCH), based on MAIN not stacked (all prior ledger PRs merged), so all checks ran. Build brief = embeddings-cli#1 (no pre-seeded issue, so the brief landed as #1). Owed on the new repo: /init (CLAUDE.md still the self-init seed), backend reconcile (culture.yaml colleague vs seed prose claude).", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "note", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "tool": "guild create", "agent": "embeddings-cli", "pr": 99, "issue": 1, "version": "0.19.11", "date": "2026-07-20", "visibility_note": "public sibling"}, "created": "2026-07-20T06:05:11.999700+00:00", "last_recall": null, "recall_count": 0, "links": [], "supersedes": null, "lifecycle": "active", "added_by": null}}
10
10
  {"id": "evidence-cli-created-public-2026-07-22", "hash": "e95e644b88ece26c6cfe0e9835c61db18025b7774a76c42098777899acef691d", "content": "2026-07-22: `guild create --apply` provisioned PUBLIC agentculture/evidence-cli. Identifiers: command `evidence`, import package `evidence`, dist `evidence-cli` (= repo token, no --dist override), visibility public. WHAT IT IS: documents the EVIDENCE TRAIL behind a piece of work \u2014 request -> spec -> plan -> docs/code -> validations -> grade \u2014 and GRADES that trail across parameters into a final score. THE LOAD-BEARING HONESTY CONSTRAINT parked in brief #1: a high evidence grade means the trail is COMPLETE AND TRACEABLE, NOT that the work is CORRECT. Conflating them is how the tool does harm (teams produce paperwork to raise the number), so the constraint is on the OUTPUT CONTRACT wording, not a README disclaimer \u2014 'evidence completeness' is honest, 'quality score' is not. Same shape as embeddings-cli's corpus-gap != model-gap constraint. THREE MORE PARKED DESIGN QUESTIONS: (1) HARVESTER (find the trail from git/PRs/.devague frames/CI \u2014 zero friction, inferred links can be wrong) vs LEDGER (work declares evidence as it happens \u2014 accurate but needs adoption); likely MVP is harvest + operator attach, with inferred links MARKED as inferred. (2) ABSENT vs INAPPLICABLE evidence: 'no spec found' conflates no-spec-written, spec-exists-elsewhere, and didn't-need-one; needs SCOPE CALIBRATION (typo fix vs subsystem rewrite can't share a rubric) plus a first-class N/A distinct from missing. (3) The rubric must be DATA not code, VERSIONED (scores comparable only within a rubric version), decomposable, each sub-score CITING its artifact, and deterministic-or-disclosed. Candidate axes: completeness, traceability, specificity, validation strength, drift \u2014 the last two carry the real signal and are hardest. LANE BOUNDARIES: devague's summarize-delivery = planned-vs-actual for ONE workforce run (evidence-cli is any work item + grades); prove-cli = formal argument; coherence-cli = information quality; sonarclaude/qodo-cli/appsec = code quality; steward = AGENT alignment (evidence-cli grades a DELIVERY). REAL ADJACENCY TO RESOLVE EARLY: storybook-cli RENDERS what an agent did, evidence-cli ASSESSES it \u2014 clean composition is evidence produces the structured assessment and storybook renders it; settle before both grow a reporting surface. GENESIS: fully green (Tests + Publish), published 0.6.1 to production PyPI on the genesis push so NO Trusted Publisher is owed. It is a command-retargeted clone (`evidence` != repo token `evidence-cli`) so the explain-catalog root alias FIRED and it passed `teken cli doctor --strict` UNPATCHED \u2014 confirming the PR #92 fix. Ledger registration = guildmaster PR #100 (v0.20.0, MINOR per the multi-agent batch precedent), based on main, not stacked. Owed: /init, backend reconcile (template culture.yaml ships backend colleague + model pin while the CLAUDE.md seed says claude; both CLAUDE.md and AGENTS.colleague.md are on disk).", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "project", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "agent": "evidence-cli", "pr": 100, "date": "2026-07-22"}, "created": "2026-07-22T04:34:01.558357+00:00", "last_recall": null, "recall_count": 0, "links": ["callsmith-created-public-2026-07-22", "guild-create-explain-catalog-alias-fix-2026-07-14"], "supersedes": null, "lifecycle": "active", "added_by": null}}
11
11
  {"id": "callsmith-created-public-2026-07-22", "hash": "326a0ec438854ee654d99f04281468376557e828e0fea02b34627420e5ae42d6", "content": "2026-07-22: `guild create --apply` provisioned PUBLIC agentculture/callsmith. Identifiers: command = import package = dist = repo token `callsmith` \u2014 a PLAIN RENAME, so the clone is byte-identical to a no-override instantiation. WHAT IT IS: manages the LIFECYCLE OF INVOCATION MODELS. An invocation model = a small checkpoint finetuned to do exactly one thing: turn natural language into the correct invocation of ONE SPECIFIC CLI. Five-verb spine proposed in brief #1: forge (finetune) -> publish (Hugging Face) -> resolve (find the right model for this CLI+version) -> fetch (download/cache) -> invoke (text in, actual intended command out). Name is the thesis: a smith that forges callers. BASE MODEL VERIFIED (web-checked, not assumed): FunctionGemma is REAL \u2014 google/functiongemma-270m-it on HF, a Gemma 3 270M variant finetuned for function calling; text-only, 32k context, Gemma's 256k vocab explicitly optimized for JSON structures; Google positions it as 'a strong base for further training into custom, fast, private, local agents', i.e. callsmith is on the PAVED PATH. Finetuning supported via HF Transformers, UNSLOTH, Keras, NVIDIA NeMo; serving via LiteRT-LM, vLLM, MLX, llama.cpp, Ollama, Vertex AI, LM Studio. THE BIGGEST DESIGN CALL (brief #1): FunctionGemma natively emits STRUCTURED FUNCTION CALLS, not shell text, while the ask is 'the actual intended command text'. STRONG RECOMMENDATION: model emits a structured call against a SCHEMA, callsmith RENDERS the command string DETERMINISTICALLY \u2014 never have the 270M model emit raw shell text. Then an unknown verb/flag is a STRUCTURAL error you can detect rather than a plausible-looking wrong string, quoting/ordering bugs vanish into deterministic code, and you can validate against the real grammar before emitting. Plays directly to the JSON-friendly 256k vocab. CORPUS INSIGHT (the crux): hand-labelling (text -> invocation) pairs per CLI does not scale. But every AgentCulture sibling ships a MACHINE-READABLE self-description (explain catalog + argparse tree, enforced by `teken cli doctor --strict`) \u2014 so callsmith should ship a CORPUS GENERATOR: walk the target CLI's verb/flag surface, have a larger model paraphrase the NL side while the INVOCATION side stays ground truth derived from the actual grammar. Labels correct by construction. PARKED HONESTY CONSTRAINTS: (1) callsmith EMITS, it must NOT EXECUTE \u2014 execution is shell-cli's lane (confinement + approval policy + gated run_command); an invocation model is a hallucination-capable component producing executable text, so growing a --run flag would route around a safety boundary the mesh already built. (2) Evaluate on 'does it parse against the real grammar and pick the right verb/args', NEVER BLEU/exact-match \u2014 a textually-close command can be catastrophically wrong. (3) MODELS GO STALE SILENTLY: a model forged against guild 0.19 confidently emits flags 0.20 removed, so published models must declare CLI + version range and `resolve` must key on (CLI, version) and refuse/warn on mismatch. (4) Publishing a model PUBLISHES AN INTERFACE \u2014 a model finetuned on a private sibling's help text leaks that CLI's surface, so HF visibility must be explicit and default safe. (5) Gemma Terms of Use follow the derivative (pass terms downstream, state base model in the card) \u2014 get it right in `publish` from day one. (6) State the payoff: local 270M = near-zero cost/latency, so latency + cost + accuracy vs an HONEST BASELINE (frontier model given the CLI's --help in context) belong in acceptance criteria from the start \u2014 be able to discover early that it ISN'T worth it. LANE BOUNDARIES: DELEGATE forge to unsloth-cli (command `sloth`) rather than reimplement LoRA plumbing \u2014 Unsloth is an officially supported FunctionGemma finetuning path, so reimplementing is the obvious wrong turn. intern-cli is the ADJACENCY TO CONFIRM (both are small-local-model agents; intern wraps one small LM as a general embeddable agent, callsmith produces MANY narrow per-CLI models whose output is a command). model-gear/cloudai-cli/ec2bedrock-cli = serving general models; teken/agentfront = the self-description contract callsmith CONSUMES as corpus ground truth; embeddings-cli = possible ally if `resolve` becomes semantic. DEPENDENCY POSTURE: the template's runtime package has NO third-party deps; torch/transformers/unsloth are heavy, so put them behind OPTIONAL EXTRAS \u2014 a caller who only wants resolve+invoke against a cached model must not install a training stack. GENESIS: fully green (Tests + Publish), published 0.6.1 to production PyPI on the genesis push so NO Trusted Publisher is owed. Ledger registration = guildmaster PR #100 (v0.20.0, MINOR), based on main, not stacked. Owed: /init, backend reconcile (culture.yaml ships backend colleague + model pin vs the claude seed prose).", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "project", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "agent": "callsmith", "pr": 100, "date": "2026-07-22"}, "created": "2026-07-22T04:34:01.560508+00:00", "last_recall": null, "recall_count": 0, "links": ["evidence-cli-created-public-2026-07-22", "intern-cli-created-public-2026-07-17"], "supersedes": null, "lifecycle": "active", "added_by": null}}
12
- {"id": "guild-ledger-pr-empty-changelog-stub-2026-07-22", "hash": "d38979b3d173345c784bf473c9ab2dbf9791f3db1d97297ad448f6715f12828f", "content": "GOTCHA (found 2026-07-22 while opening guildmaster PR #100): a guildmaster ledger PR can ship with an EMPTY CHANGELOG ENTRY and nothing catches it. `python3 .claude/skills/version-bump/scripts/bump.py <level>` prepends a Keep-a-Changelog STUB with empty ### Added / ### Changed / ### Fixed sections that the author is expected to fill in by hand. The `version-check` CI job only asserts the version DIFFERS FROM MAIN \u2014 it does not look at CHANGELOG content \u2014 and markdownlint is happy with empty sections. PROOF: PR #99 (v0.19.11, embeddings-cli) MERGED TO MAIN with a completely empty 0.19.11 entry; the provisioning record survived only in the commit message, the PR body, and eidetic. Backfilled in PR #100. HABIT: after running bump.py, WRITE THE ENTRY before committing \u2014 the CHANGELOG is the only place the ledger history is readable without archaeology. Worth considering a real fix: extend version-check to fail when the new version's section has no non-empty subsection.", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "gotcha", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "pr": 100, "date": "2026-07-22"}, "created": "2026-07-22T04:34:01.570066+00:00", "last_recall": null, "recall_count": 0, "links": ["evidence-cli-created-public-2026-07-22"], "supersedes": null, "lifecycle": "active", "added_by": null}}
12
+ {"id": "guild-ledger-pr-empty-changelog-stub-2026-07-22", "hash": "d38979b3d173345c784bf473c9ab2dbf9791f3db1d97297ad448f6715f12828f", "content": "GOTCHA (found 2026-07-22 while opening guildmaster PR #100): a guildmaster ledger PR can ship with an EMPTY CHANGELOG ENTRY and nothing catches it. `python3 .claude/skills/version-bump/scripts/bump.py <level>` prepends a Keep-a-Changelog STUB with empty ### Added / ### Changed / ### Fixed sections that the author is expected to fill in by hand. The `version-check` CI job only asserts the version DIFFERS FROM MAIN \u2014 it does not look at CHANGELOG content \u2014 and markdownlint is happy with empty sections. PROOF: PR #99 (v0.19.11, embeddings-cli) MERGED TO MAIN with a completely empty 0.19.11 entry; the provisioning record survived only in the commit message, the PR body, and eidetic. Backfilled in PR #100. HABIT: after running bump.py, WRITE THE ENTRY before committing \u2014 the CHANGELOG is the only place the ledger history is readable without archaeology. Worth considering a real fix: extend version-check to fail when the new version's section has no non-empty subsection.", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "gotcha", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "pr": 100, "date": "2026-07-22"}, "created": "2026-07-22T04:34:01.570066+00:00", "last_recall": "2026-07-23T15:07:45.685204+00:00", "recall_count": 1, "links": ["evidence-cli-created-public-2026-07-22"], "supersedes": null, "lifecycle": "active", "added_by": null}}
13
+ {"id": "events-cli-created-public-2026-07-23", "hash": "5a972895e8f80a56456f1f709c3ab2f91b3c992fbb26825144ad5a806e61ca25", "content": "2026-07-23: guild create --apply provisioned PUBLIC agentculture/events-cli \u2014 an agent + CLI that runs and maintains a DOCKERISED ECLIPSE MOSQUITTO MQTT BROKER and fronts it through agentfront as CLI + HTTP API + MCP, so any app can import it, any service can call the API, and an agent or a human can publish/subscribe the same way. Identity: repo token events-cli, console command events, import package events, dist events-cli (= repo token default). CLEAN GREEN GENESIS: Tests + lint + Publish all passed, SONAR_TOKEN seeded from operator env, 'Protect main' ruleset applied, and events-cli 0.6.1 PUBLISHED to production PyPI on the genesis push because a Trusted Publisher was ALREADY registered \u2014 so NO Trusted Publisher is owed (unusual; consequence is every push to main publishes, so bump every PR). The #87 explain-catalog alias FIRED as designed (command 'events' != repo token 'events-cli'): catalog.py carries BOTH ('events-cli',) and ('events',) keyed to _ROOT, so the clone's own teken cli doctor --strict explain_self gate passed with no hand-patch \u2014 this is now the routine path, not an exception. Ledger registration = guildmaster PR #101 (v0.20.1, PATCH). PRE-SEEDED SPEC: the operator (OriNachum) had already filed a FULL requirements issue at events-cli#1 BEFORE provisioning \u2014 third instance of the slot-shift after league-of-agents and org \u2014 so guildmaster's build brief landed at #2 and was written to COMPLEMENT #1, not restate it. #1 is the requirements baseline and is strong: CloudEvents-compatible immutable envelope (id/type/source/time/schemaVersion/payload + correlationId, causationId, runId, trace context, producer identity, delivery attempt), declarative pipeline model (trigger + stages with accepts/completes/fails, timeouts, retry, dead-letter; pipelines coordinate EXTERNAL agents and do NOT execute code inside the service), Compose stack (Mosquitto + Events control service + persistent volumes + healthchecks), security defaults, 14 acceptance criteria, and explicit non-goals (no multi-broker, no k8s, no GUI, no arbitrary user code, NO exactly-once). DESIGN PRINCIPLE from #1, worth quoting: 'Mosquitto transports events, events-cli defines what they mean' \u2014 the public contract is deliberately TRANSPORT-INDEPENDENT; topic names are transport-level routing details, event types + envelopes are the stable public contract.", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "project", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "tool": "guild create", "agent": "events-cli", "pr": 101, "issue": 2, "date": "2026-07-23", "visibility_note": "public sibling"}, "created": "2026-07-23T15:17:09.232685+00:00", "last_recall": null, "recall_count": 0, "links": [], "supersedes": null, "lifecycle": "active", "added_by": null}}
14
+ {"id": "events-cli-brief-gaps-2026-07-23", "hash": "6abe5aeed63ffd95f2b6e0a8b285f509cddbe52ec14a07510792e05f0ef6b86f", "content": "2026-07-23, guildmaster build brief events-cli#2 \u2014 the three gaps in the operator's otherwise-strong events-cli#1 spec, worth reusing as a review lens for any 'front a service on several surfaces' sibling. (1) AGENTFRONT WAS NOT NAMED. The provisioning request said 'with agentfront' but #1 only says 'Events control service'. agentfront (ex-teken, ex-afi-cli) is an IMPORTABLE RUNTIME not a scaffolder: build one App, declare docs+tools ONCE, and it derives CLI (+learn affordance), MCP (deliberately minimal menu) and HTTP (markdown pages + sitemap) from that single registry, so THE SURFACES CANNOT DRIFT. CLI+HTTP are pure stdlib, zero third-party; MCP is behind the [mcp] extra and app.mcp_server() raises ModuleNotFoundError naming it. THE FOURTH SURFACE: the request names four consumers (human/CLI, agent/MCP, service/HTTP, ANY APP/import) and agentfront derives only THREE \u2014 'import events' is NOT an agentfront surface. Keep it honest by building the registry FROM the same core module the library exposes; if the registry is populated by separate adapters the import lane becomes a fourth thing that drifts, which is the exact failure agentfront removes. (2) THE HARD CONSTRAINT, and the most valuable thing in the brief: 'events watch' CANNOT be exposed verbatim on MCP or HTTP because A TOOL CALL MUST RETURN \u2014 a long-lived MQTT subscription blocks the agent's turn. The CLI is the ONLY one of the four surfaces that can stream forever, so 'an agent uses it the same way a human does' is not achievable by uniform exposure. Resolution to design in from the start, not retrofit: DURABLE SERVER-SIDE SUBSCRIPTIONS (named, persistent, owned by the caller's identity; the control service consumes into durable storage) + BOUNDED DRAIN with a cursor \u2014 'watch --since <cursor> --max N --timeout 30s' \u2014 identical on all surfaces; EVERY agent-facing tool needs non-infinite --max/--timeout defaults; streaming stays HTTP-only (SSE, or pass through Mosquitto's NATIVE WebSocket listener rather than reimplementing it). Key insight: this is THE SAME MACHINERY as #1's 'history survives a stack restart' criterion, so design cursor+replay+history together \u2014 bolting a cursor onto a streaming-only watch later is the expensive path. (3) MESH LANE BOUNDARIES. vs CULTURE is the real one: culture is the IRC agent mesh and already moves messages between agents, so events-cli is a SECOND messaging substrate \u2014 defensible but must be stated or the mesh grows two overlapping buses. Proposed split: culture = agent CONVERSATION (peer-to-peer, human-readable, presence-oriented); events-cli = machine EVENTS (typed immutable envelopes, correlation/causation, durable history, pipeline runs, app-to-app). vs DEVAGUE: #1's own motivating pipeline (task.requested -> scope.completed -> specification.ready -> implementation.completed -> validation.completed) is almost exactly the devague lifecycle (/scope -> /think -> /spec-to-plan -> /assign-to-workforce -> /summarize-delivery), and /deviate exists precisely because mid-run divergence has no transport \u2014 so devague is the likely FIRST CONSUMER and its stage names are a better first event vocabulary than a synthetic example. Also: do NOT build a bespoke store (eidetic-cli + data-refinery-cli own that lane); if 'events up' shells out to docker, check whether that belongs behind shell-cli rather than growing a second shell-confinement posture.", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "note", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "agent": "events-cli", "issue": 2, "date": "2026-07-23"}, "created": "2026-07-23T15:17:09.235060+00:00", "last_recall": null, "recall_count": 0, "links": ["events-cli-created-public-2026-07-23"], "supersedes": null, "lifecycle": "active", "added_by": null}}
15
+ {"id": "mosquitto-facts-for-events-cli-2026-07-23", "hash": "e9907d60de85d8fe898465434f0cf04aebc4808773e8d11f1c283b5d919e726d", "content": "2026-07-23, gathered for the events-cli build brief (events-cli#2) \u2014 Eclipse Mosquitto facts that make events-cli#1's security section much cheaper to satisfy than it reads, and that shape the data plane. (a) MOSQUITTO 2.0 ALREADY DEFAULTS THE WAY THE SPEC WANTS: with no listener configured it binds to the LOOPBACK INTERFACE ONLY, and allow_anonymous defaults to FALSE. So several of #1's 'security defaults' are 'do not override the upstream default', NOT 'build a hardening layer' \u2014 verify against the pinned version and say so in the generated mosquitto.conf. (b) THE DYNAMIC SECURITY PLUGIN (mosquitto_ctrl dynsec, Mosquitto 2.0+) is the right answer to #1's 'distinct identities + topic-level publish/subscribe permissions': it manages clients, groups and per-topic ACLs AT RUNTIME via a JSON config, versus a static password_file + acl_file that needs a broker reload per change. Runtime identity management is what an agent-facing CLI actually needs. (c) MQTT 5 SHARED SUBSCRIPTIONS ($share/<group>/<topic>) are how you fan ONE event type across MULTIPLE COMPETING CONSUMERS \u2014 directly relevant to a pipeline stage with more than one worker agent. (d) QoS 1 IS AT-LEAST-ONCE, which lines up with #1's explicit no-exactly-once non-goal \u2014 that makes CONSUMER-SIDE IDEMPOTENCY keyed on event ID a REQUIREMENT, not an optimisation, and it belongs in the published contract so consumers know they must dedupe. (e) RETAINED MESSAGES ARE NOT HISTORY: a retained message gives a new subscriber the LAST value on a topic, it is not a replayable log \u2014 #1's history + survive-a-restart criteria need the control service's own store, not retain:true. (f) PERSISTENCE needs 'persistence true' PLUS a mounted volume in the Compose file \u2014 easy to omit and only discovered on the first restart test. Also for repo shape: an MQTT client (paho-mqtt or equivalent) is a REAL third-party dependency, against agentfront's stdlib-CLI/HTTP + MCP-behind-an-extra convention and shell-cli's pure-stdlib precedent \u2014 decide early whether 'pip install events-cli' pulls it or the data plane sits behind an extra. And DOCKER MUST NOT BE A UNIT-TEST DEPENDENCY: keep envelope validation + pipeline transitions pure and dockerless (they are the high-coverage-worthy parts) and mark stack-integration tests separately, or the SonarCloud coverage gate goes flaky.", "scope": {"name": "guildmaster", "visibility": "public"}, "metadata": {"type": "reference", "record_metadata": {"scope": "guildmaster", "repo": "guildmaster", "agent": "events-cli", "topic": "mosquitto", "date": "2026-07-23"}, "created": "2026-07-23T15:17:09.235433+00:00", "last_recall": null, "recall_count": 0, "links": ["events-cli-brief-gaps-2026-07-23"], "supersedes": null, "lifecycle": "active", "added_by": null}}
@@ -5,6 +5,70 @@ 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.20.2] - 2026-07-24
9
+
10
+ ### Added
11
+
12
+ - **Ledger:** registered `webcam-cli` (public) as a downstream consumer of the
13
+ canonical skill set. Provisioned via `guild create --apply` from
14
+ `culture-agent-template`: repo/agent token `webcam-cli`, command `webcam`,
15
+ import package `webcam_cli`, dist `webcam-cli`, public, backend as
16
+ scaffolded. webcam-cli gives an agent easy access to attached **USB webcams
17
+ and microphones** — enumerate devices, capture stills and video clips, and
18
+ record audio — behind agent-first verbs with the safe-by-default write
19
+ contract. The import package is deliberately **decoupled** from the command
20
+ (`--pkg webcam_cli` against command `webcam`), following the
21
+ `discord-bot-cli` precedent: the short command stays ergonomic while the
22
+ package name keeps a distinct top-level import that will not shadow a
23
+ generic `webcam` module in a consumer's environment. Command ≠ repo token,
24
+ so `guild create` aliased the explain catalog root to `webcam` — verified
25
+ locally: `webcam explain webcam` resolves and the clone's 22 scaffold tests
26
+ pass, so the genesis run satisfies `teken cli doctor --strict`'s
27
+ `explain_self` check without a hand patch.
28
+
29
+ ## [0.20.1] - 2026-07-23
30
+
31
+ ### Added
32
+
33
+ - **Ledger:** registered `events-cli` (public) as a downstream consumer of the
34
+ canonical skill set. Provisioned via `guild create --apply` from
35
+ `culture-agent-template`: command `events`, import package `events`, dist
36
+ `events-cli`, public, backend as scaffolded. events-cli runs and maintains a
37
+ **Dockerised Eclipse Mosquitto MQTT broker** and fronts it through
38
+ `agentfront` as a CLI, an HTTP API and an MCP surface — so any app can import
39
+ it, any service can call the API, and an agent or a human can publish and
40
+ subscribe to events the same way. Per the operator's pre-seeded requirements
41
+ issue ([events-cli#1](https://github.com/agentculture/events-cli/issues/1)),
42
+ the public contract is deliberately **transport-independent**: events-cli owns
43
+ event semantics (a CloudEvents-compatible envelope with correlation/causation
44
+ tracing, declarative pipelines, delivery history and identity policy) while
45
+ Mosquitto owns message transport — "Mosquitto transports events, `events-cli`
46
+ defines what they mean." Distinct lane from `culture` (IRC agent
47
+ *conversation*) — events-cli carries typed machine *events* with durable
48
+ history and pipeline runs.
49
+ - **Genesis:** clean green — Tests, lint and Publish all passed on the genesis
50
+ commit, the `SONAR_TOKEN` secret was seeded from the operator environment, and
51
+ the `Protect main` ruleset applied. `events-cli` 0.6.1 published to production
52
+ PyPI on the genesis push (Trusted Publisher already registered, so none is
53
+ owed). The explain-catalog alias from
54
+ [#87](https://github.com/agentculture/guildmaster/issues/87) fired as intended
55
+ (command `events` ≠ repo token `events-cli`), keying the catalog root under
56
+ both `events-cli` and `events` so the clone's own `explain_self` gate passes.
57
+ - **Brief:** filed
58
+ [events-cli#2](https://github.com/agentculture/events-cli/issues/2) as a
59
+ complement to the operator's spec rather than a restatement of it — binding
60
+ the missing `agentfront` requirement (one registry → CLI + MCP + HTTP, which
61
+ cannot drift, plus the fourth `import events` surface agentfront does *not*
62
+ derive); naming the hard architectural constraint that `events watch` cannot
63
+ be exposed verbatim on MCP or HTTP because a tool call must return (resolved
64
+ via durable server-side subscriptions + bounded drain-with-cursor, which is
65
+ the same machinery as the survive-a-restart history criterion); and
66
+ adjudicating mesh lane boundaries against `culture`, `devague` (whose
67
+ scope → spec → plan → implement → validate lifecycle is nearly identical to
68
+ the spec's own motivating pipeline, making it the likely first consumer),
69
+ `eidetic-cli`/`data-refinery-cli` (do not build a bespoke store) and
70
+ `shell-cli` (do not grow a second shell-confinement posture).
71
+
8
72
  ## [0.20.0] - 2026-07-22
9
73
 
10
74
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: guild-cli
3
- Version: 0.20.0
3
+ Version: 0.20.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
@@ -32,14 +32,14 @@ current by `guild overview --scope mesh`.
32
32
 
33
33
  | Skill | Upstream | Downstream copies (known) | Notes |
34
34
  |-------|----------|---------------------------|-------|
35
- | `agent-config` | `guildmaster` (`.claude/skills/agent-config/`) | `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith` | Inventory variant backing `guild show` ([#12](https://github.com/agentculture/guildmaster/issues/12)); `show.sh` + `data/backend-fingerprints.yaml` vendored verbatim from steward, SKILL.md reframed from alignment-judgment to inventory + `type: command` added. **Forked from steward:** steward retains its own alignment-focused `agent-config` variant; the inventory variant is guildmaster's to supply. |
36
- | `cicd` | `guildmaster` (`.claude/skills/cicd/`) — layered on `devex pr` (in `agentculture/devex`) | `afi-cli`, `devex` (adapted-thin delegate — owns `devex pr`; see [devex#53](https://github.com/agentculture/devex/pull/53)), `agtag`, `antoine`, `appsec`, `auntiepypi`, `cfafi` (still named `pr-review`), `code-lens-cli`, `culture` (still named `pr-review`), `devague`, `katvan`, `lecodeur`, `lepenseur`, `seer-cli`, `telek`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `grant` (still named `pr-review`), `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith` | Thin delegate to `devex pr` for lint / open / read / reply / delta, plus guildmaster's `status` (SonarCloud quality gate + hotspots + unresolved-thread tally) and `await` (composes `devex pr read --wait` with `status`, non-zero exit on Sonar ERROR / unresolved threads) extensions. **Inverted case:** devex, as the `devex pr` upstream, vendors the skill adapted-thin — a `workflow.sh`-only pure delegate ([devex#53](https://github.com/agentculture/devex/pull/53)). Renamed from `pr-review` in steward 0.7.0; downstream copies may keep the old name on their own cadence. |
37
- | `communicate` | `guildmaster` (`.claude/skills/communicate/`) | `afi-cli`, `devex` (identifier-only — vendored steward 0.11.0; scripts current as of 0.18.0), `agtag`, `antoine`, `appsec`, `auntiepypi`, `code-lens-cli`, `culture` (still named `coordinate`), `devague`, `katvan`, `lecodeur`, `lepenseur`, `seer-cli`, `telek`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith` | Cross-repo + mesh communication: file issues / hand off briefs to sibling-repo agents (auto-signed), comment on existing issues, fetch issues to inline state into briefs, and send live messages to Culture mesh channels (unsigned — nick is the speaker). Renamed from `coordinate` in steward 0.8.0; absorbed `gh-issues` (as `fetch-issues.sh`) in 0.9.1. Issue I/O backed by `agtag` (>=0.1) since steward 0.11.0 — signature resolves from local `culture.yaml` (override via `--as`). |
38
- | `doc-test-alignment` | `guildmaster` (`.claude/skills/doc-test-alignment/`) | `devague`, `lecodeur`, `lepenseur`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith` | Stub; real implementation TBD. `scripts/check.sh` exits not-yet-implemented today. |
39
- | `pypi-maintainer` | `guildmaster` (`.claude/skills/pypi-maintainer/`) | `agtag`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith` | Switches a PyPI package install between pypi / test-pypi / local. Generalised from the original culture-specific `change-package`. `org` is intentionally not a consumer — it ships no PyPI distribution (site repo). |
40
- | `run-tests` | `guildmaster` (`.claude/skills/run-tests/`) | `agtag`, `antoine`, `appsec`, `code-lens-cli`, `culture`, `culture-sonar-cli`, `devague`, `lecodeur`, `lepenseur`, `seer-cli`, `grant`, `telek`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith` | Coverage source resolves from `[tool.coverage.run]` in `pyproject.toml`, so the script is portable across siblings without modification. |
41
- | `sonarclaude` | `guildmaster` (`.claude/skills/sonarclaude/`) | `antoine`, `appsec`, `code-lens-cli`, `devague`, `lecodeur`, `lepenseur`, `seer-cli`, `telek`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith` | SonarCloud API client. Project key resolves from `$SONAR_PROJECT` or `--project KEY`. |
42
- | `version-bump` | `guildmaster` (`.claude/skills/version-bump/`) | `afi-cli`, `agtag`, `antoine`, `appsec`, `auntiepypi`, `cfafi`, `code-lens-cli`, `culture`, `devague`, `lecodeur`, `lepenseur`, `seer-cli`, `grant`, `telek`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith` | Pure Python, prepends a Keep-a-Changelog entry; no per-repo customization needed. |
35
+ | `agent-config` | `guildmaster` (`.claude/skills/agent-config/`) | `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith`, `events-cli`, `webcam-cli` | Inventory variant backing `guild show` ([#12](https://github.com/agentculture/guildmaster/issues/12)); `show.sh` + `data/backend-fingerprints.yaml` vendored verbatim from steward, SKILL.md reframed from alignment-judgment to inventory + `type: command` added. **Forked from steward:** steward retains its own alignment-focused `agent-config` variant; the inventory variant is guildmaster's to supply. |
36
+ | `cicd` | `guildmaster` (`.claude/skills/cicd/`) — layered on `devex pr` (in `agentculture/devex`) | `afi-cli`, `devex` (adapted-thin delegate — owns `devex pr`; see [devex#53](https://github.com/agentculture/devex/pull/53)), `agtag`, `antoine`, `appsec`, `auntiepypi`, `cfafi` (still named `pr-review`), `code-lens-cli`, `culture` (still named `pr-review`), `devague`, `katvan`, `lecodeur`, `lepenseur`, `seer-cli`, `telek`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `grant` (still named `pr-review`), `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith`, `events-cli`, `webcam-cli` | Thin delegate to `devex pr` for lint / open / read / reply / delta, plus guildmaster's `status` (SonarCloud quality gate + hotspots + unresolved-thread tally) and `await` (composes `devex pr read --wait` with `status`, non-zero exit on Sonar ERROR / unresolved threads) extensions. **Inverted case:** devex, as the `devex pr` upstream, vendors the skill adapted-thin — a `workflow.sh`-only pure delegate ([devex#53](https://github.com/agentculture/devex/pull/53)). Renamed from `pr-review` in steward 0.7.0; downstream copies may keep the old name on their own cadence. |
37
+ | `communicate` | `guildmaster` (`.claude/skills/communicate/`) | `afi-cli`, `devex` (identifier-only — vendored steward 0.11.0; scripts current as of 0.18.0), `agtag`, `antoine`, `appsec`, `auntiepypi`, `code-lens-cli`, `culture` (still named `coordinate`), `devague`, `katvan`, `lecodeur`, `lepenseur`, `seer-cli`, `telek`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith`, `events-cli`, `webcam-cli` | Cross-repo + mesh communication: file issues / hand off briefs to sibling-repo agents (auto-signed), comment on existing issues, fetch issues to inline state into briefs, and send live messages to Culture mesh channels (unsigned — nick is the speaker). Renamed from `coordinate` in steward 0.8.0; absorbed `gh-issues` (as `fetch-issues.sh`) in 0.9.1. Issue I/O backed by `agtag` (>=0.1) since steward 0.11.0 — signature resolves from local `culture.yaml` (override via `--as`). |
38
+ | `doc-test-alignment` | `guildmaster` (`.claude/skills/doc-test-alignment/`) | `devague`, `lecodeur`, `lepenseur`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith`, `events-cli`, `webcam-cli` | Stub; real implementation TBD. `scripts/check.sh` exits not-yet-implemented today. |
39
+ | `pypi-maintainer` | `guildmaster` (`.claude/skills/pypi-maintainer/`) | `agtag`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith`, `events-cli`, `webcam-cli` | Switches a PyPI package install between pypi / test-pypi / local. Generalised from the original culture-specific `change-package`. `org` is intentionally not a consumer — it ships no PyPI distribution (site repo). |
40
+ | `run-tests` | `guildmaster` (`.claude/skills/run-tests/`) | `agtag`, `antoine`, `appsec`, `code-lens-cli`, `culture`, `culture-sonar-cli`, `devague`, `lecodeur`, `lepenseur`, `seer-cli`, `grant`, `telek`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith`, `events-cli`, `webcam-cli` | Coverage source resolves from `[tool.coverage.run]` in `pyproject.toml`, so the script is portable across siblings without modification. |
41
+ | `sonarclaude` | `guildmaster` (`.claude/skills/sonarclaude/`) | `antoine`, `appsec`, `code-lens-cli`, `devague`, `lecodeur`, `lepenseur`, `seer-cli`, `telek`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith`, `events-cli`, `webcam-cli` | SonarCloud API client. Project key resolves from `$SONAR_PROJECT` or `--project KEY`. |
42
+ | `version-bump` | `guildmaster` (`.claude/skills/version-bump/`) | `afi-cli`, `agtag`, `antoine`, `appsec`, `auntiepypi`, `cfafi`, `code-lens-cli`, `culture`, `devague`, `lecodeur`, `lepenseur`, `seer-cli`, `grant`, `telek`, `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith`, `events-cli`, `webcam-cli` | Pure Python, prepends a Keep-a-Changelog entry; no per-repo customization needed. |
43
43
 
44
44
  > **How the downstream column is maintained.** The "Downstream copies (known)"
45
45
  > entries are kept in sync with guildmaster's own drift detector:
@@ -86,9 +86,9 @@ harmless on `claude-code`. This is the only divergence from upstream.
86
86
 
87
87
  | Skill | Origin | Downstream copies (known) | Notes |
88
88
  |-------|--------|---------------------------|-------|
89
- | `think` | `devague` (`agentculture/devague`, `../devague/.claude/skills/think/`) | — (broadcast pending), `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith` | Operator for the **idea→spec** leg (announcement frame → capture/classify claims → interrogate with honesty conditions → park open vagueness → `export` once the frame converges). Renamed from `devague` in devague 0.4.0. **Divergence:** `type: command` added. Runtime dep: `uv tool install devague`. |
90
- | `spec-to-plan` | `devague` (`agentculture/devague`, `../devague/.claude/skills/spec-to-plan/`) | — (broadcast pending), `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith` | Operator for the **spec→plan** leg (`devague plan ...`): seed from a converged frame, cover every coverage target with acceptance-gated, acyclically-ordered tasks, park unknowns as risks, `export` once the plan converges. New in devague 0.4.0. **Divergence:** `type: command` added. Runtime dep: `uv tool install devague`. |
91
- | `assign-to-workforce` | `devague` (`agentculture/devague`, `../devague/.claude/skills/assign-to-workforce/`) | — (broadcast pending), `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith` | Operator for the **implementation** leg: reads `devague plan waves` (read-only) and fans out independent tasks to one agent per task per wave in isolated git worktrees, with main-agent TDD-gated merges. Three human gates: spec / split plan / final PR. The CLI stays non-orchestrating ([devague#20](https://github.com/agentculture/devague/issues/20)). New in devague 0.10.0. **Divergence:** `type: command` added. Runtime deps: `uv tool install devague`, `git worktree`, the vendored `cicd` skill (for gate-3 `devex pr open`). |
89
+ | `think` | `devague` (`agentculture/devague`, `../devague/.claude/skills/think/`) | — (broadcast pending), `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith`, `events-cli`, `webcam-cli` | Operator for the **idea→spec** leg (announcement frame → capture/classify claims → interrogate with honesty conditions → park open vagueness → `export` once the frame converges). Renamed from `devague` in devague 0.4.0. **Divergence:** `type: command` added. Runtime dep: `uv tool install devague`. |
90
+ | `spec-to-plan` | `devague` (`agentculture/devague`, `../devague/.claude/skills/spec-to-plan/`) | — (broadcast pending), `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith`, `events-cli`, `webcam-cli` | Operator for the **spec→plan** leg (`devague plan ...`): seed from a converged frame, cover every coverage target with acceptance-gated, acyclically-ordered tasks, park unknowns as risks, `export` once the plan converges. New in devague 0.4.0. **Divergence:** `type: command` added. Runtime dep: `uv tool install devague`. |
91
+ | `assign-to-workforce` | `devague` (`agentculture/devague`, `../devague/.claude/skills/assign-to-workforce/`) | — (broadcast pending), `agenda`, `dominion-breaker`, `colleague`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith`, `events-cli`, `webcam-cli` | Operator for the **implementation** leg: reads `devague plan waves` (read-only) and fans out independent tasks to one agent per task per wave in isolated git worktrees, with main-agent TDD-gated merges. Three human gates: spec / split plan / final PR. The CLI stays non-orchestrating ([devague#20](https://github.com/agentculture/devague/issues/20)). New in devague 0.10.0. **Divergence:** `type: command` added. Runtime deps: `uv tool install devague`, `git worktree`, the vendored `cicd` skill (for gate-3 `devex pr open`). |
92
92
 
93
93
  Downstream is empty by design: these are still being introduced to the mesh.
94
94
  `guild teach --new --skill <name> --to <repos>` frames them as *new* skills to
@@ -136,7 +136,7 @@ the CLI, the wrapper exits with a clear install hint rather than crashing.
136
136
 
137
137
  | Skill | Origin | Downstream copies (known) | Notes |
138
138
  |-------|--------|---------------------------|-------|
139
- | `outsource` | `colleague` (`agentculture/colleague`, `../colleague/.claude/skills/outsource/`) | — (broadcast pending; [`culture-agent-template#8`](https://github.com/agentculture/culture-agent-template/issues/8) proposes adding it to the clone template), `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith` | First-party colleague skill: hand a scoped task to a *different* engine/mind. Verbs `explore` / `review` / `write`. **Divergence:** Provenance paragraph reframed for re-broadcast (above); `type: command` already present upstream. Runtime dep: `uv tool install colleague-cli` + a reachable engine. |
139
+ | `outsource` | `colleague` (`agentculture/colleague`, `../colleague/.claude/skills/outsource/`) | — (broadcast pending; [`culture-agent-template#8`](https://github.com/agentculture/culture-agent-template/issues/8) proposes adding it to the clone template), `rtx-spark-cli`, `reachy-mini-mcp`, `tensor-cli`, `climate-cli`, `eidetic-cli`, `prove-cli`, `reduce-cli`, `refactor-cli`, `rollout-cli`, `coherence-cli`, `agent-lifecycle`, `reterminal`, `operator-cli`, `culture-core`, `ec2-cli`, `qodo-cli`, `knowledgebase-cli`, `cloudai-cli`, `ec2bedrock-cli`, `arm101-cli`, `amazing-hand-cli`, `agentculture-cli`, `data-refinery-cli`, `culture-tools`, `webglass-cli`, `jetson-orin-cli`, `jetson-thor-cli`, `drone-cli`, `fleet-cli`, `league-of-agents`, `harmonics-cli`, `french-cli`, `spanish-cli`, `league-of-agents-platform`, `org`, `learn-cli`, `jetson-arena`, `sensibo-cli`, `intern-cli`, `reachy-lobes`, `storybook-cli`, `shell-cli`, `embeddings-cli`, `evidence-cli`, `callsmith`, `events-cli`, `webcam-cli` | First-party colleague skill: hand a scoped task to a *different* engine/mind. Verbs `explore` / `review` / `write`. **Divergence:** Provenance paragraph reframed for re-broadcast (above); `type: command` already present upstream. Runtime dep: `uv tool install colleague-cli` + a reachable engine. |
140
140
 
141
141
  Downstream is empty by design — guildmaster is the first holder outside
142
142
  colleague. `guild teach --new --skill outsource --to <repos>` frames it as a
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "guild-cli"
3
- version = "0.20.0"
3
+ version = "0.20.2"
4
4
  description = "guildmaster — an agent and CLI that manages skills for the AgentCulture mesh."
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -179,7 +179,7 @@ wheels = [
179
179
 
180
180
  [[package]]
181
181
  name = "guild-cli"
182
- version = "0.20.0"
182
+ version = "0.20.2"
183
183
  source = { editable = "." }
184
184
  dependencies = [
185
185
  { name = "pyyaml" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes