agex-cli 0.29.0__tar.gz → 0.29.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agex_cli-0.29.2/.claude/skills/ask-colleague/SKILL.md +178 -0
- agex_cli-0.29.2/.claude/skills/ask-colleague/prompts/explore.md +25 -0
- agex_cli-0.29.2/.claude/skills/ask-colleague/prompts/review.md +36 -0
- agex_cli-0.29.2/.claude/skills/ask-colleague/prompts/write.md +15 -0
- agex_cli-0.29.2/.claude/skills/ask-colleague/scripts/ask-colleague.sh +566 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.github/workflows/test.yml +22 -0
- agex_cli-0.29.2/.markdownlint-cli2.yaml +29 -0
- agex_cli-0.29.2/.pre-commit-config.yaml +6 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/CHANGELOG.md +44 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/CLAUDE.md +1 -1
- {agex_cli-0.29.0 → agex_cli-0.29.2}/PKG-INFO +1 -1
- {agex_cli-0.29.0 → agex_cli-0.29.2}/docs/skill-sources.md +14 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/pyproject.toml +1 -1
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/topics/cicd/SKILL.md +1 -1
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/topics/introspect/SKILL.md +1 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/uv.lock +1 -1
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/agent-config/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/agent-config/scripts/show.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/cicd/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/cicd/scripts/workflow.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/communicate/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/run-tests/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/sonarclaude/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/spec-to-plan/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/think/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/think/scripts/think.sh +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/version-bump/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.claude/skills/version-bump/scripts/bump.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.devague/frames/devex-now-turns-a-push-into-continuous-pr-manageme.json +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.devague/frames/every-devex-command-now-closes-with-a-deterministi.json +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.devague/plans/devex-now-turns-a-push-into-continuous-pr-manageme.json +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.devague/plans/every-devex-command-now-closes-with-a-deterministi.json +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.flake8 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.github/workflows/publish.yml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.gitignore +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/.python-version +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/LICENSE +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/README.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/culture.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/docs/plans/2026-05-29-devex-now-turns-a-push-into-continuous-pr-manageme.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/docs/plans/2026-05-29-every-devex-command-now-closes-with-a-deterministi.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/docs/specs/2026-05-29-devex-now-turns-a-push-into-continuous-pr-manageme.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/docs/specs/2026-05-29-every-devex-command-now-closes-with-a-deterministi.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/docs/superpowers/plans/2026-04-18-agex-v0.1.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/docs/superpowers/plans/2026-05-10-agex-pr.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/docs/superpowers/specs/2026-04-18-agex-design.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/docs/superpowers/specs/2026-04-26-agex-doctor.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/docs/superpowers/specs/2026-05-10-agex-pr-design.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/sonar-project.properties +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/__main__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/acp/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/acp/probe.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/capabilities/acp.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/capabilities/claude-code.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/capabilities/codex.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/capabilities/copilot.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/claude_code/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/claude_code/probe.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/codex/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/codex/probe.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/copilot/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/backends/copilot/probe.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/cli.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/assets/backends/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/assets/backends/acp.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/assets/backends/claude-code.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/assets/backends/codex.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/assets/backends/copilot.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/assets/report.md.j2 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/references/design.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/scripts/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/scripts/_footer.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/scripts/doctor.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/doctor/scripts/next_step.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/assets/backends/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/assets/backends/acp.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/assets/backends/claude-code.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/assets/backends/codex.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/assets/backends/copilot.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/assets/topics/devex.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/references/.gitkeep +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/scripts/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/scripts/_footer.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/scripts/explain.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/explain/scripts/next_step.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/gamify/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/gamify/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/gamify/assets/backends/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/gamify/assets/backends/acp.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/gamify/assets/backends/claude-code.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/gamify/assets/backends/codex.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/gamify/assets/backends/copilot.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/gamify/assets/hooks/claude-code.json +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/gamify/references/.gitkeep +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/gamify/scripts/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/gamify/scripts/install.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/gamify/scripts/next_step.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/assets/backends/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/assets/backends/acp.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/assets/backends/claude-code.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/assets/backends/codex.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/assets/backends/copilot.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/assets/table.md.j2 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/references/.gitkeep +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/scripts/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/scripts/_footer.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/scripts/next_step.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/scripts/read.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/hook/scripts/write.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/backends/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/backends/acp.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/backends/claude-code.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/backends/codex.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/backends/copilot.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/menu.md.j2 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/topics/gamify/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/topics/gamify/assets/skill-template/claude-code/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/topics/introspect/assets/skill-template/claude-code/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/topics/levelup/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/topics/levelup/assets/skill-template/claude-code/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/topics/visualize/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/assets/topics/visualize/assets/skill-template/claude-code/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/references/.gitkeep +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/scripts/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/scripts/learn.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/learn/scripts/next_step.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/assets/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/assets/backends/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/assets/backends/acp.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/assets/backends/claude-code.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/assets/backends/codex.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/assets/backends/copilot.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/assets/sections.md.j2 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/references/.gitkeep +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/scripts/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/scripts/_footer.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/scripts/next_step.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/overview/scripts/overview.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/backends/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/backends/acp.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/backends/claude-code.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/backends/codex.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/backends/copilot.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/rules/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/rules/lint_rules.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/rules/next_step_rules.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/templates/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/templates/delta.md.j2 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/templates/lint_result.md.j2 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/templates/pr_await_detached.md.j2 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/templates/pr_briefing.md.j2 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/templates/pr_open_result.md.j2 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/templates/pr_reply_result.md.j2 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/assets/templates/pr_review_result.md.j2 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/_await_worker.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/_deploy.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/_detach.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/_footer.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/_journal.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/_qodo.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/_readiness.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/_sonar.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/_webhook.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/await_.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/delta.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/lint.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/open_.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/read.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/reply.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/pr/scripts/review.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/push/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/push/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/push/assets/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/push/assets/backends/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/push/assets/backends/acp.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/push/assets/backends/claude-code.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/push/assets/backends/codex.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/push/assets/backends/copilot.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/push/scripts/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/commands/push/scripts/push.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/_jsonl.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/assets/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/assets/backends/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/assets/backends/neutral.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/assets/footer.md.j2 +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/backend.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/capabilities.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/config.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/footer.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/github.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/hook_io.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/journal.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/paths.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/prog.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/render.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/skill_loader.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/src/devex/core/webhook.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tester-agents/claude/.claude/settings.json +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tester-agents/claude/.claude/skills +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tester-agents/claude/CLAUDE.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tester-agents/claude/README.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tester-agents/claude/culture.yaml +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/backends/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/backends/test_claude_code_probe.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/backends/test_stub_probes.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/fixtures/gh/.gitkeep +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/fixtures/gh/pr_checks_42.json +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/fixtures/gh/pr_comments_42.json +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/fixtures/gh/qodo_summary_comment.html +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/fixtures/journals/dogfood_40.jsonl +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_await.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_await_detach.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_delta.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_deploy.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_footer.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_lint.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_lint_rules.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_open.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_qodo.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_read.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_readiness.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_reply.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_review.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/pr/test_webhook_helper.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/push/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/push/test_push.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/push/test_push_backends.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/test_doctor.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/test_explain.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/test_gamify.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/test_hook.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/test_learn.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/test_overview.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/commands/test_prog_propagation.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/conftest.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/__init__.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_backend.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_capabilities.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_config.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_footer.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_github.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_hook_io.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_journal.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_paths.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_prog.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_render.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_resolve_backend.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_skill_loader.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_version_lookup.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_webhook.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/core/test_webhook_live.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/fixtures/claude-code/empty/.gitkeep +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/fixtures/claude-code/malformed/.claude/hooks.json +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/fixtures/claude-code/malformed/.claude/settings.json +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/fixtures/claude-code/malformed/.claude/skills/bad/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/fixtures/claude-code/malformed/.claude/skills/broken-yaml/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/fixtures/claude-code/typical/.claude/hooks.json +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/fixtures/claude-code/typical/.claude/settings.json +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/fixtures/claude-code/typical/.claude/skills/example/SKILL.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/fixtures/claude-code/typical/CLAUDE.md +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/test_cli_dispatch.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/test_cli_errors.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/test_cli_smoke.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/test_footer_guarantee.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/test_footer_hints.py +0 -0
- {agex_cli-0.29.0 → agex_cli-0.29.2}/tests/test_skill_md_consistency.py +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ask-colleague
|
|
3
|
+
type: command
|
|
4
|
+
description: >
|
|
5
|
+
Ask colleague — a *different* backend/model than you (e.g. a local vLLM Qwen) —
|
|
6
|
+
to take a scoped repo task off your plate, then fold its answer back. The point
|
|
7
|
+
isn't a stronger model; it's a second, independent mind, and that diversity is
|
|
8
|
+
the value: `ask-colleague review` gets a candid second opinion on a diff,
|
|
9
|
+
`ask-colleague explore` gets a fresh read of an area, `ask-colleague write`
|
|
10
|
+
hands off a small implementation, and `ask-colleague feedback` grades a finished
|
|
11
|
+
work item (the ROI loop). Reach for it REFLEXIVELY, the way you'd lean over to the
|
|
12
|
+
teammate at the next desk — not only when asked: before you present or open a PR
|
|
13
|
+
on a non-trivial committed diff, run `review` for a diverse second opinion; for a
|
|
14
|
+
fresh read of an unfamiliar area whose answer is independent of your current
|
|
15
|
+
context, run `explore`. Both are read-only — isolated in a throwaway git
|
|
16
|
+
worktree, zero side effects — so the reflex is always safe; the side-effecting
|
|
17
|
+
`write --apply` / `write --pr` still needs the user's go-ahead. Triggers when the
|
|
18
|
+
user says "ask colleague", "ask a colleague to review/explore/write this", "have
|
|
19
|
+
colleague take a look", "get a second opinion", "ask the other model", "rate that
|
|
20
|
+
work item" — and still on the legacy "outsource this". Colleague's output is a second
|
|
21
|
+
opinion to verify and own, never authority.
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# ask-colleague — lean on colleague as a different mind
|
|
25
|
+
|
|
26
|
+
`ask-colleague` drives the **`colleague`** CLI so a Claude agent can hand a scoped
|
|
27
|
+
task to a *different* backend (default: a local vLLM `Qwen3.6-27B` on
|
|
28
|
+
`:8001`). Colleague's model is **not** assumed to be stronger than you — its
|
|
29
|
+
value is **diversity**. A second, independent mind catches things the author's
|
|
30
|
+
mind glides past, which is why **review** is the headline verb. Treat it the way
|
|
31
|
+
you'd turn to the colleague at the next desk: a quick, low-ceremony ask, not a
|
|
32
|
+
heavyweight handoff.
|
|
33
|
+
|
|
34
|
+
This skill is the operator: a portable wrapper that resolves the CLI and turns
|
|
35
|
+
each verb into a `colleague drive`, then prints the work item's result summary.
|
|
36
|
+
|
|
37
|
+
## The reflex — when to ask colleague *unprompted*
|
|
38
|
+
|
|
39
|
+
Don't wait to be told. The two read-only verbs have **zero side
|
|
40
|
+
effects** (throwaway worktree, can't touch your tree), so reaching for them is
|
|
41
|
+
always safe — make it a habit on tasks that fit:
|
|
42
|
+
|
|
43
|
+
**GO** (reach out on your own — default to the read-only verbs):
|
|
44
|
+
|
|
45
|
+
- **`review` — the standing reflex.** You (or a subagent) just produced a
|
|
46
|
+
non-trivial *committed* diff and are about to present it or open a PR. Get a
|
|
47
|
+
diverse second opinion *first*. A different mind catches what the author's mind
|
|
48
|
+
glides past — that's the whole point. A real review on a local model takes tens
|
|
49
|
+
of seconds to a few minutes (it reads the diff + touched files), so **kick it
|
|
50
|
+
off in the background and keep working** rather than blocking on it; fold the
|
|
51
|
+
findings in when it lands.
|
|
52
|
+
- **`explore`** — you need to understand an unfamiliar area whose answer is
|
|
53
|
+
**independent of your current context**, and you could be doing something else
|
|
54
|
+
meanwhile. Fan it out, fold the findings back.
|
|
55
|
+
- A scoped, **verifiable** subtask where a fresh pass raises your confidence and
|
|
56
|
+
you can cheaply check the result.
|
|
57
|
+
|
|
58
|
+
**NO-GO** (just do it yourself):
|
|
59
|
+
|
|
60
|
+
- Work that needs *your* accumulated context, the user's intent, or cross-cutting
|
|
61
|
+
design judgment — a context-free second mind will drift, not help.
|
|
62
|
+
- Anything **outward-facing or destructive** without a user nod: `write --apply` /
|
|
63
|
+
`write --pr`, posting, deleting. The read-only verbs are the unprompted reflex;
|
|
64
|
+
side-effecting ones are not.
|
|
65
|
+
- Trivial work that's faster to just do (a one-line edit) — the work item + fold-back
|
|
66
|
+
costs more than the edit.
|
|
67
|
+
- Output you can't verify cheaply — if you can't check it, diversity is just noise.
|
|
68
|
+
|
|
69
|
+
**Guardrails (always):**
|
|
70
|
+
|
|
71
|
+
- **One-glance readiness.** `colleague whoami` names the live work engine +
|
|
72
|
+
model; if it reports `mock` or you're unsure the server is up, run `colleague
|
|
73
|
+
doctor --probe`. Don't burn time on a dead or no-op backend.
|
|
74
|
+
- **Second opinion, not authority.** colleague is a *different* mind, not a
|
|
75
|
+
stronger one. Weigh its findings, verify its claims, own the decision. Diversity
|
|
76
|
+
is the value; verification is the price.
|
|
77
|
+
- **Close the loop.** Occasionally `ask-colleague feedback last --rating N` so the
|
|
78
|
+
ROI of asking colleague for this *kind* of task is measurable — and you learn
|
|
79
|
+
when to stop.
|
|
80
|
+
|
|
81
|
+
## How to run
|
|
82
|
+
|
|
83
|
+
The entry point is `scripts/ask-colleague.sh`. Invoke it from the repo you want
|
|
84
|
+
colleague to work on:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
bash .claude/skills/ask-colleague/scripts/ask-colleague.sh <verb> "<text>" [options]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
It resolves the CLI portably — an installed `colleague` on `PATH` (the normal
|
|
91
|
+
case), falling back to `uv run colleague` when inside the colleague checkout,
|
|
92
|
+
else an install hint.
|
|
93
|
+
|
|
94
|
+
### Verbs
|
|
95
|
+
|
|
96
|
+
| Verb | What it does | Side effects |
|
|
97
|
+
|------|--------------|--------------|
|
|
98
|
+
| `explore "<question or area>"` | Read-only investigation of the repo; the model reads and reports findings. | **None** — runs in a throwaway worktree at HEAD. |
|
|
99
|
+
| `review "<what to focus on>" [--base main]` | A diverse second opinion on the **committed** diff (`<base>...HEAD`). | **None** — throwaway worktree; reviews committed changes only. |
|
|
100
|
+
| `write "<task>" [--apply\|--pr]` | Implement a change. **Previews by default** (throwaway worktree, prints the would-be diff); `--apply` lands a work branch in place; `--pr` pushes + opens a PR. | **None** by default (preview); a `colleague/<id>` work branch / PR only with `--apply` / `--pr`. |
|
|
101
|
+
| `feedback <id\|last> [--rating N]` | **Grade a finished work item** (the ROI loop). With `--rating N` (1–5, plus `--notes`) it records feedback; without, it shows the work item's existing feedback. `last` resolves the most recent work item in `--repo`. | Writes `.colleague/<id>.feedback.json` only when `--rating` is given; read-only otherwise. |
|
|
102
|
+
|
|
103
|
+
### Options
|
|
104
|
+
|
|
105
|
+
| Option | Meaning |
|
|
106
|
+
|--------|---------|
|
|
107
|
+
| `--repo PATH` | Target repo (default: `.`). |
|
|
108
|
+
| `--base BRANCH` | Base for the `review` diff (default: `main`). |
|
|
109
|
+
| `--engine NAME` | Backend plugin (default: `$COLLEAGUE_ENGINE` or `vllm-openai`). |
|
|
110
|
+
| `--model NAME` | Model (default: `$COLLEAGUE_MODEL` or `sakamakismile/Qwen3.6-27B-Text-NVFP4-MTP`). |
|
|
111
|
+
| `--base-url URL` | OpenAI base URL (default: `$COLLEAGUE_BASE_URL` or `http://localhost:8001/v1`). |
|
|
112
|
+
| `--max-steps N` | Loop step budget (default: 20). |
|
|
113
|
+
| `--apply` | (`write`) apply the change in place (work branch) instead of previewing. |
|
|
114
|
+
| `--allow-dirty` | (`write`) allow running on a dirty tree (only matters with `--apply` / `--pr`). |
|
|
115
|
+
| `--pr` | (`write`) push + open a PR instead of a local work branch (implies `--apply`). |
|
|
116
|
+
| `--rating N` | (`feedback`) record a 1–5 quality rating for the work item. |
|
|
117
|
+
| `--notes "..."` | (`feedback`) free-text notes stored with the rating. |
|
|
118
|
+
| `--by NAME` | (`feedback`) who is grading (default: colleague's resolved identity). |
|
|
119
|
+
|
|
120
|
+
The result printed to stdout is the work item's `TaskResult.summary` (plus
|
|
121
|
+
`changed_files` / work branch for `write`), parsed from `colleague drive
|
|
122
|
+
--json`. Per-step progress streams to stderr while it runs.
|
|
123
|
+
|
|
124
|
+
## When to reach for which verb
|
|
125
|
+
|
|
126
|
+
- **review** — the standing use. You wrote (or an agent wrote) a change and you
|
|
127
|
+
want a candid, independent pass over the *committed* diff before you trust it.
|
|
128
|
+
Treat the output as a second opinion to weigh, not a verdict.
|
|
129
|
+
- **explore** — you want a fresh, unbiased read of an unfamiliar area ("how does
|
|
130
|
+
X work here?") without anchoring on your own assumptions.
|
|
131
|
+
- **write** — a small, well-scoped implementation you're happy to delegate. It
|
|
132
|
+
**previews by default** (runs in a throwaway worktree and prints the would-be
|
|
133
|
+
diff without touching your tree); pass `--apply` to land it on a
|
|
134
|
+
`colleague/<id>` work branch you can inspect, merge, or discard, or `--pr` to
|
|
135
|
+
open a PR.
|
|
136
|
+
- **feedback** — *after* colleague finishes a work item, close the loop: record how
|
|
137
|
+
good it was. Every work item's artifact already carries always-on **stats** (elapsed
|
|
138
|
+
time, tokens read/generated, tools used, bytes written, reasoning-vs-answer
|
|
139
|
+
sizes); `feedback` adds a 1–5 quality grade. Stats say what it *cost*, feedback
|
|
140
|
+
says how *good* it was — together they let you compute the **ROI of asking
|
|
141
|
+
colleague** and decide whether to ask again (and which backend). Grade the most
|
|
142
|
+
recent work item with `ask-colleague feedback last --rating 4 --notes "…"`.
|
|
143
|
+
|
|
144
|
+
## Hard rules (do not violate)
|
|
145
|
+
|
|
146
|
+
- **explore and review are read-only.** They run in a throwaway `git worktree`
|
|
147
|
+
at HEAD, so a stray write can't reach your working tree or branch; the prompts
|
|
148
|
+
also tell the model not to modify anything. Don't route a change-making task
|
|
149
|
+
through them — use `write`.
|
|
150
|
+
- **`write` previews by default; applying refuses a dirty tree.** A preview runs
|
|
151
|
+
in an isolated worktree and never touches your tree, so it is safe even when
|
|
152
|
+
dirty. `--apply` / `--pr` (the in-place path) refuses a dirty tree unless you
|
|
153
|
+
pass `--allow-dirty` — this guards the dirty-tree hazard: committing
|
|
154
|
+
*uncommitted* edits onto the work branch and leaving you there. Commit or
|
|
155
|
+
stash first before applying. `--allow-dirty` is propagated to the runtime,
|
|
156
|
+
which since colleague#149 enforces the same guard directly (a bare
|
|
157
|
+
`colleague drive` also refuses uncommitted *tracked* changes).
|
|
158
|
+
- **Colleague's output is a second opinion, not authority.** The backend may be a
|
|
159
|
+
smaller/different model; weigh its findings, verify its claims, and own the
|
|
160
|
+
decision yourself.
|
|
161
|
+
|
|
162
|
+
## Honest limits
|
|
163
|
+
|
|
164
|
+
- Read-only is enforced by **worktree isolation + prompt constraint**, not a
|
|
165
|
+
sandbox — the loop always exposes `write_file`/`run_command`, so the model can
|
|
166
|
+
still run arbitrary *read-only* commands.
|
|
167
|
+
- `review` covers **committed** changes only (`<base>...HEAD`). To review
|
|
168
|
+
uncommitted work, commit it first.
|
|
169
|
+
- The default backend is whatever single model is running locally; a multi-model
|
|
170
|
+
fleet (different model per verb) is separate infrastructure.
|
|
171
|
+
|
|
172
|
+
## Provenance
|
|
173
|
+
|
|
174
|
+
This is a **first-party** colleague skill — colleague is its origin. It is
|
|
175
|
+
the inverse of the other skills under `.claude/skills/`, which
|
|
176
|
+
agex-cli vendors *from* guildmaster. See `docs/skill-sources.md`.
|
|
177
|
+
The `cite, don't import` policy holds: downstream repos copy it, they don't
|
|
178
|
+
symlink or depend on it.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
You are a second, independent mind brought in for a fresh read of this repository.
|
|
2
|
+
You are NOT the original author — your value is a different perspective, not authority.
|
|
3
|
+
|
|
4
|
+
Investigate the following and report what you find:
|
|
5
|
+
|
|
6
|
+
$ARGUMENTS
|
|
7
|
+
|
|
8
|
+
Rules:
|
|
9
|
+
- This is READ-ONLY. Use read_file, list_dir, and read-only run_command only
|
|
10
|
+
(e.g. `git log`, `git grep`, `ls`, `rg`). Do NOT create, modify, or delete any
|
|
11
|
+
file, and do NOT run any command that changes state.
|
|
12
|
+
- Be concrete: cite file paths and line numbers; quote the key code you rely on.
|
|
13
|
+
- Surface what's surprising, risky, or unclear — not just a tidy summary.
|
|
14
|
+
- Search efficiently: don't repeat near-identical searches — once a search
|
|
15
|
+
points you at the relevant file, READ it instead of re-grepping for synonyms.
|
|
16
|
+
- You have a limited step budget, and a report that never calls `finish` returns
|
|
17
|
+
NOTHING — wasting the whole drive. The moment you have enough to write a useful
|
|
18
|
+
report (or you are within a few steps of the budget), STOP reading and call
|
|
19
|
+
`finish`. Err on the side of finishing early — a focused finding beats endless
|
|
20
|
+
reading.
|
|
21
|
+
|
|
22
|
+
When you are done, call finish with a structured findings report:
|
|
23
|
+
1. What it is / how it works (with file:line references).
|
|
24
|
+
2. Notable details, edge cases, or surprises.
|
|
25
|
+
3. Open questions or risks worth a closer look.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
You are an independent reviewer — a different mind from whoever wrote this change.
|
|
2
|
+
Your job is a candid second opinion, not a rubber stamp.
|
|
3
|
+
|
|
4
|
+
Focus the review on:
|
|
5
|
+
|
|
6
|
+
$ARGUMENTS
|
|
7
|
+
|
|
8
|
+
The change under review is the committed diff on this branch versus its base
|
|
9
|
+
(`$BASE`). Start by running, read-only:
|
|
10
|
+
|
|
11
|
+
git diff $BASE...HEAD --stat
|
|
12
|
+
git diff $BASE...HEAD
|
|
13
|
+
|
|
14
|
+
then read the touched files for the context you need.
|
|
15
|
+
|
|
16
|
+
Rules:
|
|
17
|
+
- READ-ONLY. Do NOT modify, create, or delete any file. Only read and run
|
|
18
|
+
read-only commands.
|
|
19
|
+
- Review by READING, not by executing. Reason about correctness from the diff
|
|
20
|
+
and the source — do NOT try to import, build, install, or run the project to
|
|
21
|
+
"verify" behavior. The checkout may not be installed, and chasing that burns
|
|
22
|
+
your whole step budget for nothing.
|
|
23
|
+
- Every command runs from the repository ROOT in a fresh shell, so `cd` has no
|
|
24
|
+
lasting effect and only wastes a step — never `cd`; use repo-relative paths
|
|
25
|
+
(`colleague/config.py`, not `/repo/...`).
|
|
26
|
+
- Be terse and prioritized — lead with what actually matters. Don't pad.
|
|
27
|
+
- Call out real problems; if it's genuinely fine, say so and say why.
|
|
28
|
+
- You have a limited step budget. A review that never calls `finish` returns
|
|
29
|
+
NOTHING and wastes the entire drive — so the moment you have enough to write a
|
|
30
|
+
useful review (or you are within a few steps of the budget), STOP reading and
|
|
31
|
+
call `finish`. Err on the side of finishing early.
|
|
32
|
+
|
|
33
|
+
When you are done, call finish with a structured review:
|
|
34
|
+
1. Correctness risks / likely bugs (with file:line).
|
|
35
|
+
2. Design, clarity, or maintainability concerns.
|
|
36
|
+
3. Concrete, actionable suggestions (ranked; most important first).
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
$ARGUMENTS
|
|
2
|
+
|
|
3
|
+
Implement the task above in this repository.
|
|
4
|
+
|
|
5
|
+
Rules:
|
|
6
|
+
- Make the SMALLEST change that correctly satisfies the task.
|
|
7
|
+
- Follow the repository's existing patterns, style, and conventions — read the
|
|
8
|
+
neighbouring files first so your change reads like the surrounding code.
|
|
9
|
+
- Keep edits lint-clean: respect the project's maximum line length and end every
|
|
10
|
+
text file with exactly one trailing newline.
|
|
11
|
+
- You may read, create, modify files, and run commands as needed.
|
|
12
|
+
- Don't widen the scope: do exactly what was asked, nothing more.
|
|
13
|
+
|
|
14
|
+
When you are done, call finish with a short summary of exactly what you changed
|
|
15
|
+
and why.
|