guild-cli 0.9.1__tar.gz → 0.10.0__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.9.1 → guild_cli-0.10.0}/.claude/skills/outsource/SKILL.md +20 -17
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/outsource/scripts/outsource.sh +67 -43
- {guild_cli-0.9.1 → guild_cli-0.10.0}/CHANGELOG.md +54 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/PKG-INFO +1 -1
- guild_cli-0.10.0/docs/onboarding/reachy-mini-mcp.json +19 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/docs/skill-sources.md +35 -23
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/skills/__init__.py +2 -2
- {guild_cli-0.9.1 → guild_cli-0.10.0}/pyproject.toml +1 -1
- {guild_cli-0.9.1 → guild_cli-0.10.0}/uv.lock +1 -1
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/agent-config/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/agent-config/scripts/show.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/cicd/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/cicd/scripts/workflow.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/guild/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/guild/scripts/configure-repo.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/guild/scripts/create.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/guild/scripts/overview.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/onboard/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/onboard/scripts/onboard.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/outsource/prompts/explore.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/outsource/prompts/review.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/outsource/prompts/write.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/run-tests/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/sonarclaude/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/spec-to-plan/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/teach/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/teach/scripts/teach.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/think/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/think/scripts/think.sh +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/version-bump/SKILL.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/version-bump/scripts/bump.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills.local.yaml.example +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.devague/frames/guildmaster-ships-teach-and-onboard-two-agent-firs.json +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.devague/plans/guildmaster-ships-teach-and-onboard-two-agent-firs.json +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.flake8 +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.github/workflows/publish.yml +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.github/workflows/tests.yml +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.gitignore +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/.markdownlint-cli2.yaml +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/CLAUDE.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/LICENSE +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/README.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/culture.yaml +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/docs/cutover.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/docs/plans/2026-05-24-guildmaster-ships-teach-and-onboard-two-agent-firs.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/docs/specs/2026-05-24-guildmaster-ships-teach-and-onboard-two-agent-firs.md +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/__init__.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/__main__.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/__init__.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/__init__.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/_broadcast.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/_provision_template.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/create.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/explain.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/learn.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/onboard.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/overview.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/show.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/teach.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/whoami.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_errors.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_output.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_repo.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/scaffold/__init__.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/scaffold/instantiate.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/skills/identity.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/skills/ledger.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/skills/render.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/skills/sources.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/sonar-project.properties +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/__init__.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_broadcast_post.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_create.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_explain.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_learn.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_onboard.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_overview.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_show.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_teach.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_whoami.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_scaffold_instantiate.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_skills_convention.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_skills_identity.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_skills_ledger.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_skills_render.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_skills_sources.py +0 -0
- {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_version_fallback.py +0 -0
|
@@ -2,40 +2,43 @@
|
|
|
2
2
|
name: outsource
|
|
3
3
|
type: command
|
|
4
4
|
description: >
|
|
5
|
-
Hand a scoped repo task to
|
|
5
|
+
Hand a scoped repo task to colleague — a *different* engine/model than you
|
|
6
6
|
(e.g. a local vLLM Qwen) — and fold its answer back. The point isn't a stronger
|
|
7
7
|
model; it's a different mind, and diversity helps: `outsource review` gets an
|
|
8
8
|
independent second opinion on a diff, `outsource explore` gets a fresh read of
|
|
9
9
|
an area, `outsource write` delegates a small implementation. Use when the user
|
|
10
|
-
says "outsource this", "get a second opinion", "have
|
|
10
|
+
says "outsource this", "get a second opinion", "have colleague review/explore/
|
|
11
11
|
write", "ask the other model", or when you want a diverse perspective rather
|
|
12
12
|
than just doing it yourself. Read-only verbs (explore/review) run isolated in a
|
|
13
13
|
throwaway git worktree and cannot touch the working tree.
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
# outsource — use
|
|
16
|
+
# outsource — use colleague as a different mind
|
|
17
17
|
|
|
18
|
-
`outsource` drives the **`
|
|
18
|
+
`outsource` drives the **`colleague`** CLI so a Claude agent can hand a scoped
|
|
19
19
|
task to a *different* engine (default: a local vLLM `Qwen3.6-27B` on
|
|
20
|
-
`:8001`).
|
|
20
|
+
`:8001`). Colleague's model is **not** assumed to be stronger than you — its
|
|
21
21
|
value is **diversity**. A second, independent mind catches things the author's
|
|
22
22
|
mind glides past, which is why **review** is the headline verb.
|
|
23
23
|
|
|
24
24
|
This skill is the operator: a portable wrapper that resolves the CLI and turns
|
|
25
|
-
each verb into a `
|
|
25
|
+
each verb into a `colleague drive`, then prints the drive's result summary.
|
|
26
26
|
|
|
27
27
|
## How to run
|
|
28
28
|
|
|
29
29
|
The entry point is `scripts/outsource.sh`. Invoke it from the repo you want
|
|
30
|
-
|
|
30
|
+
colleague to work on:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
33
|
bash .claude/skills/outsource/scripts/outsource.sh <verb> "<text>" [options]
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
It resolves the CLI portably — an installed `
|
|
37
|
-
case), falling back to `uv run
|
|
38
|
-
else an install hint.
|
|
36
|
+
It resolves the CLI portably — an installed `colleague` on `PATH` (the normal
|
|
37
|
+
case), falling back to `uv run colleague` when inside the colleague checkout,
|
|
38
|
+
else an install hint. **Rename-ahead transition:** `colleague` was renamed from
|
|
39
|
+
`convertible` but still publishes `convertible-cli` / ships the `convertible`
|
|
40
|
+
binary today, so the wrapper prefers `colleague` and falls back to `convertible`
|
|
41
|
+
(both installed and local-dev) until upstream republishes.
|
|
39
42
|
|
|
40
43
|
### Verbs
|
|
41
44
|
|
|
@@ -43,7 +46,7 @@ else an install hint.
|
|
|
43
46
|
|------|--------------|--------------|
|
|
44
47
|
| `explore "<question or area>"` | Read-only investigation of the repo; the model reads and reports findings. | **None** — runs in a throwaway worktree at HEAD. |
|
|
45
48
|
| `review "<what to focus on>" [--base main]` | A diverse second opinion on the **committed** diff (`<base>...HEAD`). | **None** — throwaway worktree; reviews committed changes only. |
|
|
46
|
-
| `write "<task>" [--pr]` | Implement a change. Commits to a drive branch by default; `--pr` pushes + opens a PR. | In-place: a `
|
|
49
|
+
| `write "<task>" [--pr]` | Implement a change. Commits to a drive branch by default; `--pr` pushes + opens a PR. | In-place: a `colleague/<id>` drive branch (or a PR). |
|
|
47
50
|
|
|
48
51
|
### Options
|
|
49
52
|
|
|
@@ -51,15 +54,15 @@ else an install hint.
|
|
|
51
54
|
|--------|---------|
|
|
52
55
|
| `--repo PATH` | Target repo (default: `.`). |
|
|
53
56
|
| `--base BRANCH` | Base for the `review` diff (default: `main`). |
|
|
54
|
-
| `--engine NAME` | Engine wheel (default: `$
|
|
55
|
-
| `--model NAME` | Model (default: `$
|
|
56
|
-
| `--base-url URL` | OpenAI base URL (default: `$
|
|
57
|
+
| `--engine NAME` | Engine wheel (default: `$COLLEAGUE_ENGINE` or `vllm-openai`). |
|
|
58
|
+
| `--model NAME` | Model (default: `$COLLEAGUE_MODEL` or `mmangkad/Qwen3.6-27B-NVFP4`). |
|
|
59
|
+
| `--base-url URL` | OpenAI base URL (default: `$COLLEAGUE_BASE_URL` or `http://localhost:8001/v1`). |
|
|
57
60
|
| `--max-steps N` | Loop step budget (default: 20). |
|
|
58
61
|
| `--allow-dirty` | (`write`) allow running on a dirty tree. |
|
|
59
62
|
| `--pr` | (`write`) push + open a PR instead of a local drive branch. |
|
|
60
63
|
|
|
61
64
|
The result printed to stdout is the drive's `TaskResult.summary` (plus
|
|
62
|
-
`changed_files` / drive branch for `write`), parsed from `
|
|
65
|
+
`changed_files` / drive branch for `write`), parsed from `colleague drive
|
|
63
66
|
--json`. Per-step progress streams to stderr while it runs.
|
|
64
67
|
|
|
65
68
|
## When to reach for which verb
|
|
@@ -79,7 +82,7 @@ The result printed to stdout is the drive's `TaskResult.summary` (plus
|
|
|
79
82
|
also tell the model not to modify anything. Don't route a change-making task
|
|
80
83
|
through them — use `write`.
|
|
81
84
|
- **`write` refuses a dirty tree** unless you pass `--allow-dirty`. This guards
|
|
82
|
-
the dirty-tree hazard: `
|
|
85
|
+
the dirty-tree hazard: `colleague drive --no-pr` commits *uncommitted* edits
|
|
83
86
|
onto the drive branch and leaves you there. Commit or stash first.
|
|
84
87
|
- **Outsourced output is a second opinion, not authority.** The engine may be a
|
|
85
88
|
smaller/different model; weigh its findings, verify its claims, and own the
|
|
@@ -97,7 +100,7 @@ The result printed to stdout is the drive's `TaskResult.summary` (plus
|
|
|
97
100
|
|
|
98
101
|
## Provenance
|
|
99
102
|
|
|
100
|
-
This is a **first-party
|
|
103
|
+
This is a **first-party colleague** skill — `agentculture/colleague` is its
|
|
101
104
|
origin. guildmaster **re-broadcasts** it to the mesh (the same inbound pattern as
|
|
102
105
|
the devague-origin workflow skills), tracking it in `docs/skill-sources.md`. The
|
|
103
106
|
`cite, don't import` policy holds: downstream repos copy it, they don't symlink
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
#
|
|
3
|
-
# outsource — hand a scoped repo task to
|
|
3
|
+
# outsource — hand a scoped repo task to colleague (a different engine/mind).
|
|
4
4
|
#
|
|
5
|
-
#
|
|
5
|
+
# Colleague's engine is not necessarily stronger than the calling agent; it is
|
|
6
6
|
# a *different* mind, and diversity helps — which is why `review` is the headline
|
|
7
|
-
# verb. Three verbs drive `
|
|
7
|
+
# verb. Three verbs drive `colleague drive` and print the result:
|
|
8
8
|
#
|
|
9
9
|
# outsource explore "<question or area>" read-only investigation -> findings
|
|
10
10
|
# outsource review "<what to focus on>" diverse second-opinion on the diff
|
|
@@ -19,38 +19,56 @@ set -euo pipefail
|
|
|
19
19
|
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
20
20
|
PROMPTS_DIR="$SKILL_DIR/prompts"
|
|
21
21
|
|
|
22
|
-
# ── resolve the
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
# ── resolve the colleague CLI (installed, then local-dev fallback) ─────────
|
|
23
|
+
# Rename-ahead transition: the repo was renamed `convertible` → `colleague`, but
|
|
24
|
+
# upstream still publishes `convertible-cli` / ships the `convertible` binary
|
|
25
|
+
# today (see the rename-ahead note in docs/skill-sources.md). So prefer the
|
|
26
|
+
# post-rename `colleague` and fall back to the still-shipped `convertible` until
|
|
27
|
+
# colleague republishes — the skill keeps working through the transition.
|
|
28
|
+
COLLEAGUE=()
|
|
29
|
+
resolve_colleague() {
|
|
30
|
+
local bin
|
|
31
|
+
for bin in colleague convertible; do
|
|
32
|
+
if command -v "$bin" >/dev/null 2>&1; then
|
|
33
|
+
COLLEAGUE=("$bin") # installed tool — the normal case
|
|
34
|
+
return 0
|
|
35
|
+
fi
|
|
36
|
+
done
|
|
37
|
+
# Local-dev fallback: inside the checkout, run the matching console script
|
|
38
|
+
# via uv (colleague-cli -> `colleague`, convertible-cli -> `convertible`).
|
|
30
39
|
local dir="$PWD"
|
|
31
40
|
while [[ -n "$dir" ]] && [[ "$dir" != "/" ]]; do
|
|
32
|
-
if [[ -f "$dir/pyproject.toml" ]]
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
41
|
+
if [[ -f "$dir/pyproject.toml" ]]; then
|
|
42
|
+
local name
|
|
43
|
+
name="$(grep -m1 -oE '^name = "(colleague|convertible)-cli"' \
|
|
44
|
+
"$dir/pyproject.toml" 2>/dev/null || true)"
|
|
45
|
+
if [[ -n "$name" ]]; then
|
|
46
|
+
if command -v uv >/dev/null 2>&1; then
|
|
47
|
+
[[ "$name" == *colleague-cli* ]] \
|
|
48
|
+
&& COLLEAGUE=(uv run colleague) \
|
|
49
|
+
|| COLLEAGUE=(uv run convertible)
|
|
50
|
+
return 0
|
|
51
|
+
fi
|
|
52
|
+
break # found the checkout but no uv to run it
|
|
37
53
|
fi
|
|
38
|
-
break
|
|
39
54
|
fi
|
|
40
55
|
dir=$(dirname "$dir")
|
|
41
56
|
done
|
|
42
57
|
cat >&2 <<'EOF'
|
|
43
|
-
error:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
58
|
+
error: colleague CLI not found.
|
|
59
|
+
note: the colleague repo (formerly `convertible`) may not have republished under
|
|
60
|
+
its new name yet, so the installed binary might still be `convertible`.
|
|
61
|
+
hint: install it with `uv tool install colleague-cli` (or, during the
|
|
62
|
+
rename-ahead transition, `uv tool install convertible-cli`), or run from
|
|
63
|
+
inside the checkout with `uv` available.
|
|
64
|
+
https://github.com/agentculture/colleague
|
|
47
65
|
EOF
|
|
48
66
|
return 1
|
|
49
67
|
}
|
|
50
68
|
|
|
51
69
|
usage() {
|
|
52
70
|
cat <<'EOF'
|
|
53
|
-
outsource — hand a scoped repo task to
|
|
71
|
+
outsource — hand a scoped repo task to colleague (a different engine/mind).
|
|
54
72
|
|
|
55
73
|
Usage:
|
|
56
74
|
outsource explore "<question or area>" Read-only investigation -> findings (no side effects)
|
|
@@ -60,11 +78,11 @@ Usage:
|
|
|
60
78
|
Options:
|
|
61
79
|
--repo PATH Target repo (default: .)
|
|
62
80
|
--base BRANCH Base for `review` diff (default: main)
|
|
63
|
-
--engine NAME Engine wheel (default: $
|
|
64
|
-
--model NAME Model (default: $
|
|
65
|
-
--base-url URL OpenAI base URL (default: $
|
|
81
|
+
--engine NAME Engine wheel (default: $COLLEAGUE_ENGINE or vllm-openai)
|
|
82
|
+
--model NAME Model (default: $COLLEAGUE_MODEL or mmangkad/Qwen3.6-27B-NVFP4)
|
|
83
|
+
--base-url URL OpenAI base URL (default: $COLLEAGUE_BASE_URL or http://localhost:8001/v1)
|
|
66
84
|
--max-steps N Loop step budget (default: 20)
|
|
67
|
-
--timeout N Per-request timeout, seconds (default: $
|
|
85
|
+
--timeout N Per-request timeout, seconds (default: $COLLEAGUE_TIMEOUT or 300)
|
|
68
86
|
--allow-dirty (write) allow running on a dirty tree
|
|
69
87
|
--pr (write) push + open a PR instead of a local drive branch
|
|
70
88
|
|
|
@@ -115,11 +133,13 @@ require_tools
|
|
|
115
133
|
# ── defaults + flag parsing ─────────────────────────────────────────────────
|
|
116
134
|
REPO="."
|
|
117
135
|
BASE="main"
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
136
|
+
# Read config from the new COLLEAGUE_* prefix, falling back to the legacy
|
|
137
|
+
# CONVERTIBLE_* prefix during the rename-ahead transition.
|
|
138
|
+
ENGINE="${COLLEAGUE_ENGINE:-${CONVERTIBLE_ENGINE:-vllm-openai}}"
|
|
139
|
+
MODEL="${COLLEAGUE_MODEL:-${CONVERTIBLE_MODEL:-mmangkad/Qwen3.6-27B-NVFP4}}"
|
|
140
|
+
BASE_URL="${COLLEAGUE_BASE_URL:-${CONVERTIBLE_BASE_URL:-http://localhost:8001/v1}}"
|
|
121
141
|
MAX_STEPS=20
|
|
122
|
-
TIMEOUT="${CONVERTIBLE_TIMEOUT:-300}"
|
|
142
|
+
TIMEOUT="${COLLEAGUE_TIMEOUT:-${CONVERTIBLE_TIMEOUT:-300}}"
|
|
123
143
|
ALLOW_DIRTY=0
|
|
124
144
|
OPEN_PR=0
|
|
125
145
|
ARG=""
|
|
@@ -146,10 +166,13 @@ done
|
|
|
146
166
|
[[ -d "$REPO" ]] || { echo "error: --repo is not a directory: $REPO" >&2; exit 2; }
|
|
147
167
|
REPO="$(cd "$REPO" && pwd)"
|
|
148
168
|
|
|
149
|
-
|
|
169
|
+
resolve_colleague || exit 2
|
|
150
170
|
|
|
151
171
|
# Per-request timeout is config (no drive flag); EngineConfig reads it from env.
|
|
152
|
-
# A local model can be slow on a growing context, so default generously.
|
|
172
|
+
# A local model can be slow on a growing context, so default generously. Export
|
|
173
|
+
# under both prefixes so whichever CLI we resolved (colleague or the still-shipped
|
|
174
|
+
# convertible) picks it up during the rename-ahead transition.
|
|
175
|
+
export COLLEAGUE_TIMEOUT="$TIMEOUT"
|
|
153
176
|
export CONVERTIBLE_TIMEOUT="$TIMEOUT"
|
|
154
177
|
COMMON_FLAGS=(--engine "$ENGINE" --model "$MODEL" --base-url "$BASE_URL" --max-steps "$MAX_STEPS" --json)
|
|
155
178
|
|
|
@@ -164,7 +187,7 @@ sys.stdout.write(tpl.replace("$ARGUMENTS", os.environ["ARG"]).replace("$BASE", o
|
|
|
164
187
|
PY
|
|
165
188
|
}
|
|
166
189
|
|
|
167
|
-
# ── print the TaskResult that
|
|
190
|
+
# ── print the TaskResult that colleague emitted as JSON on stdout ─────────
|
|
168
191
|
# Reads JSON on stdin; prints a human/agent-readable digest; exits non-zero if
|
|
169
192
|
# the drive failed.
|
|
170
193
|
print_result() {
|
|
@@ -175,12 +198,12 @@ print_result() {
|
|
|
175
198
|
import sys, json
|
|
176
199
|
raw = sys.stdin.read().strip()
|
|
177
200
|
if not raw:
|
|
178
|
-
sys.stderr.write("error:
|
|
201
|
+
sys.stderr.write("error: colleague produced no result on stdout (see diagnostics above)\n")
|
|
179
202
|
sys.exit(2)
|
|
180
203
|
try:
|
|
181
204
|
d = json.loads(raw)
|
|
182
205
|
except Exception:
|
|
183
|
-
sys.stderr.write("error: could not parse
|
|
206
|
+
sys.stderr.write("error: could not parse colleague --json output:\n")
|
|
184
207
|
sys.stderr.write(raw[:2000] + "\n")
|
|
185
208
|
sys.exit(2)
|
|
186
209
|
print("status:", d.get("status"))
|
|
@@ -207,10 +230,11 @@ _cleanup_worktree() {
|
|
|
207
230
|
[[ -n "$_WT" ]] || return 0
|
|
208
231
|
git -C "$REPO" worktree remove --force "$_WT" >/dev/null 2>&1 || true
|
|
209
232
|
rm -rf "$_WT" >/dev/null 2>&1 || true
|
|
210
|
-
# Only ever delete the ephemeral drive branch
|
|
211
|
-
# (convertible/<task_id>
|
|
212
|
-
#
|
|
213
|
-
if
|
|
233
|
+
# Only ever delete the ephemeral drive branch the CLI names
|
|
234
|
+
# (colleague/<task_id>, or convertible/<task_id> from the still-shipped
|
|
235
|
+
# binary during the rename-ahead transition) — never an unrelated local
|
|
236
|
+
# branch, even if the JSON `branch` value were unexpected.
|
|
237
|
+
if [[ "$_DRIVE_BRANCH" == colleague/* || "$_DRIVE_BRANCH" == convertible/* ]]; then
|
|
214
238
|
git -C "$REPO" branch -D "$_DRIVE_BRANCH" >/dev/null 2>&1 || true
|
|
215
239
|
fi
|
|
216
240
|
}
|
|
@@ -225,7 +249,7 @@ run_readonly() {
|
|
|
225
249
|
git -C "$REPO" worktree add -q --detach "$_WT" HEAD
|
|
226
250
|
|
|
227
251
|
local out
|
|
228
|
-
out="$("${
|
|
252
|
+
out="$("${COLLEAGUE[@]}" drive "$instruction" --repo "$_WT" --no-pr "${COMMON_FLAGS[@]}")" || true
|
|
229
253
|
_DRIVE_BRANCH="$(printf '%s' "$out" | python3 -c 'import sys, json
|
|
230
254
|
try:
|
|
231
255
|
print(json.load(sys.stdin).get("branch") or "")
|
|
@@ -240,14 +264,14 @@ run_write() {
|
|
|
240
264
|
if [[ "$ALLOW_DIRTY" -eq 0 ]] \
|
|
241
265
|
&& [[ -n "$(git -C "$REPO" status --porcelain 2>/dev/null)" ]]; then
|
|
242
266
|
echo "error: working tree is dirty — commit/stash first, or pass --allow-dirty" >&2
|
|
243
|
-
echo "hint: '
|
|
267
|
+
echo "hint: 'colleague drive --no-pr' commits uncommitted edits onto the drive branch" >&2
|
|
244
268
|
exit 2
|
|
245
269
|
fi
|
|
246
270
|
local out
|
|
247
271
|
if [[ "$OPEN_PR" -eq 1 ]]; then
|
|
248
|
-
out="$("${
|
|
272
|
+
out="$("${COLLEAGUE[@]}" drive "$instruction" --repo "$REPO" "${COMMON_FLAGS[@]}")"
|
|
249
273
|
else
|
|
250
|
-
out="$("${
|
|
274
|
+
out="$("${COLLEAGUE[@]}" drive "$instruction" --repo "$REPO" --no-pr "${COMMON_FLAGS[@]}")"
|
|
251
275
|
fi
|
|
252
276
|
printf '%s' "$out" | print_result
|
|
253
277
|
}
|
|
@@ -5,6 +5,60 @@ 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.10.0] - 2026-06-02
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **Rename `convertible` → `colleague` across the `outsource` skill and ledger.**
|
|
13
|
+
The upstream/origin sibling was renamed on GitHub
|
|
14
|
+
(`agentculture/convertible` → [`agentculture/colleague`](https://github.com/agentculture/colleague);
|
|
15
|
+
the old URL redirects). Propagated the **full** rename through guildmaster's
|
|
16
|
+
vendored copy and records:
|
|
17
|
+
- `.claude/skills/outsource/` (`SKILL.md` + `scripts/outsource.sh`) — CLI
|
|
18
|
+
command `convertible` → `colleague`, dist `convertible-cli` → `colleague-cli`,
|
|
19
|
+
env prefix `CONVERTIBLE_*` → `COLLEAGUE_*`, drive-branch prefix
|
|
20
|
+
`convertible/<id>` → `colleague/<id>`, repo URL, and all prose.
|
|
21
|
+
- `docs/skill-sources.md` — the inbound-first-party origin attribution, the
|
|
22
|
+
`outsource` row, the `colleague` consumer-column entries, and a new
|
|
23
|
+
**rename-ahead** note: the vendored copy targets the post-rename identity
|
|
24
|
+
*ahead of* colleague's own republish (upstream still ships `convertible-cli` /
|
|
25
|
+
the `convertible` binary today). Re-sync verbatim once colleague republishes.
|
|
26
|
+
- `guild/skills/__init__.py` — `INBOUND_ORIGINS["outsource"]` →
|
|
27
|
+
`agentculture/colleague`.
|
|
28
|
+
- **`outsource` CLI resolution: rename-ahead compatibility fallback**
|
|
29
|
+
([PR #55](https://github.com/agentculture/guildmaster/pull/55) review). Because
|
|
30
|
+
colleague still ships `convertible-cli` / the `convertible` binary today, a
|
|
31
|
+
naive rename would break the skill for everyone until upstream republishes.
|
|
32
|
+
`scripts/outsource.sh` now **prefers `colleague` and falls back to `convertible`**
|
|
33
|
+
(installed binary and local-dev `uv run`), reads config from `COLLEAGUE_*` with
|
|
34
|
+
a `CONVERTIBLE_*` fallback, exports the timeout under both prefixes, and cleans
|
|
35
|
+
up both `colleague/*` and `convertible/*` drive branches — so the skill keeps
|
|
36
|
+
working throughout the transition. Drop the fallback when colleague republishes.
|
|
37
|
+
|
|
38
|
+
Historical CHANGELOG entries (≤ 0.9.x) keep the `convertible` name — they
|
|
39
|
+
record what was true at release time; the GitHub links redirect.
|
|
40
|
+
|
|
41
|
+
## [0.9.2] - 2026-06-02
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
|
|
45
|
+
- **Onboard `reachy-mini-mcp` into the mesh** via `guild onboard --apply`
|
|
46
|
+
(`agentculture/reachy-mini-mcp` — an MCP server controlling a Reachy Mini robot
|
|
47
|
+
or simulator; a pre-existing repo with its own domain code, not a fresh
|
|
48
|
+
template clone). Files the consolidated onboarding issue
|
|
49
|
+
[`reachy-mini-mcp#10`](https://github.com/agentculture/reachy-mini-mcp/issues/10)
|
|
50
|
+
— the full canonical kit (12 skills) as per-skill sections plus an
|
|
51
|
+
identity-setup section (it has no `culture.yaml`/`CLAUDE.md` yet) — registers
|
|
52
|
+
it as a downstream consumer of every canonical skill (`agent-config`, `cicd`,
|
|
53
|
+
`communicate`, `doc-test-alignment`, `pypi-maintainer`, `run-tests`,
|
|
54
|
+
`sonarclaude`, `version-bump`), the vendored devague trio (`think`,
|
|
55
|
+
`spec-to-plan`, `assign-to-workforce`), and `outsource`, and records the
|
|
56
|
+
vendoring pins at `docs/onboarding/reachy-mini-mcp.json`.
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
|
|
8
62
|
## [0.9.1] - 2026-06-02
|
|
9
63
|
|
|
10
64
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: guild-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.0
|
|
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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"agent": "agentculture/reachy-mini-mcp",
|
|
3
|
+
"guildmaster_version": "0.9.1",
|
|
4
|
+
"kit_size": 12,
|
|
5
|
+
"skills": [
|
|
6
|
+
"agent-config",
|
|
7
|
+
"assign-to-workforce",
|
|
8
|
+
"cicd",
|
|
9
|
+
"communicate",
|
|
10
|
+
"doc-test-alignment",
|
|
11
|
+
"outsource",
|
|
12
|
+
"pypi-maintainer",
|
|
13
|
+
"run-tests",
|
|
14
|
+
"sonarclaude",
|
|
15
|
+
"spec-to-plan",
|
|
16
|
+
"think",
|
|
17
|
+
"version-bump"
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -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`, `
|
|
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`, `
|
|
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`, `
|
|
38
|
-
| `doc-test-alignment` | `guildmaster` (`.claude/skills/doc-test-alignment/`) | `devague`, `lecodeur`, `lepenseur`, `agenda`, `dominion-breaker`, `
|
|
39
|
-
| `pypi-maintainer` | `guildmaster` (`.claude/skills/pypi-maintainer/`) | `agtag`, `agenda`, `dominion-breaker`, `
|
|
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`, `
|
|
41
|
-
| `sonarclaude` | `guildmaster` (`.claude/skills/sonarclaude/`) | `antoine`, `appsec`, `code-lens-cli`, `devague`, `lecodeur`, `lepenseur`, `seer-cli`, `telek`, `agenda`, `dominion-breaker`, `
|
|
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`, `
|
|
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` | 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` | 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` | 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` | 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` | 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`, `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` | 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` | 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` | 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,24 +86,24 @@ 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`, `
|
|
90
|
-
| `spec-to-plan` | `devague` (`agentculture/devague`, `../devague/.claude/skills/spec-to-plan/`) | — (broadcast pending), `agenda`, `dominion-breaker`, `
|
|
91
|
-
| `assign-to-workforce` | `devague` (`agentculture/devague`, `../devague/.claude/skills/assign-to-workforce/`) | — (broadcast pending), `agenda`, `dominion-breaker`, `
|
|
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` | 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` | 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` | 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
|
|
95
95
|
add fresh (not stale copies to resync).
|
|
96
96
|
|
|
97
|
-
## Inbound first-party skill (origin = `
|
|
97
|
+
## Inbound first-party skill (origin = `colleague`, re-broadcast by `guildmaster`)
|
|
98
98
|
|
|
99
99
|
`outsource` flows the **same opposite direction** as the devague trio above: a
|
|
100
|
-
sibling, [`
|
|
101
|
-
author/upstream; guildmaster pulls it from
|
|
100
|
+
sibling, [`colleague`](https://github.com/agentculture/colleague), is its
|
|
101
|
+
author/upstream; guildmaster pulls it from colleague and re-broadcasts it to
|
|
102
102
|
the mesh. `cite, don't import` still applies — re-sync, when it later changes
|
|
103
|
-
upstream, from `../
|
|
103
|
+
upstream, from `../colleague/.claude/skills/outsource/`.
|
|
104
104
|
|
|
105
105
|
Where the devague skills drive a deterministic CLI, `outsource` is a portable
|
|
106
|
-
wrapper (`scripts/outsource.sh`) that drives the **`
|
|
106
|
+
wrapper (`scripts/outsource.sh`) that drives the **`colleague` CLI** so a
|
|
107
107
|
Claude agent can hand a scoped task to a *different* engine/mind (default: a
|
|
108
108
|
local vLLM `Qwen3.6-27B`) — `explore` (read-only investigation), `review` (a
|
|
109
109
|
diverse second opinion on the committed diff, the headline verb), and `write`
|
|
@@ -113,21 +113,33 @@ isolated in a throwaway `git worktree` at HEAD; `write` refuses a dirty tree.
|
|
|
113
113
|
**Divergence from verbatim.** The upstream copy already carries `type: command`
|
|
114
114
|
(load-bearing on the culture backend), so no frontmatter change was needed. The
|
|
115
115
|
**only** edit is the SKILL.md *Provenance* paragraph: upstream says "the inverse
|
|
116
|
-
of the other skills … which
|
|
117
|
-
|
|
116
|
+
of the other skills … which colleague vendors *from* guildmaster" — true in
|
|
117
|
+
colleague's repo, misleading here — reframed to "guildmaster re-broadcasts it
|
|
118
118
|
… tracking it in `docs/skill-sources.md`." No script or prompt body is edited.
|
|
119
119
|
|
|
120
|
-
**Runtime dependency:** the `
|
|
121
|
-
(`uv tool install
|
|
122
|
-
default via `--engine` / `--model` / `--base-url` or `
|
|
120
|
+
**Runtime dependency:** the `colleague` CLI on `PATH`
|
|
121
|
+
(`uv tool install colleague-cli`) plus a reachable engine (override the local
|
|
122
|
+
default via `--engine` / `--model` / `--base-url` or `COLLEAGUE_*` env). Absent
|
|
123
123
|
the CLI, the wrapper exits with a clear install hint rather than crashing.
|
|
124
124
|
|
|
125
|
+
> **Rename-ahead (`convertible` → `colleague`).** The GitHub repo was renamed
|
|
126
|
+
> `agentculture/convertible` → `agentculture/colleague` (the old URL redirects).
|
|
127
|
+
> This vendored copy is updated to the post-rename identity — command `colleague`,
|
|
128
|
+
> dist `colleague-cli`, `COLLEAGUE_*` env — **ahead of** colleague's own republish:
|
|
129
|
+
> upstream still publishes `convertible-cli` and ships the `convertible` binary
|
|
130
|
+
> today. To stay working through the transition, `scripts/outsource.sh` resolves
|
|
131
|
+
> the CLI with a **compatibility fallback** — it prefers `colleague`
|
|
132
|
+
> (installed/local-dev/`COLLEAGUE_*` env) and falls back to the still-shipped
|
|
133
|
+
> `convertible`, exports the timeout under both env prefixes, and cleans up both
|
|
134
|
+
> `colleague/*` and `convertible/*` drive branches. Drop the fallback and re-sync
|
|
135
|
+
> verbatim once colleague republishes under the new name.
|
|
136
|
+
|
|
125
137
|
| Skill | Origin | Downstream copies (known) | Notes |
|
|
126
138
|
|-------|--------|---------------------------|-------|
|
|
127
|
-
| `outsource` | `
|
|
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` | 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. |
|
|
128
140
|
|
|
129
141
|
Downstream is empty by design — guildmaster is the first holder outside
|
|
130
|
-
|
|
142
|
+
colleague. `guild teach --new --skill outsource --to <repos>` frames it as a
|
|
131
143
|
*new* skill when broadcasting.
|
|
132
144
|
|
|
133
145
|
## guildmaster-origin skills (origin = `guildmaster`)
|
|
@@ -16,13 +16,13 @@ from __future__ import annotations
|
|
|
16
16
|
# Skills whose origin is a *sibling* (not guildmaster): re-broadcasting them
|
|
17
17
|
# carries an origin-attribution block so consumers know guildmaster only
|
|
18
18
|
# re-broadcasts. Mirrors the "Inbound workflow skills" + "Inbound first-party"
|
|
19
|
-
# sections of ``docs/skill-sources.md`` (the devague trio;
|
|
19
|
+
# sections of ``docs/skill-sources.md`` (the devague trio; colleague's
|
|
20
20
|
# ``outsource``).
|
|
21
21
|
INBOUND_ORIGINS: dict[str, str] = {
|
|
22
22
|
"think": "agentculture/devague",
|
|
23
23
|
"spec-to-plan": "agentculture/devague",
|
|
24
24
|
"assign-to-workforce": "agentculture/devague",
|
|
25
|
-
"outsource": "agentculture/
|
|
25
|
+
"outsource": "agentculture/colleague",
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
# guildmaster's own skills — present in ``.claude/skills/`` but NOT part of the
|
|
File without changes
|
{guild_cli-0.9.1 → guild_cli-0.10.0}/.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.9.1 → guild_cli-0.10.0}/.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
|
{guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/pypi-maintainer/scripts/switch-source.sh
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
|