guild-cli 0.6.0__tar.gz → 0.6.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {guild_cli-0.6.0 → guild_cli-0.6.1}/CHANGELOG.md +23 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/PKG-INFO +1 -1
- {guild_cli-0.6.0 → guild_cli-0.6.1}/docs/skill-sources.md +11 -11
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/scaffold/instantiate.py +37 -1
- {guild_cli-0.6.0 → guild_cli-0.6.1}/pyproject.toml +1 -1
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_scaffold_instantiate.py +73 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/uv.lock +1 -1
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/agent-config/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/agent-config/scripts/show.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/cicd/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/cicd/scripts/workflow.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/communicate/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/guild/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/guild/scripts/configure-repo.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/guild/scripts/create.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/guild/scripts/overview.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/onboard/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/onboard/scripts/onboard.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/run-tests/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/sonarclaude/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/spec-to-plan/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/teach/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/teach/scripts/teach.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/think/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/think/scripts/think.sh +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/version-bump/SKILL.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/version-bump/scripts/bump.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills.local.yaml.example +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.devague/frames/guildmaster-ships-teach-and-onboard-two-agent-firs.json +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.devague/plans/guildmaster-ships-teach-and-onboard-two-agent-firs.json +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.flake8 +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.github/workflows/publish.yml +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.github/workflows/tests.yml +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.gitignore +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/.markdownlint-cli2.yaml +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/CLAUDE.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/LICENSE +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/README.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/culture.yaml +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/docs/cutover.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/docs/plans/2026-05-24-guildmaster-ships-teach-and-onboard-two-agent-firs.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/docs/specs/2026-05-24-guildmaster-ships-teach-and-onboard-two-agent-firs.md +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/__init__.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/__main__.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/__init__.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_commands/__init__.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_commands/_broadcast.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_commands/_provision_template.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_commands/create.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_commands/explain.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_commands/learn.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_commands/onboard.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_commands/overview.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_commands/show.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_commands/teach.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_commands/whoami.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_errors.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_output.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/cli/_repo.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/scaffold/__init__.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/skills/__init__.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/skills/identity.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/skills/ledger.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/skills/render.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/guild/skills/sources.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/__init__.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_broadcast_post.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_cli.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_cli_create.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_cli_explain.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_cli_learn.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_cli_onboard.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_cli_overview.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_cli_show.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_cli_teach.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_cli_whoami.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_skills_convention.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_skills_identity.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_skills_ledger.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_skills_render.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_skills_sources.py +0 -0
- {guild_cli-0.6.0 → guild_cli-0.6.1}/tests/test_version_fallback.py +0 -0
|
@@ -5,6 +5,29 @@ 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.6.1] - 2026-05-26
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Registered `agenda`** (`agentculture/agenda`) in `docs/skill-sources.md` as a
|
|
13
|
+
downstream consumer of the canonical kit — the first sibling provisioned via
|
|
14
|
+
`guild create --apply`.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- **`guild create` seed generator (`instantiate.py`)**: the CLAUDE.md/AGENTS.md
|
|
19
|
+
seed emitted the agent name as a standalone emphasized line (`**<name>**`),
|
|
20
|
+
tripping markdownlint **MD036** and failing the new repo's first CI run; the
|
|
21
|
+
name is now inlined in a sentence.
|
|
22
|
+
- **`guild create` README rewrite**: `_set_readme_intro` only replaced the first
|
|
23
|
+
line of the template's intro, leaving a dangling fragment when the intro spans
|
|
24
|
+
multiple lines (as the real `culture-agent-template` intro does). It now
|
|
25
|
+
replaces the whole first paragraph, stopping at a blank line **or** the start
|
|
26
|
+
of a new markdown block (heading / list / blockquote / badge / code fence) so
|
|
27
|
+
a block that immediately follows the intro is never silently dropped, while
|
|
28
|
+
wrapped inline-code prose (a single leading backtick) is still consumed. Both
|
|
29
|
+
bugs surfaced provisioning `agenda`; regression tests added.
|
|
30
|
+
|
|
8
31
|
## [0.6.0] - 2026-05-26
|
|
9
32
|
|
|
10
33
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: guild-cli
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.1
|
|
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/`) |
|
|
36
|
-
| `cicd` | `guildmaster` (`.claude/skills/cicd/`) — layered on `agex pr` (in `agentculture/agex-cli`) | `afi-cli`, `agex-cli` (adapted-thin delegate — owns `agex pr`; see [agex-cli#53](https://github.com/agentculture/agex-cli/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` | Thin delegate to `agex pr` for lint / open / read / reply / delta, plus guildmaster's `status` (SonarCloud quality gate + hotspots + unresolved-thread tally) and `await` (composes `agex pr read --wait` with `status`, non-zero exit on Sonar ERROR / unresolved threads) extensions. **Inverted case:** agex-cli, as the `agex pr` upstream, vendors the skill adapted-thin — a `workflow.sh`-only pure delegate ([agex-cli#53](https://github.com/agentculture/agex-cli/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`, `agex-cli` (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` | 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` | Stub; real implementation TBD. `scripts/check.sh` exits not-yet-implemented today. |
|
|
39
|
-
| `pypi-maintainer` | `guildmaster` (`.claude/skills/pypi-maintainer/`) | `agtag` | Switches a PyPI package install between pypi / test-pypi / local. Generalised from the original culture-specific `change-package`. |
|
|
40
|
-
| `run-tests` | `guildmaster` (`.claude/skills/run-tests/`) | `agtag`, `antoine`, `appsec`, `code-lens-cli`, `culture`, `culture-sonar-cli`, `devague`, `lecodeur`, `lepenseur`, `seer-cli`, `shushu`, `telek` | 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` | 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`, `shushu`, `telek` | Pure Python, prepends a Keep-a-Changelog entry; no per-repo customization needed. |
|
|
35
|
+
| `agent-config` | `guildmaster` (`.claude/skills/agent-config/`) | `agenda` | 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 `agex pr` (in `agentculture/agex-cli`) | `afi-cli`, `agex-cli` (adapted-thin delegate — owns `agex pr`; see [agex-cli#53](https://github.com/agentculture/agex-cli/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` | Thin delegate to `agex pr` for lint / open / read / reply / delta, plus guildmaster's `status` (SonarCloud quality gate + hotspots + unresolved-thread tally) and `await` (composes `agex pr read --wait` with `status`, non-zero exit on Sonar ERROR / unresolved threads) extensions. **Inverted case:** agex-cli, as the `agex pr` upstream, vendors the skill adapted-thin — a `workflow.sh`-only pure delegate ([agex-cli#53](https://github.com/agentculture/agex-cli/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`, `agex-cli` (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` | 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` | Stub; real implementation TBD. `scripts/check.sh` exits not-yet-implemented today. |
|
|
39
|
+
| `pypi-maintainer` | `guildmaster` (`.claude/skills/pypi-maintainer/`) | `agtag`, `agenda` | Switches a PyPI package install between pypi / test-pypi / local. Generalised from the original culture-specific `change-package`. |
|
|
40
|
+
| `run-tests` | `guildmaster` (`.claude/skills/run-tests/`) | `agtag`, `antoine`, `appsec`, `code-lens-cli`, `culture`, `culture-sonar-cli`, `devague`, `lecodeur`, `lepenseur`, `seer-cli`, `shushu`, `telek`, `agenda` | 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` | 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`, `shushu`, `telek`, `agenda` | 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:
|
|
@@ -80,9 +80,9 @@ harmless on `claude-code`. This is the only divergence from upstream.
|
|
|
80
80
|
|
|
81
81
|
| Skill | Origin | Downstream copies (known) | Notes |
|
|
82
82
|
|-------|--------|---------------------------|-------|
|
|
83
|
-
| `think` | `devague` (`agentculture/devague`, `../devague/.claude/skills/think/`) | — (broadcast pending) | 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`. |
|
|
84
|
-
| `spec-to-plan` | `devague` (`agentculture/devague`, `../devague/.claude/skills/spec-to-plan/`) | — (broadcast pending) | 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`. |
|
|
85
|
-
| `assign-to-workforce` | `devague` (`agentculture/devague`, `../devague/.claude/skills/assign-to-workforce/`) | — (broadcast pending) | 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 `agex pr open`). |
|
|
83
|
+
| `think` | `devague` (`agentculture/devague`, `../devague/.claude/skills/think/`) | — (broadcast pending), `agenda` | 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`. |
|
|
84
|
+
| `spec-to-plan` | `devague` (`agentculture/devague`, `../devague/.claude/skills/spec-to-plan/`) | — (broadcast pending), `agenda` | 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`. |
|
|
85
|
+
| `assign-to-workforce` | `devague` (`agentculture/devague`, `../devague/.claude/skills/assign-to-workforce/`) | — (broadcast pending), `agenda` | 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 `agex pr open`). |
|
|
86
86
|
|
|
87
87
|
Downstream is empty by design: these are still being introduced to the mesh.
|
|
88
88
|
`guild teach --new --skill <name> --to <repos>` frames them as *new* skills to
|
|
@@ -162,7 +162,7 @@ def _seed_prompt(bare: str, desc: str, backend: str) -> str:
|
|
|
162
162
|
|
|
163
163
|
## Agent
|
|
164
164
|
|
|
165
|
-
**{bare}**
|
|
165
|
+
This repository hosts the **{bare}** agent.
|
|
166
166
|
|
|
167
167
|
## Description
|
|
168
168
|
|
|
@@ -272,6 +272,34 @@ def _is_desc_stub(line: str) -> bool:
|
|
|
272
272
|
return not re.match(r"^[#>`\-\*!\[]", stripped)
|
|
273
273
|
|
|
274
274
|
|
|
275
|
+
def _is_block_start(line: str) -> bool:
|
|
276
|
+
"""Return True if *line* begins a new markdown block.
|
|
277
|
+
|
|
278
|
+
Used to bound intro-paragraph consumption in ``_replace_heading_block`` so a
|
|
279
|
+
block that immediately follows the intro *without* a blank line (e.g. ``##
|
|
280
|
+
Section``, a list, or a badge row) is not swallowed. Recognised starts:
|
|
281
|
+
ATX headings (``#``), blockquotes (``>``), unordered list items
|
|
282
|
+
(``- ``/``* ``/``+ ``), links/badges (``[`` / ``![``), and fenced code
|
|
283
|
+
(```` ``` ```` / ``~~~``).
|
|
284
|
+
|
|
285
|
+
A *single* leading backtick is **not** a block start — it is inline code in
|
|
286
|
+
wrapped prose (e.g. ``` `culture.yaml`, and you have… ```), which is part of
|
|
287
|
+
the intro paragraph and must be consumed with it.
|
|
288
|
+
"""
|
|
289
|
+
stripped = line.lstrip()
|
|
290
|
+
if not stripped:
|
|
291
|
+
return False
|
|
292
|
+
if stripped.startswith(("```", "~~~")):
|
|
293
|
+
return True
|
|
294
|
+
if stripped[0] in "#>":
|
|
295
|
+
return True
|
|
296
|
+
if stripped.startswith(("![", "[")):
|
|
297
|
+
return True
|
|
298
|
+
if stripped[:2] in ("- ", "* ", "+ "):
|
|
299
|
+
return True
|
|
300
|
+
return False
|
|
301
|
+
|
|
302
|
+
|
|
275
303
|
def _replace_heading_block(lines: list[str], i: int, bare: str, desc: str) -> tuple[list[str], int]:
|
|
276
304
|
"""Replace the heading at *lines[i]* and its following description stub.
|
|
277
305
|
|
|
@@ -290,6 +318,14 @@ def _replace_heading_block(lines: list[str], i: int, bare: str, desc: str) -> tu
|
|
|
290
318
|
if i < len(lines) and _is_desc_stub(lines[i]):
|
|
291
319
|
out.append(desc + "\n")
|
|
292
320
|
i += 1
|
|
321
|
+
# Consume the rest of the intro paragraph so a *multi-line* template
|
|
322
|
+
# intro is replaced wholesale rather than leaving a dangling fragment.
|
|
323
|
+
# Stop at a blank line (paragraph end) OR the start of a new markdown
|
|
324
|
+
# block (heading/list/blockquote/badge/fence) — even when no blank line
|
|
325
|
+
# separates it — so a following block is never silently dropped. A
|
|
326
|
+
# single leading backtick stays consumable (wrapped inline-code prose).
|
|
327
|
+
while i < len(lines) and lines[i].strip() != "" and not _is_block_start(lines[i]):
|
|
328
|
+
i += 1
|
|
293
329
|
elif i < len(lines):
|
|
294
330
|
out.append(desc + "\n\n")
|
|
295
331
|
else:
|
|
@@ -312,3 +312,76 @@ def test_transform_invalid_backend_raises(tmp_path):
|
|
|
312
312
|
def test_transform_missing_dest_raises(tmp_path):
|
|
313
313
|
with pytest.raises(FileNotFoundError):
|
|
314
314
|
transform_clone(tmp_path / "nonexistent", "appsec", "desc", "claude")
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
def test_transform_readme_replaces_multiline_intro_paragraph(tmp_path):
|
|
318
|
+
"""A *multi-line* template intro must be replaced wholesale — the real
|
|
319
|
+
culture-agent-template intro spans several lines, and replacing only the
|
|
320
|
+
first leaves a dangling fragment (regression: agenda genesis README)."""
|
|
321
|
+
dest = _build_fixture(tmp_path)
|
|
322
|
+
(dest / "README.md").write_text(
|
|
323
|
+
"# culture-agent-template\n\n"
|
|
324
|
+
"A clonable AgentCulture agent template with a consistent structure,\n"
|
|
325
|
+
"lifecycle, and skills. Clone it, rename the package, and edit\n"
|
|
326
|
+
"`culture.yaml` to make it your own.\n\n"
|
|
327
|
+
"## More\n\nMore docs.\n"
|
|
328
|
+
)
|
|
329
|
+
transform_clone(dest, "appsec", "AppSec security scanner.", "claude")
|
|
330
|
+
readme = (dest / "README.md").read_text()
|
|
331
|
+
# New description present; the entire old intro paragraph is gone.
|
|
332
|
+
assert "AppSec security scanner." in readme
|
|
333
|
+
assert "lifecycle, and skills" not in readme
|
|
334
|
+
assert "Clone it, rename the package" not in readme
|
|
335
|
+
assert "make it your own" not in readme
|
|
336
|
+
# Body after the intro paragraph is preserved.
|
|
337
|
+
assert "## More" in readme
|
|
338
|
+
assert "More docs." in readme
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
def test_transform_readme_stops_intro_at_block_without_blank_line(tmp_path):
|
|
342
|
+
"""Intro-paragraph consumption must stop at the start of a new markdown
|
|
343
|
+
block even when no blank line separates it from the intro stub — otherwise
|
|
344
|
+
a following heading/list/badge is silently dropped (Qodo, PR #29)."""
|
|
345
|
+
dest = _build_fixture(tmp_path)
|
|
346
|
+
(dest / "README.md").write_text(
|
|
347
|
+
"# culture-agent-template\n\n"
|
|
348
|
+
"A clonable template.\n" # stub immediately followed by a heading
|
|
349
|
+
"## Features\n\n- one\n- two\n"
|
|
350
|
+
)
|
|
351
|
+
transform_clone(dest, "appsec", "AppSec scanner.", "claude")
|
|
352
|
+
readme = (dest / "README.md").read_text()
|
|
353
|
+
assert "AppSec scanner." in readme
|
|
354
|
+
assert "A clonable template." not in readme # stub replaced
|
|
355
|
+
# The block that immediately follows the stub must survive.
|
|
356
|
+
assert "## Features" in readme
|
|
357
|
+
assert "- one" in readme
|
|
358
|
+
assert "- two" in readme
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
def test_transform_readme_consumes_wrapped_inline_code_prose(tmp_path):
|
|
362
|
+
"""A continuation line beginning with a *single* backtick (inline code) is
|
|
363
|
+
wrapped prose, not a block start, so it is consumed with the intro."""
|
|
364
|
+
dest = _build_fixture(tmp_path)
|
|
365
|
+
(dest / "README.md").write_text(
|
|
366
|
+
"# culture-agent-template\n\n"
|
|
367
|
+
"A clonable template you configure by editing\n"
|
|
368
|
+
"`culture.yaml` to taste.\n\n"
|
|
369
|
+
"## More\n"
|
|
370
|
+
)
|
|
371
|
+
transform_clone(dest, "appsec", "AppSec scanner.", "claude")
|
|
372
|
+
readme = (dest / "README.md").read_text()
|
|
373
|
+
assert "AppSec scanner." in readme
|
|
374
|
+
assert "culture.yaml` to taste" not in readme # backtick prose consumed
|
|
375
|
+
assert "## More" in readme
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
def test_transform_seed_avoids_md036_standalone_emphasis(tmp_path):
|
|
379
|
+
"""The CLAUDE.md seed must not place the agent name on a standalone
|
|
380
|
+
emphasized line (markdownlint MD036 no-emphasis-as-heading — this broke
|
|
381
|
+
the agenda genesis CI lint job)."""
|
|
382
|
+
dest = _build_fixture(tmp_path)
|
|
383
|
+
transform_clone(dest, "appsec", "AppSec scanner.", "claude")
|
|
384
|
+
seed_lines = [ln.strip() for ln in (dest / "CLAUDE.md").read_text().splitlines()]
|
|
385
|
+
assert "**appsec**" not in seed_lines
|
|
386
|
+
# The name still appears, inlined in prose.
|
|
387
|
+
assert any("appsec" in ln for ln in seed_lines)
|
|
File without changes
|
{guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/agent-config/data/backend-fingerprints.yaml
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{guild_cli-0.6.0 → guild_cli-0.6.1}/.claude/skills/communicate/scripts/templates/skill-new-brief.md
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|