microduck-cli 0.7.0__tar.gz → 0.8.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.
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/cicd/SKILL.md +30 -14
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills.local.yaml.example +5 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/CHANGELOG.md +33 -0
- microduck_cli-0.8.0/CLAUDE.md +273 -0
- microduck_cli-0.8.0/PKG-INFO +94 -0
- microduck_cli-0.8.0/README.md +77 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/docs/skill-sources.md +28 -1
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/pyproject.toml +1 -1
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/uv.lock +31 -31
- microduck_cli-0.7.0/CLAUDE.md +0 -28
- microduck_cli-0.7.0/PKG-INFO +0 -76
- microduck_cli-0.7.0/README.md +0 -59
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/agent-config/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/agent-config/scripts/show.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/ask-colleague/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/ask-colleague/prompts/review.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/ask-colleague/prompts/write.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/challenge/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/cicd/scripts/workflow.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/communicate/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/deviate/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/recall/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/recall/scripts/recall.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/remember/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/remember/scripts/remember.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/run-tests/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/scope/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/sonarclaude/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/spec-to-plan/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/summarize-delivery/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/think/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/think/scripts/think.sh +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/version-bump/SKILL.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/version-bump/scripts/bump.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.flake8 +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.github/workflows/publish.yml +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.github/workflows/tests.yml +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.gitignore +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/.markdownlint-cli2.yaml +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/AGENTS.colleague.md +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/LICENSE +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/culture.yaml +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/__init__.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/__main__.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/cli/__init__.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/cli/_commands/__init__.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/cli/_commands/cli.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/cli/_commands/doctor.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/cli/_commands/explain.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/cli/_commands/learn.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/cli/_commands/overview.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/cli/_commands/whoami.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/cli/_errors.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/cli/_output.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/explain/__init__.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/microduck_cli/explain/catalog.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/sonar-project.properties +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/tests/__init__.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/tests/test_cli.py +0 -0
- {microduck_cli-0.7.0 → microduck_cli-0.8.0}/tests/test_cli_introspection.py +0 -0
|
@@ -163,14 +163,16 @@ only when the user explicitly asks for one of them.
|
|
|
163
163
|
|
|
164
164
|
For every comment, decide **FIX** or **PUSHBACK** with reasoning.
|
|
165
165
|
|
|
166
|
-
Default to **FIX** for: portability complaints (
|
|
167
|
-
|
|
166
|
+
Default to **FIX** for: portability complaints (a recurring bug
|
|
167
|
+
class across AgentCulture repos), test or doc requests, style nits
|
|
168
168
|
aligned with workspace conventions.
|
|
169
169
|
|
|
170
170
|
Default to **PUSHBACK** for: architecture opinions that conflict with
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
`CLAUDE.md` or the all-backends rule; scaffold false-positives — this
|
|
172
|
+
repo has no MicroDuck control code yet, so "this CLI doesn't do
|
|
173
|
+
anything with the robot" is a roadmap item, not a PR defect. Anything
|
|
174
|
+
proposing a second runtime loop in `microduck_cli/` is a PUSHBACK too:
|
|
175
|
+
that code belongs upstream in `neurosymbolic-system` (see `CLAUDE.md`).
|
|
174
176
|
|
|
175
177
|
### Alignment-delta rule
|
|
176
178
|
|
|
@@ -179,18 +181,29 @@ If the PR touches `CLAUDE.md`, `culture.yaml`, or anything under
|
|
|
179
181
|
PUSHBACK on each comment. Note any sibling that needs a follow-up PR
|
|
180
182
|
and mention it in your reply.
|
|
181
183
|
|
|
182
|
-
##
|
|
184
|
+
## Pre-PR steps (microduck-cli)
|
|
183
185
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
+
**Consumer adaptation** — upstream ships this section as conditional
|
|
187
|
+
"greenfield-aware" no-ops. microduck-cli's stack has landed, so the steps
|
|
188
|
+
below are unconditional here; run all of them before `workflow.sh open`.
|
|
189
|
+
Recorded as a tracked divergence in `docs/skill-sources.md`.
|
|
186
190
|
|
|
187
191
|
```bash
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
192
|
+
uv run pytest -n auto # full suite must be green
|
|
193
|
+
uv run black --check microduck_cli tests # the CI lint job, locally
|
|
194
|
+
uv run isort --check-only microduck_cli tests
|
|
195
|
+
uv run flake8 microduck_cli tests
|
|
196
|
+
uv run bandit -c pyproject.toml -r microduck_cli
|
|
197
|
+
uv run teken cli doctor . --strict # the agent-first rubric gate
|
|
198
|
+
markdownlint-cli2 "**/*.md" "#node_modules" "#.local" "#.claude/skills" "#.teken"
|
|
199
|
+
/version-bump patch|minor|major # REQUIRED on every PR
|
|
191
200
|
```
|
|
192
201
|
|
|
193
|
-
|
|
202
|
+
The version bump is not optional: the `version-check` job compares
|
|
203
|
+
`pyproject.toml` against `origin/main` and fails the PR when they match — even
|
|
204
|
+
for docs/config/CI-only changes. Use the `version-bump` skill so `CHANGELOG.md`
|
|
205
|
+
gets its Keep-a-Changelog entry in the same pass.
|
|
206
|
+
|
|
194
207
|
A `pr lint --extra=tests,version,markdown` ask is filed upstream
|
|
195
208
|
([devex#41](https://github.com/agentculture/devex/issues/41)).
|
|
196
209
|
|
|
@@ -203,6 +216,9 @@ in the fix-up commit message.
|
|
|
203
216
|
The `status` extension queries SonarCloud directly (it predates the
|
|
204
217
|
upstream Sonar integration in `devex pr read`). Both surfaces are
|
|
205
218
|
trustworthy — `devex pr read` for display in the briefing, `status` for
|
|
206
|
-
the gate.
|
|
219
|
+
the gate. microduck-cli isn't yet a registered mesh agent, so the
|
|
207
220
|
post-merge IRC ping that Culture's `pr-review` includes is still
|
|
208
|
-
skipped — that returns when
|
|
221
|
+
skipped — that returns when microduck-cli joins the mesh. (Until then,
|
|
222
|
+
a cross-repo follow-up — e.g. a runtime gap that belongs to
|
|
223
|
+
`neurosymbolic-system` — goes out as a tracked issue via the
|
|
224
|
+
`communicate` skill.)
|
|
@@ -14,3 +14,8 @@ sibling_projects:
|
|
|
14
14
|
- ../guildmaster
|
|
15
15
|
- ../steward
|
|
16
16
|
- ../teken
|
|
17
|
+
# Robot-family siblings — the architecture microduck-cli composes.
|
|
18
|
+
# See CLAUDE.md "The three sibling repos, and what to take from each".
|
|
19
|
+
- ../neurosymbolic-system
|
|
20
|
+
- ../reachy-mini-cli
|
|
21
|
+
- ../arm101-cli
|
|
@@ -5,6 +5,39 @@ 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.8.0] - 2026-08-29
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **`CLAUDE.md` re-initialized from the seed into a real runtime prompt** (`/init`).
|
|
13
|
+
Replaces the self-initializing placeholder with: what the repo actually is today
|
|
14
|
+
(the mesh-agent scaffold — **no MicroDuck control code exists yet**), the
|
|
15
|
+
`microduck` vs `microduck-cli` console-script gotcha, the common command + lint
|
|
16
|
+
stack, the agent-first CLI contracts (registration, error, output, explain
|
|
17
|
+
catalog, identity/`doctor`) and the rubric shapes that must not be "simplified"
|
|
18
|
+
away, hard constraints, CI/release, the vendored-skill rule, and the workflow
|
|
19
|
+
conventions (worktrees in `../.worktrees.microduck-cli/`, in-repo public eidetic
|
|
20
|
+
memory, PR flow).
|
|
21
|
+
- **A "three sibling repos" section** naming what to take from each and what not
|
|
22
|
+
to: `neurosymbolic-system` is the runtime to **import** — but it is itself still
|
|
23
|
+
a bare scaffold, so it is not a dependency yet and a tick loop must never be
|
|
24
|
+
re-implemented here; `reachy-mini-cli` is the architecture (noun groups, one tick
|
|
25
|
+
seam, single-SDK-owner model); `arm101-cli` is the hardware-safety baseline
|
|
26
|
+
(gated motion, release-on-abnormal-exit, hardware deps behind an extra).
|
|
27
|
+
- **README rewritten** — a `Status: scaffold` section stating plainly that no duck
|
|
28
|
+
control code ships yet, a corrected quickstart (`uv run microduck …`; the old
|
|
29
|
+
`uv run microduck-cli …` line failed with "Failed to spawn"), a sibling-projects
|
|
30
|
+
table, and the removal of the template's "Make it your own" rename instructions.
|
|
31
|
+
- **`cicd` skill adapted to this repo's landed stack** — the upstream
|
|
32
|
+
"Greenfield-aware steps" no-ops become unconditional "Pre-PR steps
|
|
33
|
+
(microduck-cli)", the triage defaults name this repo's real false-positive class
|
|
34
|
+
(scaffold complaints; a second runtime loop that belongs in
|
|
35
|
+
`neurosymbolic-system`), and the mesh-ping paragraph names microduck-cli.
|
|
36
|
+
`SKILL.md` prose only — no script bodies touched — and recorded as a tracked
|
|
37
|
+
divergence in `docs/skill-sources.md`.
|
|
38
|
+
- **`.claude/skills.local.yaml.example`** lists the three robot-family siblings
|
|
39
|
+
under `sibling_projects`, so `cicd`'s alignment-delta step sees them.
|
|
40
|
+
|
|
8
41
|
## [0.7.0] - 2026-08-24
|
|
9
42
|
|
|
10
43
|
### Added
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## What this repo actually is right now
|
|
6
|
+
|
|
7
|
+
`microduck-cli` is an **AgentCulture mesh agent** whose destination is
|
|
8
|
+
*controlling the MicroDuck robot — one CLI that any agent or human drives*
|
|
9
|
+
(`culture.yaml`, [README](README.md)).
|
|
10
|
+
|
|
11
|
+
**No MicroDuck control code exists yet.** What is on disk is the mesh-agent
|
|
12
|
+
scaffold cloned from `culture-agent-template` (`git log` is two commits: the
|
|
13
|
+
initial commit and the scaffold): an agent-first introspection CLI (`whoami`,
|
|
14
|
+
`learn`, `explain`, `overview`, `doctor`, `cli`), a mesh identity, the vendored
|
|
15
|
+
guildmaster skill kit, and a build/CI/deploy baseline. Treat that CLI as the
|
|
16
|
+
chassis you extend, and the three sibling repos below as the architecture you
|
|
17
|
+
extend it *toward*.
|
|
18
|
+
|
|
19
|
+
Two things to internalize before touching anything:
|
|
20
|
+
|
|
21
|
+
- **The runtime agent prompt is `AGENTS.colleague.md`, not this file.**
|
|
22
|
+
`culture.yaml` declares `backend: colleague`, and the backend→prompt-file map
|
|
23
|
+
(see `doctor`) resolves `colleague` → `AGENTS.colleague.md`. This `CLAUDE.md`
|
|
24
|
+
is guidance for *Claude Code working in the repo*; editing it does not change
|
|
25
|
+
the mesh agent's runtime behavior.
|
|
26
|
+
- **The installed console script is `microduck`, not `microduck-cli`.**
|
|
27
|
+
`[project.scripts]` defines `microduck = "microduck_cli.cli:main"`, so
|
|
28
|
+
`uv run microduck-cli whoami` fails with "Failed to spawn." Use `uv run
|
|
29
|
+
microduck …` or `python -m microduck_cli …`. The *internal* prog name is
|
|
30
|
+
`microduck-cli`, so `--help` text, error messages, `learn`/`explain` bodies and
|
|
31
|
+
JSON payloads all say `microduck-cli` — that string is intentional in output,
|
|
32
|
+
just not as the binary. (Same half-rename `arm101-cli` carries; `reachy-mini-cli`
|
|
33
|
+
resolved its by shipping *both* console scripts. Either fix is fine — do it as
|
|
34
|
+
one deliberate pass across `pyproject.toml`, `prog=`, `_commands/`,
|
|
35
|
+
`explain/catalog.py`, the README and the test assertions, never piecemeal.)
|
|
36
|
+
|
|
37
|
+
## Common commands
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
uv sync # create .venv, install runtime + dev deps
|
|
41
|
+
uv run microduck whoami # run the CLI (note: 'microduck')
|
|
42
|
+
uv run pytest -n auto # full suite (xdist parallel)
|
|
43
|
+
uv run pytest tests/test_cli.py::test_whoami_text # a single test
|
|
44
|
+
uv run pytest -n auto --cov=microduck_cli --cov-report=term # coverage (CI gate: fail_under=60)
|
|
45
|
+
uv run teken cli doctor . --strict # the agent-first rubric gate CI enforces
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Lint stack (the CI `lint` job runs all of these; line length is 100 everywhere):
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
uv run black --check microduck_cli tests
|
|
52
|
+
uv run isort --check-only microduck_cli tests
|
|
53
|
+
uv run flake8 microduck_cli tests
|
|
54
|
+
uv run bandit -c pyproject.toml -r microduck_cli # B101/B404/B603 skipped in pyproject
|
|
55
|
+
markdownlint-cli2 "**/*.md" "#node_modules" "#.local" "#.claude/skills" "#.teken"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Architecture: the agent-first CLI
|
|
59
|
+
|
|
60
|
+
Everything routes through `microduck_cli/cli/__init__.py:main()` → `_build_parser()`.
|
|
61
|
+
Three cross-cutting contracts are enforced by tests and by the rubric gate.
|
|
62
|
+
|
|
63
|
+
- **Adding a verb.** Write `cli/_commands/<verb>.py` exposing `register(sub)`
|
|
64
|
+
(add `--json`, `set_defaults(func=…)`), then add one import + call inside
|
|
65
|
+
`_build_parser()`. That is the only wiring step; `whoami.py` is the canonical
|
|
66
|
+
example. For a **noun group** (a subcommand with its own verbs — how duck
|
|
67
|
+
control will land, e.g. `microduck duck walk`), mirror `_commands/cli.py`:
|
|
68
|
+
build the child subparsers with `parser_class=type(p)` so nested parse errors
|
|
69
|
+
keep the structured error contract instead of argparse's default exit-2. A noun
|
|
70
|
+
with action-verbs must also expose its own `overview` (rubric requirement).
|
|
71
|
+
- **Error contract** (`cli/_errors.py` + `_dispatch`/`_CliArgumentParser`).
|
|
72
|
+
Every failure raises `CliError(code, message, remediation)`; `_dispatch` catches
|
|
73
|
+
it and wraps *any* other exception, so no Python traceback ever leaks. Argparse
|
|
74
|
+
errors route through `_CliArgumentParser.error()` too — and because parse errors
|
|
75
|
+
fire before `args.json` exists, `main()` pre-scans raw argv for `--json` into the
|
|
76
|
+
class-level `_json_hint`. **Handlers raise `CliError` — never `sys.exit`, never
|
|
77
|
+
print-and-return.** Text errors are always two lines: `error: …` then `hint: …`
|
|
78
|
+
(the `hint:` prefix is rubric-required).
|
|
79
|
+
- **Output contract** (`cli/_output.py`). Results → stdout, errors and diagnostics
|
|
80
|
+
→ stderr, **never mixed**, in text and JSON mode alike. Use `emit_result` /
|
|
81
|
+
`emit_error` / `emit_diagnostic`, not `print`. Exit codes: `0` success, `1`
|
|
82
|
+
user-input error, `2` environment error, `3+` reserved (constants in `_errors.py`).
|
|
83
|
+
- **The explain catalog** (`microduck_cli/explain/catalog.py`). `ENTRIES` is keyed
|
|
84
|
+
by command-path tuples (`("whoami",)`, `("cli","overview")`; `()`,
|
|
85
|
+
`("microduck-cli",)` and `("microduck",)` all resolve to root).
|
|
86
|
+
`test_every_catalog_path_resolves` asserts each *existing* entry renders, but
|
|
87
|
+
nothing forces a *new* verb to have one — so adding a verb means updating
|
|
88
|
+
**three places in lockstep** or the docs silently drift: the catalog entry, the
|
|
89
|
+
`_VERBS` list in `overview.py`, and the `_TEXT` + `_as_json_payload` blocks in
|
|
90
|
+
`learn.py`.
|
|
91
|
+
- **Identity** (`_commands/whoami.py`). `culture.yaml` is hand-parsed line by line
|
|
92
|
+
(no YAML dependency, to keep runtime deps empty) — only the documented flat
|
|
93
|
+
`suffix`/`backend`/`model` shape is understood. `find_culture_yaml()` walks up
|
|
94
|
+
from `__file__`, so identity is the agent's own even when invoked elsewhere; a
|
|
95
|
+
wheel install (no `culture.yaml` beside the package) falls back to literal
|
|
96
|
+
defaults and `doctor` reports a single info check.
|
|
97
|
+
|
|
98
|
+
### The agent-first rubric (why some code looks odd)
|
|
99
|
+
|
|
100
|
+
`teken cli doctor . --strict` gates CI on a seven-bundle rubric. Several shapes
|
|
101
|
+
exist only to satisfy it — don't "simplify" them away:
|
|
102
|
+
|
|
103
|
+
- `learn` must be ≥200 chars and mention purpose, command map, exit codes,
|
|
104
|
+
`--json`, and `explain`.
|
|
105
|
+
- Any noun with action-verbs must also expose `overview` — the entire reason the
|
|
106
|
+
`cli` noun group exists (`cli overview` describes the CLI; the global `overview`
|
|
107
|
+
describes the *agent*).
|
|
108
|
+
- Descriptive verbs must never hard-fail on a bad path — hence `overview` takes an
|
|
109
|
+
ignored positional `target` and still exits 0.
|
|
110
|
+
|
|
111
|
+
Separate from the in-package `microduck doctor`, which checks **agent-identity
|
|
112
|
+
invariants**: `prompt-file-present`, `backend-consistency` (`claude`→`CLAUDE.md`,
|
|
113
|
+
`colleague`→`AGENTS.colleague.md`, `acp`→`AGENTS.md`, `gemini`→`GEMINI.md`), and
|
|
114
|
+
`skills-present`. Change the backend in `culture.yaml` and you must teach `doctor`
|
|
115
|
+
the matching prompt file.
|
|
116
|
+
|
|
117
|
+
## The three sibling repos, and what to take from each
|
|
118
|
+
|
|
119
|
+
The duck domain is meant to be built by *composing* these, not by inventing a
|
|
120
|
+
fourth architecture. Read the named file before you start the corresponding work.
|
|
121
|
+
|
|
122
|
+
### `../neurosymbolic-system` — the intended runtime (not usable yet)
|
|
123
|
+
|
|
124
|
+
The description says microduck-cli is "built on the neurosymbolic-system runtime":
|
|
125
|
+
senses, rules, arbitration and motion composed onto one 50 Hz tick, extracted from
|
|
126
|
+
reachy-mini-cli and imported as a library by robot CLIs. **That library does not
|
|
127
|
+
exist yet.** `neurosymbolic-system` 0.7.0 is the *same* bare template scaffold this
|
|
128
|
+
repo is — `neurosymbolic_system/` contains only `cli/` and `explain/`, no runtime
|
|
129
|
+
modules, and its `CLAUDE.md` is still the un-`/init`'ed seed.
|
|
130
|
+
|
|
131
|
+
Consequences: it is **not** a dependency of this repo and must not be added as one
|
|
132
|
+
until it actually ships runtime modules. When it does, **import it — do not
|
|
133
|
+
re-implement the tick here.** If you find yourself writing an engine loop,
|
|
134
|
+
arbitration, or a sense driver in `microduck_cli/`, that code belongs upstream in
|
|
135
|
+
`neurosymbolic-system`; file it there (the `communicate` skill posts cross-repo
|
|
136
|
+
issues) rather than forking a second runtime. Until then, duck work that needs a
|
|
137
|
+
runtime is blocked on that repo, and a CLI-only surface (config, discovery,
|
|
138
|
+
inventory, dry-run planning) is what can land here.
|
|
139
|
+
|
|
140
|
+
### `../reachy-mini-cli` — the architecture to follow
|
|
141
|
+
|
|
142
|
+
The mature robot CLI in the family (`reachy/`, ~2000-line `CLAUDE.md`). Its
|
|
143
|
+
`CLAUDE.md` "Architecture: the agent-first CLI" and "Noun internals" sections are
|
|
144
|
+
the reference. The load-bearing lessons:
|
|
145
|
+
|
|
146
|
+
- **One noun per capability, each with `overview`**, engine logic in a sibling
|
|
147
|
+
package (`reachy/behavior/`, `reachy/motion/`…) and only argparse wiring in
|
|
148
|
+
`_commands/`. Keep that split here: `microduck_cli/cli/_commands/` stays thin.
|
|
149
|
+
- **The single-SDK-owner model.** The hardware exposes one client and one head;
|
|
150
|
+
every sense process contends for them, and the loser throttles. So **compose
|
|
151
|
+
senses onto ONE tick seam, never as two processes** (`_compose_run_seam`). Two
|
|
152
|
+
standalone sense nouns were deleted for exactly this reason — don't recreate the
|
|
153
|
+
mistake in duck form.
|
|
154
|
+
- **Don't arbitrate across processes on a flag file.** A flag cannot expire; a
|
|
155
|
+
heartbeat in `state.json` can. Refuse early (`refuse_if_engine_live()`) instead
|
|
156
|
+
of running a silently useless second process.
|
|
157
|
+
- **Sense-stage logging.** A named drop reason (`self-mute`, `cooldown`,
|
|
158
|
+
`audio-muted`…) on a dedicated logger, stderr-only, so JSONL export on stdout
|
|
159
|
+
stays pure. A layer whose drops are invisible is indistinguishable from one that
|
|
160
|
+
silently no-ops.
|
|
161
|
+
|
|
162
|
+
### `../arm101-cli` — the hardware-safety patterns at this maturity
|
|
163
|
+
|
|
164
|
+
The closest peer: same template, same half-rename gotcha, a real hardware layer
|
|
165
|
+
grown on top (`arm101/hardware/`, `arm101/explore/`). Copy its two shipped
|
|
166
|
+
disciplines when duck motion lands:
|
|
167
|
+
|
|
168
|
+
- **Gated motion.** Every verb that moves hardware confirms on a TTY, prints a
|
|
169
|
+
zero-side-effect dry-run plan on a non-TTY without `--apply`, and proceeds on a
|
|
170
|
+
non-TTY *with* `--apply` (agent mode).
|
|
171
|
+
- **Own what you energize.** Release on any abnormal exit (exception, bus fault,
|
|
172
|
+
Ctrl-C), each actuator released independently so one failure doesn't abort the
|
|
173
|
+
rest; leave torque untouched on a *clean* exit so a deliberate hold survives.
|
|
174
|
+
State the limits you cannot cover (a bus that is physically gone) rather than
|
|
175
|
+
implying safety you don't have.
|
|
176
|
+
- **Hardware deps go in an extra, lazy-imported** (`[seeed]` there), so the base
|
|
177
|
+
install stays zero-dep and introspection works on a box with no robot attached.
|
|
178
|
+
|
|
179
|
+
## Hard constraints
|
|
180
|
+
|
|
181
|
+
- **Zero third-party runtime dependencies** (`dependencies = []`) — on purpose.
|
|
182
|
+
`teken`, pytest and the lint stack are dev-only. Keep it that way unless the duck
|
|
183
|
+
layer genuinely needs a hardware library, and if it does, put it behind an extra
|
|
184
|
+
with a lazy import so the introspection CLI still imports clean on a bare box.
|
|
185
|
+
Adding a *base* dep (including `neurosymbolic-system`, once it exists) is an
|
|
186
|
+
explicit decision, not a drive-by.
|
|
187
|
+
- **Python ≥ 3.12** (`X | None`, `tomllib`).
|
|
188
|
+
- **Every PR bumps the version — even docs/config/CI-only changes.** The
|
|
189
|
+
`version-check` job in `.github/workflows/tests.yml` compares `pyproject.toml`
|
|
190
|
+
against `origin/main` and fails the PR when they match (a duplicate version would
|
|
191
|
+
fail the PyPI publish on merge). Use the `version-bump` skill; it also prepends
|
|
192
|
+
the Keep-a-Changelog entry.
|
|
193
|
+
|
|
194
|
+
## CI / release
|
|
195
|
+
|
|
196
|
+
- `.github/workflows/tests.yml`: `test` (pytest + coverage + SonarCloud), `lint`
|
|
197
|
+
(the stack above + the rubric gate), `version-check` (PR-only).
|
|
198
|
+
- SonarCloud gates the `test` job (`sonar-project.properties`,
|
|
199
|
+
`sonar.qualitygate.wait=true`) — but only when `SONAR_TOKEN` is set; token-less
|
|
200
|
+
repos and fork PRs skip the scan and stay green. `coverage.run.relative_files =
|
|
201
|
+
true` is load-bearing: without it `coverage.xml` paths don't map to
|
|
202
|
+
`sonar.sources=microduck_cli` and coverage reports 0%.
|
|
203
|
+
- `publish.yml`: PyPI Trusted Publishing over OIDC — push to `main` → PyPI,
|
|
204
|
+
same-repo PR → a `.devN` build to TestPyPI. No stored credentials.
|
|
205
|
+
|
|
206
|
+
## Skills (`.claude/skills/`) — cite-don't-import
|
|
207
|
+
|
|
208
|
+
The kit is **vendored** from `guildmaster` (a few from `colleague`/`devague`);
|
|
209
|
+
`docs/skill-sources.md` is the authoritative provenance ledger and holds the
|
|
210
|
+
per-skill re-sync procedure. **Do not hand-edit skill script bodies** — lift real
|
|
211
|
+
changes upstream and re-vendor; a copy that diverges silently is the failure mode
|
|
212
|
+
that rule exists to prevent. The sanctioned local edits are (a) consumer-identifying
|
|
213
|
+
prose in `SKILL.md` and (b) adding `type: command` to the frontmatter (load-bearing:
|
|
214
|
+
the culture backend's `core.skill_loader` silently skips any `SKILL.md` without it).
|
|
215
|
+
Every divergence beyond that gets a row in the ledger — `cicd`'s repo-specific
|
|
216
|
+
pre-PR steps and `ask-colleague`'s direct-from-colleague vendoring are the tracked
|
|
217
|
+
ones today. There are **no first-party skills here yet**; when you add one (a duck
|
|
218
|
+
wrapper would be the natural first, as `find-reachy` is in reachy-mini-cli), say so
|
|
219
|
+
in this section — otherwise a reviewer can't tell "ours" from "vendored".
|
|
220
|
+
|
|
221
|
+
Day to day: **`cicd`** (the PR lane; needs `devex` ≥0.21 on PATH),
|
|
222
|
+
**`communicate`** (cross-repo issues + mesh messages; needs `agtag`; posts auto-sign
|
|
223
|
+
`- microduck-cli (Claude)`), **`version-bump`**, **`run-tests`**, **`sonarclaude`**,
|
|
224
|
+
**`ask-colleague`**, and the devague chain (`scope` → `think` → `challenge` →
|
|
225
|
+
`spec-to-plan` → `assign-to-workforce` → `summarize-delivery`, with `deviate` as the
|
|
226
|
+
mid-run escape hatch).
|
|
227
|
+
|
|
228
|
+
Reach for **`ask-colleague`** reflexively for a diverse second opinion —
|
|
229
|
+
`review`/`explore` are read-only and always safe; side-effecting `write --apply` /
|
|
230
|
+
`--pr` needs the user's go-ahead.
|
|
231
|
+
|
|
232
|
+
## Conventions and workflow
|
|
233
|
+
|
|
234
|
+
**Git worktrees live in `../.worktrees.microduck-cli/<name>/`.** ALL worktrees of
|
|
235
|
+
this repo, without exception — workforce fan-out lanes, `ask-colleague` throwaways,
|
|
236
|
+
scratch checkouts:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
git worktree add ../.worktrees.microduck-cli/<name> -b <branch>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Never `/tmp`, never a shared `../worktrees/`. This workspace holds many sibling
|
|
243
|
+
projects, and a generic shared folder accumulates orphaned trees from several repos
|
|
244
|
+
with nothing indicating ownership — a stale-tree sweep can't tell a live lane from
|
|
245
|
+
junk. Use a branch prefix scoped to the work (`duck/t2`, not plain `agent/t2`, which
|
|
246
|
+
collides with leftovers from earlier fan-outs and makes `git worktree add -b` fail).
|
|
247
|
+
Remove with `git worktree remove <path>`; `git worktree prune` only clears metadata.
|
|
248
|
+
The vendored `assign-to-workforce` skill's fan-out example uses the shared path *and*
|
|
249
|
+
`agent/<task-id>` branches — it is cited verbatim and must not be edited, so override
|
|
250
|
+
both when following it.
|
|
251
|
+
|
|
252
|
+
**Memory discipline — recall before, remember after.** This repo's eidetic memory is
|
|
253
|
+
**in-repo and public**: records resolve to `<repo-root>/.eidetic/memory` (committed,
|
|
254
|
+
shared with the team and mesh peers — the `claude` and `colleague` backends read the
|
|
255
|
+
same `microduck-cli` scope). Note the `/remember` and `/recall` skill *descriptions*
|
|
256
|
+
still claim a private `~/.eidetic` default; the vendored wrappers here default to
|
|
257
|
+
`--visibility public`, and the script is what runs.
|
|
258
|
+
|
|
259
|
+
- **`/recall` before you start** a non-trivial task — prior decisions, gotchas,
|
|
260
|
+
"have we done this before?" — so you build on what's known instead of re-deriving it.
|
|
261
|
+
- **`/remember` when something worth keeping surfaces** — a decision and its
|
|
262
|
+
rationale, a constraint, a fix and *why*, a gotcha that cost time. Capture it as it
|
|
263
|
+
happens.
|
|
264
|
+
|
|
265
|
+
Pass `--visibility private` to keep a record in `$HOME` (uncommitted); `/recall` reads
|
|
266
|
+
both stores and merges. In-repo routing needs `eidetic >= 0.10.0`. Don't store what the
|
|
267
|
+
repo already records (code structure, git history, this file, `CHANGELOG.md`) — store
|
|
268
|
+
what you'd have to re-derive.
|
|
269
|
+
|
|
270
|
+
**PR flow.** Branch (`fix/…`, `feat/…`, `docs/…`, `skill/…`), implement, bump the
|
|
271
|
+
version, then go straight to `workflow.sh open` — in AgentCulture the standing default
|
|
272
|
+
is always "push and create a Pull Request", no interactive merge/keep/discard menu.
|
|
273
|
+
Signatures resolve from `culture.yaml` via `devex`; don't hand-sign inside `cicd`.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: microduck-cli
|
|
3
|
+
Version: 0.8.0
|
|
4
|
+
Summary: Agent-agnostic CLI for controlling the MicroDuck robot. Any agent, any human, one CLI. Built on the neurosymbolic-system runtime and following the reachy-mini-cli architecture.
|
|
5
|
+
Project-URL: Homepage, https://github.com/agentculture/microduck-cli
|
|
6
|
+
Project-URL: Issues, https://github.com/agentculture/microduck-cli/issues
|
|
7
|
+
Author: AgentCulture
|
|
8
|
+
License-Expression: Apache-2.0
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Topic :: Software Development
|
|
15
|
+
Requires-Python: >=3.12
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
|
|
18
|
+
# microduck-cli
|
|
19
|
+
|
|
20
|
+
Agent-agnostic CLI for controlling the MicroDuck robot. Any agent, any human,
|
|
21
|
+
one CLI. Built on the [neurosymbolic-system](https://github.com/agentculture/neurosymbolic-system)
|
|
22
|
+
runtime and following the
|
|
23
|
+
[reachy-mini-cli](https://github.com/agentculture/reachy-mini-cli) architecture.
|
|
24
|
+
|
|
25
|
+
## Status: scaffold
|
|
26
|
+
|
|
27
|
+
**There is no MicroDuck control code yet.** What ships today is the
|
|
28
|
+
AgentCulture mesh-agent baseline — an agent-first introspection CLI, a mesh
|
|
29
|
+
identity, the vendored guildmaster skill kit, and a build/CI/deploy pipeline.
|
|
30
|
+
The duck domain is the destination; the CLI below is the chassis it grows on.
|
|
31
|
+
|
|
32
|
+
The `neurosymbolic-system` runtime it is meant to import (senses, rules,
|
|
33
|
+
arbitration and motion on one 50 Hz tick) is itself still a scaffold, so it is
|
|
34
|
+
**not** a dependency of this package yet.
|
|
35
|
+
|
|
36
|
+
## What you get
|
|
37
|
+
|
|
38
|
+
- **An agent-first CLI** cited from [teken](https://github.com/agentculture/teken)
|
|
39
|
+
(`afi-cli`) — the runtime package has no third-party dependencies.
|
|
40
|
+
- **A mesh identity** — `culture.yaml` (`suffix` + `backend`) and the matching
|
|
41
|
+
prompt file (`AGENTS.colleague.md` for this agent's `backend: colleague`).
|
|
42
|
+
- **The vendored guildmaster skill kit** under `.claude/skills/`, cite-don't-import.
|
|
43
|
+
See [`docs/skill-sources.md`](docs/skill-sources.md).
|
|
44
|
+
- **A build + deploy baseline** — pytest, lint, the agent-first rubric gate, and
|
|
45
|
+
PyPI Trusted Publishing wired into GitHub Actions.
|
|
46
|
+
|
|
47
|
+
## Quickstart
|
|
48
|
+
|
|
49
|
+
The installed console script is **`microduck`** (not `microduck-cli` — that is
|
|
50
|
+
the distribution name and the name the CLI prints in its own output):
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
uv sync
|
|
54
|
+
uv run pytest -n auto # run the test suite
|
|
55
|
+
uv run microduck whoami # identity from culture.yaml
|
|
56
|
+
uv run microduck learn # self-teaching prompt (add --json)
|
|
57
|
+
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## CLI
|
|
61
|
+
|
|
62
|
+
| Verb | What it does |
|
|
63
|
+
|------|--------------|
|
|
64
|
+
| `whoami` | Report this agent's nick, version, backend, and model from `culture.yaml`. |
|
|
65
|
+
| `learn` | Print a structured self-teaching prompt. |
|
|
66
|
+
| `explain <path>` | Markdown docs for any noun/verb path. |
|
|
67
|
+
| `overview` | Read-only descriptive snapshot of the agent. |
|
|
68
|
+
| `doctor` | Check the agent-identity invariants (prompt-file-present, backend-consistency). |
|
|
69
|
+
| `cli overview` | Describe the CLI surface itself. |
|
|
70
|
+
|
|
71
|
+
Every command supports `--json`. Results go to stdout, errors/diagnostics to
|
|
72
|
+
stderr (never mixed). Exit codes: `0` success, `1` user error, `2` environment
|
|
73
|
+
error, `3+` reserved.
|
|
74
|
+
|
|
75
|
+
## Sibling projects
|
|
76
|
+
|
|
77
|
+
microduck-cli is built by composing three siblings rather than inventing a
|
|
78
|
+
fourth architecture:
|
|
79
|
+
|
|
80
|
+
| Repo | Role here |
|
|
81
|
+
|------|-----------|
|
|
82
|
+
| [`neurosymbolic-system`](https://github.com/agentculture/neurosymbolic-system) | The robot runtime to **import** once it ships — never re-implement the tick loop in this repo. |
|
|
83
|
+
| [`reachy-mini-cli`](https://github.com/agentculture/reachy-mini-cli) | The architecture to follow: noun groups, one tick seam for all senses, the single-SDK-owner model. |
|
|
84
|
+
| [`arm101-cli`](https://github.com/agentculture/arm101-cli) | The hardware-safety patterns: gated motion (`--apply` / dry-run / TTY confirm), release-on-abnormal-exit, hardware deps behind an extra. |
|
|
85
|
+
|
|
86
|
+
## Contributing
|
|
87
|
+
|
|
88
|
+
See [`CLAUDE.md`](CLAUDE.md) for the full conventions: the CLI contracts, what
|
|
89
|
+
to take from each sibling, version-bump-every-PR, the `cicd` PR lane, worktree
|
|
90
|
+
layout, and memory discipline.
|
|
91
|
+
|
|
92
|
+
## License
|
|
93
|
+
|
|
94
|
+
Apache 2.0 — see [`LICENSE`](LICENSE).
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# microduck-cli
|
|
2
|
+
|
|
3
|
+
Agent-agnostic CLI for controlling the MicroDuck robot. Any agent, any human,
|
|
4
|
+
one CLI. Built on the [neurosymbolic-system](https://github.com/agentculture/neurosymbolic-system)
|
|
5
|
+
runtime and following the
|
|
6
|
+
[reachy-mini-cli](https://github.com/agentculture/reachy-mini-cli) architecture.
|
|
7
|
+
|
|
8
|
+
## Status: scaffold
|
|
9
|
+
|
|
10
|
+
**There is no MicroDuck control code yet.** What ships today is the
|
|
11
|
+
AgentCulture mesh-agent baseline — an agent-first introspection CLI, a mesh
|
|
12
|
+
identity, the vendored guildmaster skill kit, and a build/CI/deploy pipeline.
|
|
13
|
+
The duck domain is the destination; the CLI below is the chassis it grows on.
|
|
14
|
+
|
|
15
|
+
The `neurosymbolic-system` runtime it is meant to import (senses, rules,
|
|
16
|
+
arbitration and motion on one 50 Hz tick) is itself still a scaffold, so it is
|
|
17
|
+
**not** a dependency of this package yet.
|
|
18
|
+
|
|
19
|
+
## What you get
|
|
20
|
+
|
|
21
|
+
- **An agent-first CLI** cited from [teken](https://github.com/agentculture/teken)
|
|
22
|
+
(`afi-cli`) — the runtime package has no third-party dependencies.
|
|
23
|
+
- **A mesh identity** — `culture.yaml` (`suffix` + `backend`) and the matching
|
|
24
|
+
prompt file (`AGENTS.colleague.md` for this agent's `backend: colleague`).
|
|
25
|
+
- **The vendored guildmaster skill kit** under `.claude/skills/`, cite-don't-import.
|
|
26
|
+
See [`docs/skill-sources.md`](docs/skill-sources.md).
|
|
27
|
+
- **A build + deploy baseline** — pytest, lint, the agent-first rubric gate, and
|
|
28
|
+
PyPI Trusted Publishing wired into GitHub Actions.
|
|
29
|
+
|
|
30
|
+
## Quickstart
|
|
31
|
+
|
|
32
|
+
The installed console script is **`microduck`** (not `microduck-cli` — that is
|
|
33
|
+
the distribution name and the name the CLI prints in its own output):
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
uv sync
|
|
37
|
+
uv run pytest -n auto # run the test suite
|
|
38
|
+
uv run microduck whoami # identity from culture.yaml
|
|
39
|
+
uv run microduck learn # self-teaching prompt (add --json)
|
|
40
|
+
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## CLI
|
|
44
|
+
|
|
45
|
+
| Verb | What it does |
|
|
46
|
+
|------|--------------|
|
|
47
|
+
| `whoami` | Report this agent's nick, version, backend, and model from `culture.yaml`. |
|
|
48
|
+
| `learn` | Print a structured self-teaching prompt. |
|
|
49
|
+
| `explain <path>` | Markdown docs for any noun/verb path. |
|
|
50
|
+
| `overview` | Read-only descriptive snapshot of the agent. |
|
|
51
|
+
| `doctor` | Check the agent-identity invariants (prompt-file-present, backend-consistency). |
|
|
52
|
+
| `cli overview` | Describe the CLI surface itself. |
|
|
53
|
+
|
|
54
|
+
Every command supports `--json`. Results go to stdout, errors/diagnostics to
|
|
55
|
+
stderr (never mixed). Exit codes: `0` success, `1` user error, `2` environment
|
|
56
|
+
error, `3+` reserved.
|
|
57
|
+
|
|
58
|
+
## Sibling projects
|
|
59
|
+
|
|
60
|
+
microduck-cli is built by composing three siblings rather than inventing a
|
|
61
|
+
fourth architecture:
|
|
62
|
+
|
|
63
|
+
| Repo | Role here |
|
|
64
|
+
|------|-----------|
|
|
65
|
+
| [`neurosymbolic-system`](https://github.com/agentculture/neurosymbolic-system) | The robot runtime to **import** once it ships — never re-implement the tick loop in this repo. |
|
|
66
|
+
| [`reachy-mini-cli`](https://github.com/agentculture/reachy-mini-cli) | The architecture to follow: noun groups, one tick seam for all senses, the single-SDK-owner model. |
|
|
67
|
+
| [`arm101-cli`](https://github.com/agentculture/arm101-cli) | The hardware-safety patterns: gated motion (`--apply` / dry-run / TTY confirm), release-on-abnormal-exit, hardware deps behind an extra. |
|
|
68
|
+
|
|
69
|
+
## Contributing
|
|
70
|
+
|
|
71
|
+
See [`CLAUDE.md`](CLAUDE.md) for the full conventions: the CLI contracts, what
|
|
72
|
+
to take from each sibling, version-bump-every-PR, the `cicd` PR lane, worktree
|
|
73
|
+
layout, and memory discipline.
|
|
74
|
+
|
|
75
|
+
## License
|
|
76
|
+
|
|
77
|
+
Apache 2.0 — see [`LICENSE`](LICENSE).
|
|
@@ -31,7 +31,7 @@ is load-bearing, even where guildmaster's upstream copy omits it.
|
|
|
31
31
|
|
|
32
32
|
| Skill | Upstream | Origin | Notes | Last synced |
|
|
33
33
|
|-------|----------|--------|-------|-------------|
|
|
34
|
-
| `cicd` | `../guildmaster/.claude/skills/cicd/` | guildmaster | CI/CD lane layered on `devex pr`: the 5 thin scripts (`workflow.sh`, `pr-status.sh`, `pr-reply.sh`, `_resolve-nick.sh`, `portability-lint.sh`) delegate lint/open/read/reply/delta to `devex` and add the `status` / `await` SonarCloud-gating extensions. Consumer-identifying prose (`guildmaster` → `microduck-cli`) adapted in the description + heading; upstream history (`Renamed from pr-review in steward 0.7.0; rebased on devex in 0.12.0`) and env-var literals (`STEWARD_*`) kept verbatim. The PR signature resolves at runtime from `culture.yaml` via `_resolve-nick.sh` (→ `microduck-cli`). Requires `devex` on PATH. | 2026-05-26 (guildmaster 0.6.0) |
|
|
34
|
+
| `cicd` | `../guildmaster/.claude/skills/cicd/` | guildmaster | CI/CD lane layered on `devex pr`: the 5 thin scripts (`workflow.sh`, `pr-status.sh`, `pr-reply.sh`, `_resolve-nick.sh`, `portability-lint.sh`) delegate lint/open/read/reply/delta to `devex` and add the `status` / `await` SonarCloud-gating extensions. Consumer-identifying prose (`guildmaster` → `microduck-cli`) adapted in the description + heading; upstream history (`Renamed from pr-review in steward 0.7.0; rebased on devex in 0.12.0`) and env-var literals (`STEWARD_*`) kept verbatim. The PR signature resolves at runtime from `culture.yaml` via `_resolve-nick.sh` (→ `microduck-cli`). Requires `devex` on PATH. **Prose divergence (2026-08-29):** the "Greenfield-aware steps", triage-defaults and mesh-ping paragraphs were adapted to this repo's actual stack — see [local divergence](#local-divergence--cicd-pre-pr-steps-adapted-to-this-repos-stack-2026-08-29). | 2026-05-26 (guildmaster 0.6.0) |
|
|
35
35
|
| `communicate` | `../guildmaster/.claude/skills/communicate/` | guildmaster | Cross-repo + mesh communication. Consumer-identifying prose adapted in the description (incl. the `- microduck-cli (Claude)` signature line). **No hard-coded signature literal in the scripts** — `post-issue.sh` is `agtag`-backed and resolves the signing nick from `culture.yaml`; requires `agtag` (>=0.1) on PATH. The supplier `scripts/templates/` (`skill-update-brief.md`, `skill-new-brief.md`) are kept verbatim — inert for a consumer (they cite guildmaster as upstream). Renamed from `coordinate` in steward 0.8.0; absorbed `gh-issues` in 0.9.1. | 2026-05-26 (guildmaster 0.6.0) |
|
|
36
36
|
| `version-bump` | `../guildmaster/.claude/skills/version-bump/` | guildmaster | Pure-Python, CWD-aware (`scripts/bump.py`). Verbatim except added `type: command`. | 2026-05-26 (guildmaster 0.6.0) |
|
|
37
37
|
| `agent-config` | `../guildmaster/.claude/skills/agent-config/` | guildmaster (origin steward) | Shows a Culture agent's full config; run `scripts/show.sh` directly (no `guild` binary required). `scripts/show.sh` + `data/backend-fingerprints.yaml` verbatim. Verbatim except added `type: command`. | 2026-05-26 (guildmaster 0.6.0) |
|
|
@@ -174,6 +174,33 @@ wrapper (i.e. its copy goes back to matching devague byte-for-byte), switch
|
|
|
174
174
|
the upstream column back to `../guildmaster/.claude/skills/<skill>/` and
|
|
175
175
|
re-sync from there per the normal procedure.
|
|
176
176
|
|
|
177
|
+
### Local divergence — `cicd` pre-PR steps adapted to this repo's stack (2026-08-29)
|
|
178
|
+
|
|
179
|
+
Guildmaster ships `cicd`'s `SKILL.md` with a **"Greenfield-aware steps"** section
|
|
180
|
+
whose pre-PR commands are conditional no-ops (`[ -d tests ] && …`), plus triage
|
|
181
|
+
defaults phrased for a greenfield supplier repo. microduck-cli's stack has
|
|
182
|
+
landed — tests, the lint stack, the rubric gate and the `version-check` job all
|
|
183
|
+
run — so those steps are unconditional here and the section is rewritten as
|
|
184
|
+
**"Pre-PR steps (microduck-cli)"**, listing the commands this repo's CI actually
|
|
185
|
+
enforces. Two smaller prose adaptations ride along: the triage defaults name this
|
|
186
|
+
repo's real false-positive class (scaffold complaints, and any proposal to grow a
|
|
187
|
+
second runtime loop in `microduck_cli/` instead of upstream in
|
|
188
|
+
`neurosymbolic-system`), and the closing mesh-ping paragraph names microduck-cli
|
|
189
|
+
rather than steward.
|
|
190
|
+
|
|
191
|
+
**No script bodies are edited** — the divergence is confined to `SKILL.md` prose,
|
|
192
|
+
which is the sanctioned adaptation surface. On a re-sync, pull guildmaster's copy
|
|
193
|
+
fresh and re-apply the three edits:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
diff -u ../guildmaster/.claude/skills/cicd/SKILL.md .claude/skills/cicd/SKILL.md
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
If guildmaster's upstream ever grows a per-consumer pre-PR mechanism (the
|
|
200
|
+
`pr lint --extra=tests,version,markdown` ask filed at
|
|
201
|
+
[devex#41](https://github.com/agentculture/devex/issues/41)), drop this
|
|
202
|
+
divergence and delegate to it instead.
|
|
203
|
+
|
|
177
204
|
## Tooling prerequisites
|
|
178
205
|
|
|
179
206
|
- **`devex`** (>=0.21) on PATH — `cicd` delegates the PR lifecycle to `devex pr`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "microduck-cli"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.8.0"
|
|
4
4
|
description = "Agent-agnostic CLI for controlling the MicroDuck robot. Any agent, any human, one CLI. Built on the neurosymbolic-system runtime and following the reachy-mini-cli architecture."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -154,37 +154,6 @@ wheels = [
|
|
|
154
154
|
{ url = "https://files.pythonhosted.org/packages/61/e8/cb8e80d6f9f55b99588625062822bf946cf03ed06315df4bd8397f5632a1/coverage-7.14.0-py3-none-any.whl", hash = "sha256:8de5b61163aee3d05c8a2beab6f47913df7981dad1baf82c414d99158c286ab1", size = 211764, upload-time = "2026-05-10T18:02:29.538Z" },
|
|
155
155
|
]
|
|
156
156
|
|
|
157
|
-
[[package]]
|
|
158
|
-
name = "microduck-cli"
|
|
159
|
-
version = "0.7.0"
|
|
160
|
-
source = { editable = "." }
|
|
161
|
-
|
|
162
|
-
[package.dev-dependencies]
|
|
163
|
-
dev = [
|
|
164
|
-
{ name = "bandit" },
|
|
165
|
-
{ name = "black" },
|
|
166
|
-
{ name = "flake8" },
|
|
167
|
-
{ name = "isort" },
|
|
168
|
-
{ name = "pytest" },
|
|
169
|
-
{ name = "pytest-cov" },
|
|
170
|
-
{ name = "pytest-xdist" },
|
|
171
|
-
{ name = "teken" },
|
|
172
|
-
]
|
|
173
|
-
|
|
174
|
-
[package.metadata]
|
|
175
|
-
|
|
176
|
-
[package.metadata.requires-dev]
|
|
177
|
-
dev = [
|
|
178
|
-
{ name = "bandit", specifier = ">=1.7.5" },
|
|
179
|
-
{ name = "black", specifier = ">=23.7.0" },
|
|
180
|
-
{ name = "flake8", specifier = ">=6.1" },
|
|
181
|
-
{ name = "isort", specifier = ">=5.12.0" },
|
|
182
|
-
{ name = "pytest", specifier = ">=8.0" },
|
|
183
|
-
{ name = "pytest-cov", specifier = ">=4.1" },
|
|
184
|
-
{ name = "pytest-xdist", specifier = ">=3.0" },
|
|
185
|
-
{ name = "teken", specifier = ">=0.8" },
|
|
186
|
-
]
|
|
187
|
-
|
|
188
157
|
[[package]]
|
|
189
158
|
name = "execnet"
|
|
190
159
|
version = "2.1.2"
|
|
@@ -256,6 +225,37 @@ wheels = [
|
|
|
256
225
|
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
|
257
226
|
]
|
|
258
227
|
|
|
228
|
+
[[package]]
|
|
229
|
+
name = "microduck-cli"
|
|
230
|
+
version = "0.8.0"
|
|
231
|
+
source = { editable = "." }
|
|
232
|
+
|
|
233
|
+
[package.dev-dependencies]
|
|
234
|
+
dev = [
|
|
235
|
+
{ name = "bandit" },
|
|
236
|
+
{ name = "black" },
|
|
237
|
+
{ name = "flake8" },
|
|
238
|
+
{ name = "isort" },
|
|
239
|
+
{ name = "pytest" },
|
|
240
|
+
{ name = "pytest-cov" },
|
|
241
|
+
{ name = "pytest-xdist" },
|
|
242
|
+
{ name = "teken" },
|
|
243
|
+
]
|
|
244
|
+
|
|
245
|
+
[package.metadata]
|
|
246
|
+
|
|
247
|
+
[package.metadata.requires-dev]
|
|
248
|
+
dev = [
|
|
249
|
+
{ name = "bandit", specifier = ">=1.7.5" },
|
|
250
|
+
{ name = "black", specifier = ">=23.7.0" },
|
|
251
|
+
{ name = "flake8", specifier = ">=6.1" },
|
|
252
|
+
{ name = "isort", specifier = ">=5.12.0" },
|
|
253
|
+
{ name = "pytest", specifier = ">=8.0" },
|
|
254
|
+
{ name = "pytest-cov", specifier = ">=4.1" },
|
|
255
|
+
{ name = "pytest-xdist", specifier = ">=3.0" },
|
|
256
|
+
{ name = "teken", specifier = ">=0.8" },
|
|
257
|
+
]
|
|
258
|
+
|
|
259
259
|
[[package]]
|
|
260
260
|
name = "mypy-extensions"
|
|
261
261
|
version = "1.1.0"
|
microduck_cli-0.7.0/CLAUDE.md
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# CLAUDE.md — seed / bootstrap placeholder
|
|
2
|
-
|
|
3
|
-
> **This is a self-initializing seed, not a finished runtime prompt.**
|
|
4
|
-
> Run `/init` (or describe the agent's domain to your AI assistant) to
|
|
5
|
-
> re-initialize this file into a full runtime prompt, using the description
|
|
6
|
-
> below and the scaffolded repo as context.
|
|
7
|
-
|
|
8
|
-
## Agent
|
|
9
|
-
|
|
10
|
-
This repository hosts the **microduck-cli** agent.
|
|
11
|
-
|
|
12
|
-
## Description
|
|
13
|
-
|
|
14
|
-
Agent-agnostic CLI for controlling the MicroDuck robot. Any agent, any human, one CLI. Built on the neurosymbolic-system runtime and following the reachy-mini-cli architecture.
|
|
15
|
-
|
|
16
|
-
## Re-init instruction
|
|
17
|
-
|
|
18
|
-
This file is a seed. To expand it into your full runtime prompt:
|
|
19
|
-
|
|
20
|
-
1. Open this repo in Claude Code (or your preferred AI assistant).
|
|
21
|
-
2. Run `/init` — the assistant will read the repo, incorporate the description
|
|
22
|
-
above, and replace this seed with a complete `CLAUDE.md`.
|
|
23
|
-
3. Commit the result.
|
|
24
|
-
|
|
25
|
-
Until you run `/init`, `microduck-cli` satisfies the `steward doctor`
|
|
26
|
-
`prompt-file-present` and `backend-consistency` invariants (a `CLAUDE.md`
|
|
27
|
-
exists and `culture.yaml` declares `backend: claude`) but the prompt is not
|
|
28
|
-
yet tailored to this agent's domain.
|
microduck_cli-0.7.0/PKG-INFO
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.5
|
|
2
|
-
Name: microduck-cli
|
|
3
|
-
Version: 0.7.0
|
|
4
|
-
Summary: Agent-agnostic CLI for controlling the MicroDuck robot. Any agent, any human, one CLI. Built on the neurosymbolic-system runtime and following the reachy-mini-cli architecture.
|
|
5
|
-
Project-URL: Homepage, https://github.com/agentculture/microduck-cli
|
|
6
|
-
Project-URL: Issues, https://github.com/agentculture/microduck-cli/issues
|
|
7
|
-
Author: AgentCulture
|
|
8
|
-
License-Expression: Apache-2.0
|
|
9
|
-
License-File: LICENSE
|
|
10
|
-
Classifier: Development Status :: 3 - Alpha
|
|
11
|
-
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
-
Classifier: Topic :: Software Development
|
|
15
|
-
Requires-Python: >=3.12
|
|
16
|
-
Description-Content-Type: text/markdown
|
|
17
|
-
|
|
18
|
-
# microduck-cli
|
|
19
|
-
|
|
20
|
-
Agent-agnostic CLI for controlling the MicroDuck robot. Any agent, any human, one CLI. Built on the neurosymbolic-system runtime and following the reachy-mini-cli architecture.
|
|
21
|
-
|
|
22
|
-
## What you get
|
|
23
|
-
|
|
24
|
-
- **An agent-first CLI** cited from [teken](https://github.com/agentculture/teken)
|
|
25
|
-
(`afi-cli`) — the runtime package has no third-party dependencies.
|
|
26
|
-
- **A mesh identity** — `culture.yaml` (`suffix` + `backend`) and the matching
|
|
27
|
-
resident prompt file (`AGENTS.colleague.md`, since this template runs
|
|
28
|
-
`backend: colleague`).
|
|
29
|
-
- **The canonical guildmaster skill kit** (11 skills) under `.claude/skills/`,
|
|
30
|
-
vendored cite-don't-import. See [`docs/skill-sources.md`](docs/skill-sources.md).
|
|
31
|
-
- **A build + deploy baseline** — pytest, lint, the agent-first rubric gate, and
|
|
32
|
-
PyPI Trusted Publishing wired into GitHub Actions.
|
|
33
|
-
|
|
34
|
-
## Quickstart
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
uv sync
|
|
38
|
-
uv run pytest -n auto # run the test suite
|
|
39
|
-
uv run microduck-cli whoami # identity from culture.yaml
|
|
40
|
-
uv run microduck-cli learn # self-teaching prompt (add --json)
|
|
41
|
-
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## CLI
|
|
45
|
-
|
|
46
|
-
| Verb | What it does |
|
|
47
|
-
|------|--------------|
|
|
48
|
-
| `whoami` | Report this agent's nick, version, backend, and model from `culture.yaml`. |
|
|
49
|
-
| `learn` | Print a structured self-teaching prompt. |
|
|
50
|
-
| `explain <path>` | Markdown docs for any noun/verb path. |
|
|
51
|
-
| `overview` | Read-only descriptive snapshot of the agent. |
|
|
52
|
-
| `doctor` | Check the agent-identity invariants (prompt-file-present, backend-consistency). |
|
|
53
|
-
| `cli overview` | Describe the CLI surface itself. |
|
|
54
|
-
|
|
55
|
-
Every command supports `--json`. Results go to stdout, errors/diagnostics to
|
|
56
|
-
stderr (never mixed). Exit codes: `0` success, `1` user error, `2` environment
|
|
57
|
-
error, `3+` reserved.
|
|
58
|
-
|
|
59
|
-
## Make it your own
|
|
60
|
-
|
|
61
|
-
1. Rename the package `microduck_cli/` and the `microduck-cli`
|
|
62
|
-
CLI/dist name throughout `pyproject.toml`, the package, `tests/`,
|
|
63
|
-
`sonar-project.properties`, and this `README.md`. The name is hard-coded in
|
|
64
|
-
~100 places, so list every occurrence first — see the `git grep` discovery
|
|
65
|
-
command in [`CLAUDE.md`](CLAUDE.md), the authoritative rename procedure.
|
|
66
|
-
2. Edit `culture.yaml` with your `suffix` and `backend`.
|
|
67
|
-
3. Rewrite `CLAUDE.md` for your agent and run `/init`.
|
|
68
|
-
4. Re-vendor only the skills you need from guildmaster (see
|
|
69
|
-
[`docs/skill-sources.md`](docs/skill-sources.md)).
|
|
70
|
-
|
|
71
|
-
See [`CLAUDE.md`](CLAUDE.md) for the full conventions (version-bump-every-PR,
|
|
72
|
-
the `cicd` PR lane, deploy setup).
|
|
73
|
-
|
|
74
|
-
## License
|
|
75
|
-
|
|
76
|
-
Apache 2.0 — see [`LICENSE`](LICENSE).
|
microduck_cli-0.7.0/README.md
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# microduck-cli
|
|
2
|
-
|
|
3
|
-
Agent-agnostic CLI for controlling the MicroDuck robot. Any agent, any human, one CLI. Built on the neurosymbolic-system runtime and following the reachy-mini-cli architecture.
|
|
4
|
-
|
|
5
|
-
## What you get
|
|
6
|
-
|
|
7
|
-
- **An agent-first CLI** cited from [teken](https://github.com/agentculture/teken)
|
|
8
|
-
(`afi-cli`) — the runtime package has no third-party dependencies.
|
|
9
|
-
- **A mesh identity** — `culture.yaml` (`suffix` + `backend`) and the matching
|
|
10
|
-
resident prompt file (`AGENTS.colleague.md`, since this template runs
|
|
11
|
-
`backend: colleague`).
|
|
12
|
-
- **The canonical guildmaster skill kit** (11 skills) under `.claude/skills/`,
|
|
13
|
-
vendored cite-don't-import. See [`docs/skill-sources.md`](docs/skill-sources.md).
|
|
14
|
-
- **A build + deploy baseline** — pytest, lint, the agent-first rubric gate, and
|
|
15
|
-
PyPI Trusted Publishing wired into GitHub Actions.
|
|
16
|
-
|
|
17
|
-
## Quickstart
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
uv sync
|
|
21
|
-
uv run pytest -n auto # run the test suite
|
|
22
|
-
uv run microduck-cli whoami # identity from culture.yaml
|
|
23
|
-
uv run microduck-cli learn # self-teaching prompt (add --json)
|
|
24
|
-
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## CLI
|
|
28
|
-
|
|
29
|
-
| Verb | What it does |
|
|
30
|
-
|------|--------------|
|
|
31
|
-
| `whoami` | Report this agent's nick, version, backend, and model from `culture.yaml`. |
|
|
32
|
-
| `learn` | Print a structured self-teaching prompt. |
|
|
33
|
-
| `explain <path>` | Markdown docs for any noun/verb path. |
|
|
34
|
-
| `overview` | Read-only descriptive snapshot of the agent. |
|
|
35
|
-
| `doctor` | Check the agent-identity invariants (prompt-file-present, backend-consistency). |
|
|
36
|
-
| `cli overview` | Describe the CLI surface itself. |
|
|
37
|
-
|
|
38
|
-
Every command supports `--json`. Results go to stdout, errors/diagnostics to
|
|
39
|
-
stderr (never mixed). Exit codes: `0` success, `1` user error, `2` environment
|
|
40
|
-
error, `3+` reserved.
|
|
41
|
-
|
|
42
|
-
## Make it your own
|
|
43
|
-
|
|
44
|
-
1. Rename the package `microduck_cli/` and the `microduck-cli`
|
|
45
|
-
CLI/dist name throughout `pyproject.toml`, the package, `tests/`,
|
|
46
|
-
`sonar-project.properties`, and this `README.md`. The name is hard-coded in
|
|
47
|
-
~100 places, so list every occurrence first — see the `git grep` discovery
|
|
48
|
-
command in [`CLAUDE.md`](CLAUDE.md), the authoritative rename procedure.
|
|
49
|
-
2. Edit `culture.yaml` with your `suffix` and `backend`.
|
|
50
|
-
3. Rewrite `CLAUDE.md` for your agent and run `/init`.
|
|
51
|
-
4. Re-vendor only the skills you need from guildmaster (see
|
|
52
|
-
[`docs/skill-sources.md`](docs/skill-sources.md)).
|
|
53
|
-
|
|
54
|
-
See [`CLAUDE.md`](CLAUDE.md) for the full conventions (version-bump-every-PR,
|
|
55
|
-
the `cicd` PR lane, deploy setup).
|
|
56
|
-
|
|
57
|
-
## License
|
|
58
|
-
|
|
59
|
-
Apache 2.0 — see [`LICENSE`](LICENSE).
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/ask-colleague/scripts/ask-colleague.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/communicate/scripts/fetch-issues.sh
RENAMED
|
File without changes
|
{microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/communicate/scripts/mesh-message.sh
RENAMED
|
File without changes
|
{microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/communicate/scripts/post-comment.sh
RENAMED
|
File without changes
|
{microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/communicate/scripts/post-issue.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/doc-test-alignment/scripts/check.sh
RENAMED
|
File without changes
|
|
File without changes
|
{microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/pypi-maintainer/scripts/switch-source.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{microduck_cli-0.7.0 → microduck_cli-0.8.0}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|