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.
Files changed (109) hide show
  1. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/outsource/SKILL.md +20 -17
  2. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/outsource/scripts/outsource.sh +67 -43
  3. {guild_cli-0.9.1 → guild_cli-0.10.0}/CHANGELOG.md +54 -0
  4. {guild_cli-0.9.1 → guild_cli-0.10.0}/PKG-INFO +1 -1
  5. guild_cli-0.10.0/docs/onboarding/reachy-mini-mcp.json +19 -0
  6. {guild_cli-0.9.1 → guild_cli-0.10.0}/docs/skill-sources.md +35 -23
  7. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/skills/__init__.py +2 -2
  8. {guild_cli-0.9.1 → guild_cli-0.10.0}/pyproject.toml +1 -1
  9. {guild_cli-0.9.1 → guild_cli-0.10.0}/uv.lock +1 -1
  10. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/agent-config/SKILL.md +0 -0
  11. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
  12. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/agent-config/scripts/show.sh +0 -0
  13. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  14. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  15. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/cicd/SKILL.md +0 -0
  16. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  17. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  18. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  19. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  20. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  21. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/SKILL.md +0 -0
  22. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  23. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  24. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  25. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  26. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
  27. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  28. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  29. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  30. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/guild/SKILL.md +0 -0
  31. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/guild/scripts/configure-repo.sh +0 -0
  32. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/guild/scripts/create.sh +0 -0
  33. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/guild/scripts/overview.sh +0 -0
  34. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/onboard/SKILL.md +0 -0
  35. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/onboard/scripts/onboard.sh +0 -0
  36. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/outsource/prompts/explore.md +0 -0
  37. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/outsource/prompts/review.md +0 -0
  38. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/outsource/prompts/write.md +0 -0
  39. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
  40. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
  41. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/run-tests/SKILL.md +0 -0
  42. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
  43. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/sonarclaude/SKILL.md +0 -0
  44. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  45. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  46. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  47. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/teach/SKILL.md +0 -0
  48. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/teach/scripts/teach.sh +0 -0
  49. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/think/SKILL.md +0 -0
  50. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/think/scripts/think.sh +0 -0
  51. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/version-bump/SKILL.md +0 -0
  52. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills/version-bump/scripts/bump.py +0 -0
  53. {guild_cli-0.9.1 → guild_cli-0.10.0}/.claude/skills.local.yaml.example +0 -0
  54. {guild_cli-0.9.1 → guild_cli-0.10.0}/.devague/frames/guildmaster-ships-teach-and-onboard-two-agent-firs.json +0 -0
  55. {guild_cli-0.9.1 → guild_cli-0.10.0}/.devague/plans/guildmaster-ships-teach-and-onboard-two-agent-firs.json +0 -0
  56. {guild_cli-0.9.1 → guild_cli-0.10.0}/.flake8 +0 -0
  57. {guild_cli-0.9.1 → guild_cli-0.10.0}/.github/workflows/publish.yml +0 -0
  58. {guild_cli-0.9.1 → guild_cli-0.10.0}/.github/workflows/tests.yml +0 -0
  59. {guild_cli-0.9.1 → guild_cli-0.10.0}/.gitignore +0 -0
  60. {guild_cli-0.9.1 → guild_cli-0.10.0}/.markdownlint-cli2.yaml +0 -0
  61. {guild_cli-0.9.1 → guild_cli-0.10.0}/CLAUDE.md +0 -0
  62. {guild_cli-0.9.1 → guild_cli-0.10.0}/LICENSE +0 -0
  63. {guild_cli-0.9.1 → guild_cli-0.10.0}/README.md +0 -0
  64. {guild_cli-0.9.1 → guild_cli-0.10.0}/culture.yaml +0 -0
  65. {guild_cli-0.9.1 → guild_cli-0.10.0}/docs/cutover.md +0 -0
  66. {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
  67. {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
  68. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/__init__.py +0 -0
  69. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/__main__.py +0 -0
  70. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/__init__.py +0 -0
  71. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/__init__.py +0 -0
  72. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/_broadcast.py +0 -0
  73. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/_provision_template.py +0 -0
  74. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/create.py +0 -0
  75. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/explain.py +0 -0
  76. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/learn.py +0 -0
  77. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/onboard.py +0 -0
  78. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/overview.py +0 -0
  79. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/show.py +0 -0
  80. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/teach.py +0 -0
  81. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_commands/whoami.py +0 -0
  82. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_errors.py +0 -0
  83. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_output.py +0 -0
  84. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/cli/_repo.py +0 -0
  85. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/scaffold/__init__.py +0 -0
  86. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/scaffold/instantiate.py +0 -0
  87. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/skills/identity.py +0 -0
  88. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/skills/ledger.py +0 -0
  89. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/skills/render.py +0 -0
  90. {guild_cli-0.9.1 → guild_cli-0.10.0}/guild/skills/sources.py +0 -0
  91. {guild_cli-0.9.1 → guild_cli-0.10.0}/sonar-project.properties +0 -0
  92. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/__init__.py +0 -0
  93. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_broadcast_post.py +0 -0
  94. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli.py +0 -0
  95. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_create.py +0 -0
  96. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_explain.py +0 -0
  97. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_learn.py +0 -0
  98. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_onboard.py +0 -0
  99. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_overview.py +0 -0
  100. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_show.py +0 -0
  101. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_teach.py +0 -0
  102. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_cli_whoami.py +0 -0
  103. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_scaffold_instantiate.py +0 -0
  104. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_skills_convention.py +0 -0
  105. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_skills_identity.py +0 -0
  106. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_skills_ledger.py +0 -0
  107. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_skills_render.py +0 -0
  108. {guild_cli-0.9.1 → guild_cli-0.10.0}/tests/test_skills_sources.py +0 -0
  109. {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 convertible — a *different* engine/model than you
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 convertible review/explore/
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 convertible as a different mind
16
+ # outsource — use colleague as a different mind
17
17
 
18
- `outsource` drives the **`convertible`** CLI so a Claude agent can hand a scoped
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`). Convertible's model is **not** assumed to be stronger than you — its
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 `convertible drive`, then prints the drive's result summary.
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
- convertible to work on:
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 `convertible` on `PATH` (the normal
37
- case), falling back to `uv run convertible` when inside the convertible checkout,
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 `convertible/<id>` drive branch (or a PR). |
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: `$CONVERTIBLE_ENGINE` or `vllm-openai`). |
55
- | `--model NAME` | Model (default: `$CONVERTIBLE_MODEL` or `mmangkad/Qwen3.6-27B-NVFP4`). |
56
- | `--base-url URL` | OpenAI base URL (default: `$CONVERTIBLE_BASE_URL` or `http://localhost:8001/v1`). |
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 `convertible drive
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: `convertible drive --no-pr` commits *uncommitted* edits
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 convertible** skill — `agentculture/convertible` is its
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 convertible (a different engine/mind).
3
+ # outsource — hand a scoped repo task to colleague (a different engine/mind).
4
4
  #
5
- # Convertible's engine is not necessarily stronger than the calling agent; it is
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 `convertible drive` and print the result:
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 convertible CLI (installed, then local-dev fallback) ─────────
23
- CONVERTIBLE=()
24
- resolve_convertible() {
25
- if command -v convertible >/dev/null 2>&1; then
26
- CONVERTIBLE=(convertible) # installed tool the normal case
27
- return 0
28
- fi
29
- # Local-dev fallback: inside the convertible checkout, run via uv.
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
- && grep -q '^name = "convertible-cli"' "$dir/pyproject.toml" 2>/dev/null; then
34
- if command -v uv >/dev/null 2>&1; then
35
- CONVERTIBLE=(uv run convertible)
36
- return 0
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: convertible CLI not found.
44
- hint: install it with `uv tool install convertible-cli` (or `pipx install convertible-cli`),
45
- or run from inside the convertible checkout with `uv` available.
46
- https://github.com/agentculture/convertible
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 convertible (a different engine/mind).
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: $CONVERTIBLE_ENGINE or vllm-openai)
64
- --model NAME Model (default: $CONVERTIBLE_MODEL or mmangkad/Qwen3.6-27B-NVFP4)
65
- --base-url URL OpenAI base URL (default: $CONVERTIBLE_BASE_URL or http://localhost:8001/v1)
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: $CONVERTIBLE_TIMEOUT or 300)
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
- ENGINE="${CONVERTIBLE_ENGINE:-vllm-openai}"
119
- MODEL="${CONVERTIBLE_MODEL:-mmangkad/Qwen3.6-27B-NVFP4}"
120
- BASE_URL="${CONVERTIBLE_BASE_URL:-http://localhost:8001/v1}"
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
- resolve_convertible || exit 2
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 convertible emitted as JSON on stdout ─────────
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: convertible produced no result on stdout (see diagnostics above)\n")
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 convertible --json output:\n")
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 convertible names
211
- # (convertible/<task_id>) never an unrelated local branch, even if the
212
- # JSON `branch` value were unexpected.
213
- if [[ "$_DRIVE_BRANCH" == convertible/* ]]; then
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="$("${CONVERTIBLE[@]}" drive "$instruction" --repo "$_WT" --no-pr "${COMMON_FLAGS[@]}")" || true
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: 'convertible drive --no-pr' commits uncommitted edits onto the drive branch" >&2
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="$("${CONVERTIBLE[@]}" drive "$instruction" --repo "$REPO" "${COMMON_FLAGS[@]}")"
272
+ out="$("${COLLEAGUE[@]}" drive "$instruction" --repo "$REPO" "${COMMON_FLAGS[@]}")"
249
273
  else
250
- out="$("${CONVERTIBLE[@]}" drive "$instruction" --repo "$REPO" --no-pr "${COMMON_FLAGS[@]}")"
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.9.1
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`, `convertible`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-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`, `convertible`, `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` | 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`, `convertible`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-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`, `convertible`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-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`, `convertible`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli` | 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`, `convertible`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-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`, `convertible`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-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`, `convertible`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-cli` | 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` | 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`, `convertible`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-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`, `convertible`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-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`, `convertible`, `jetson`, `reachy-mini-cli`, `jetson-ai-lab-cli`, `dgx-spark-cli`, `unsloth-cli`, `discord-bot-cli`, `arxivist`, `rtx-spark-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`). |
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 = `convertible`, re-broadcast by `guildmaster`)
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, [`convertible`](https://github.com/agentculture/convertible), is its
101
- author/upstream; guildmaster pulls it from convertible and re-broadcasts it to
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 `../convertible/.claude/skills/outsource/`.
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 **`convertible` CLI** so a
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 convertible vendors *from* guildmaster" — true in
117
- convertible's repo, misleading here — reframed to "guildmaster re-broadcasts it
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 `convertible` CLI on `PATH`
121
- (`uv tool install convertible-cli`) plus a reachable engine (override the local
122
- default via `--engine` / `--model` / `--base-url` or `CONVERTIBLE_*` env). Absent
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` | `convertible` (`agentculture/convertible`, `../convertible/.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` | First-party convertible 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 convertible-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` | 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
- convertible. `guild teach --new --skill outsource --to <repos>` frames it as a
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; convertible's
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/convertible",
25
+ "outsource": "agentculture/colleague",
26
26
  }
27
27
 
28
28
  # guildmaster's own skills — present in ``.claude/skills/`` but NOT part of the
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "guild-cli"
3
- version = "0.9.1"
3
+ version = "0.10.0"
4
4
  description = "guildmaster — an agent and CLI that manages skills for the AgentCulture mesh."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -179,7 +179,7 @@ wheels = [
179
179
 
180
180
  [[package]]
181
181
  name = "guild-cli"
182
- version = "0.9.1"
182
+ version = "0.10.0"
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
File without changes