microphone-cli 0.8.0__tar.gz → 0.8.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.
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/CHANGELOG.md +18 -0
- microphone_cli-0.8.2/CLAUDE.md +169 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/PKG-INFO +41 -19
- microphone_cli-0.8.2/README.md +81 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/pyproject.toml +1 -1
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/uv.lock +31 -31
- microphone_cli-0.8.0/CLAUDE.md +0 -28
- microphone_cli-0.8.0/README.md +0 -59
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/agent-config/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/agent-config/scripts/show.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/ask-colleague/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/ask-colleague/prompts/review.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/ask-colleague/prompts/write.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/challenge/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/challenge/scripts/challenge.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/cicd/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/cicd/scripts/workflow.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/communicate/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/deviate/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/deviate/scripts/deviate.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/recall/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/recall/scripts/recall.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/remember/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/remember/scripts/remember.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/run-tests/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/scope/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/scope/scripts/scope.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/sonarclaude/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/spec-to-plan/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/summarize-delivery/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/summarize-delivery/scripts/summarize-delivery.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/think/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/think/scripts/think.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/validate-delivery/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/validate-delivery/scripts/validate-delivery.sh +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/version-bump/SKILL.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/version-bump/scripts/bump.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills.local.yaml.example +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.flake8 +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.github/workflows/publish.yml +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.github/workflows/tests.yml +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.gitignore +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/.markdownlint-cli2.yaml +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/AGENTS.colleague.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/LICENSE +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/culture.yaml +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/docs/skill-sources.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/docs/steward/steward-suggestions.md +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/__init__.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/__main__.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/cli/__init__.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/cli/_commands/__init__.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/cli/_commands/cli.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/cli/_commands/doctor.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/cli/_commands/explain.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/cli/_commands/learn.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/cli/_commands/overview.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/cli/_commands/whoami.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/cli/_errors.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/cli/_output.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/explain/__init__.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/microphone_cli/explain/catalog.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/sonar-project.properties +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/tests/__init__.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/tests/test_cli.py +0 -0
- {microphone_cli-0.8.0 → microphone_cli-0.8.2}/tests/test_cli_introspection.py +0 -0
|
@@ -5,6 +5,24 @@ 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.2] - 2026-09-06
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **Documented `markdownlint-cli2` as though `uv sync` installed it** (Qodo review, PR #2) — it is an npm tool absent from the dev dependency group, so a fresh checkout following `CLAUDE.md` hit command-not-found. Both `CLAUDE.md` and `README.md` now show the `npm install -g markdownlint-cli2@0.21.0` step, pinned to the version CI installs.
|
|
13
|
+
- **Overstated what CI's `version-check` job enforces** (Qodo review, PR #2) — the workflow compares the PR version against `main` as strings and fails only on equality, so a downgrade passes. The docs now describe it as a forgotten-bump tripwire rather than a guarantee the version moved forward.
|
|
14
|
+
|
|
15
|
+
## [0.8.1] - 2026-09-06
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- **`CLAUDE.md` re-initialized from the seed placeholder into a full runtime prompt** — records the repo's actual state (renamed template scaffold, no microphone domain code yet, and the specific files still carrying template prose), the build/test/lint/rubric-gate command set, the CLI architecture (the `register(sub)` dispatch pattern, the `CliError` / stream-split / `--json` contracts the rubric enforces, and the `parser_class` propagation nested nouns need), the checklist for adding a verb or noun, and the CI/release and vendored-skill conventions.
|
|
20
|
+
- **`README.md` corrected and refreshed** — the quickstart told readers to run `microphone-cli`, which does not exist: `pyproject.toml` declares the console script as `microphone`, so `uv run microphone-cli whoami` failed with `Failed to spawn`. Commands now use `microphone`, with a note that argparse still prints `microphone-cli` as the program name. Also adds a scaffold-status banner, drops the stale skill count (said 11; there are 19 vendored directories), fixes the backend description to name this agent rather than the template, and replaces the template-only rename section with a Development section.
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- **`CLAUDE.md` claimed `culture.yaml` declares `backend: claude`** — it declares `colleague`, which is why `AGENTS.colleague.md` is the resident prompt file `doctor` checks for. The new file records the correct backend-to-prompt-file mapping.
|
|
25
|
+
|
|
8
26
|
## [0.8.0] - 2026-09-05
|
|
9
27
|
|
|
10
28
|
### Added
|
|
@@ -0,0 +1,169 @@
|
|
|
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 is
|
|
6
|
+
|
|
7
|
+
**microphone-cli** — an agent-first CLI for USB microphones and microphone
|
|
8
|
+
arrays: enumerate devices, select and inspect channels, control gain and sample
|
|
9
|
+
format, and read direction-of-arrival from array firmware.
|
|
10
|
+
|
|
11
|
+
**Current state: scaffold only.** The repo was cloned from the AgentCulture
|
|
12
|
+
agent template (`5f9b1bd scaffold microphone-cli from culture-agent-template`).
|
|
13
|
+
The package is renamed and the CI/identity/skills baseline is live, but **no
|
|
14
|
+
microphone domain code exists yet** — the only verbs are the template's
|
|
15
|
+
agent-first introspection surface (`whoami`, `learn`, `explain`, `overview`,
|
|
16
|
+
`doctor`, `cli overview`). Several strings still describe the template
|
|
17
|
+
("a clonable template for AgentCulture mesh agents") rather than the microphone
|
|
18
|
+
domain: `microphone_cli/cli/_commands/learn.py`, `overview.py` (`_ARTIFACTS`),
|
|
19
|
+
`microphone_cli/explain/catalog.py`, and `README.md`. Rewrite those as the
|
|
20
|
+
domain lands.
|
|
21
|
+
|
|
22
|
+
## Commands
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
uv sync # install (dev group included)
|
|
26
|
+
|
|
27
|
+
uv run pytest -n auto # full suite, parallel
|
|
28
|
+
uv run pytest tests/test_cli.py # one file
|
|
29
|
+
uv run pytest -k whoami # one test / pattern
|
|
30
|
+
uv run pytest --cov=microphone_cli --cov-report=term # coverage (fail_under=60)
|
|
31
|
+
|
|
32
|
+
uv run black --check microphone_cli tests # CI lint set — all four must pass
|
|
33
|
+
uv run isort --check-only microphone_cli tests
|
|
34
|
+
uv run flake8 microphone_cli tests
|
|
35
|
+
uv run bandit -c pyproject.toml -r microphone_cli
|
|
36
|
+
|
|
37
|
+
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
|
|
38
|
+
|
|
39
|
+
uv run microphone whoami # the installed console script
|
|
40
|
+
uv run microphone doctor --json
|
|
41
|
+
python -m microphone_cli learn
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Markdown lint is not a `uv` tool** — `uv sync` does not install it, so it is
|
|
45
|
+
not available on a fresh checkout. CI installs it from npm; do the same locally,
|
|
46
|
+
pinning the version CI uses so results match:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npm install -g markdownlint-cli2@0.21.0
|
|
50
|
+
markdownlint-cli2 "**/*.md" "#node_modules" "#.local" "#.claude/skills"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Config lives in `.markdownlint-cli2.yaml` (MD013 and MD060 off, MD024
|
|
54
|
+
siblings-only for the changelog; `.claude/skills/**` ignored).
|
|
55
|
+
|
|
56
|
+
### Console-script name
|
|
57
|
+
|
|
58
|
+
`pyproject.toml` declares `microphone = "microphone_cli.cli:main"` — the binary
|
|
59
|
+
is **`microphone`**, not `microphone-cli`. The argparse `prog` is
|
|
60
|
+
`"microphone-cli"`, so `--help` and every doc string say `microphone-cli …`
|
|
61
|
+
while the actual command is `microphone …`. Either rename the script or the
|
|
62
|
+
`prog` before this ships; until then, prefer `microphone` in anything runnable.
|
|
63
|
+
|
|
64
|
+
## Architecture
|
|
65
|
+
|
|
66
|
+
Zero runtime dependencies (`dependencies = []` in `pyproject.toml`) — that is a
|
|
67
|
+
deliberate constraint of the agent-first template, and `culture.yaml` is parsed
|
|
68
|
+
by hand in `whoami.py` rather than pulling in PyYAML. Keep new runtime deps out
|
|
69
|
+
unless the microphone backend genuinely requires one.
|
|
70
|
+
|
|
71
|
+
### CLI dispatch
|
|
72
|
+
|
|
73
|
+
`microphone_cli/cli/__init__.py` is the only place that knows the verb set.
|
|
74
|
+
`_build_parser()` imports each command module and calls its `register(sub)`;
|
|
75
|
+
`main()` parses and hands off to `_dispatch()`, which invokes `args.func(args)`.
|
|
76
|
+
|
|
77
|
+
Three contracts hold across the whole surface, and the rubric gate checks them:
|
|
78
|
+
|
|
79
|
+
- **Errors** — `microphone_cli/cli/_errors.py`. Every failure raises `CliError`
|
|
80
|
+
(`{code, message, remediation}`). `_dispatch` wraps any stray exception into
|
|
81
|
+
one, so **no traceback ever reaches stderr**. Exit codes: `0` success,
|
|
82
|
+
`1` user error, `2` environment error, `3+` reserved.
|
|
83
|
+
- **Streams** — `microphone_cli/cli/_output.py`. Results to stdout
|
|
84
|
+
(`emit_result`), errors and diagnostics to stderr (`emit_error`,
|
|
85
|
+
`emit_diagnostic`); they never mix. Text errors render `error:` + `hint:`.
|
|
86
|
+
- **`--json` everywhere** — every parser adds `--json`; handlers read it via
|
|
87
|
+
`getattr(args, "json", False)`.
|
|
88
|
+
|
|
89
|
+
Argparse's own errors also honour these contracts: `_CliArgumentParser`
|
|
90
|
+
overrides `.error()` to emit a `CliError`, and subparsers are built with
|
|
91
|
+
`parser_class=_CliArgumentParser` so nested nouns inherit it. Because
|
|
92
|
+
parse-time errors happen before `args.json` exists, `main()` pre-scans raw argv
|
|
93
|
+
for `--json` into the class-level `_json_hint`. **When you add a nested
|
|
94
|
+
subparser group, pass `parser_class=type(p)` through** (see
|
|
95
|
+
`_commands/cli.py`) — forgetting it silently drops that group back to
|
|
96
|
+
argparse's default `exit(2)` behaviour.
|
|
97
|
+
|
|
98
|
+
### Identity
|
|
99
|
+
|
|
100
|
+
`_commands/whoami.py` walks up from `__file__` (not the CWD) to find the repo's
|
|
101
|
+
own `culture.yaml`, so identity is the agent's, not the caller's. In a wheel
|
|
102
|
+
install no `culture.yaml` ships and the literal fallbacks apply. `doctor` and
|
|
103
|
+
`overview` both build on `whoami`'s `report()` / `read_agent_fields()`.
|
|
104
|
+
|
|
105
|
+
`doctor` mirrors the two `steward doctor` invariants — **prompt-file-present**
|
|
106
|
+
and **backend-consistency** — via the `_PROMPT_FILE` map (`claude` →
|
|
107
|
+
`CLAUDE.md`, `colleague` → `AGENTS.colleague.md`, `acp` → `AGENTS.md`,
|
|
108
|
+
`gemini` → `GEMINI.md`), plus a skills-present check. It returns
|
|
109
|
+
`{healthy, checks: [{id, passed, severity, message, remediation}]}` — the
|
|
110
|
+
rubric depends on that exact shape.
|
|
111
|
+
|
|
112
|
+
**This agent runs `backend: colleague`** (`culture.yaml`), so its resident
|
|
113
|
+
prompt file is `AGENTS.colleague.md`; this `CLAUDE.md` is the Claude Code
|
|
114
|
+
guidance file. Changing `backend` means adding the matching prompt file or
|
|
115
|
+
`doctor` (and CI's rubric gate) goes red.
|
|
116
|
+
|
|
117
|
+
### Adding a verb or noun
|
|
118
|
+
|
|
119
|
+
1. New module in `microphone_cli/cli/_commands/` exposing `register(sub)`, with
|
|
120
|
+
`--json` and a `func` default.
|
|
121
|
+
2. Register it in `_build_parser()` (there is a marked spot).
|
|
122
|
+
3. **Add a catalog entry** in `microphone_cli/explain/catalog.py` keyed by the
|
|
123
|
+
command-path tuple — `tests/test_cli.py::test_every_catalog_path_resolves`
|
|
124
|
+
walks every key, and the rubric requires an `explain` entry per path.
|
|
125
|
+
4. Update the command map in `_commands/learn.py` (both `_TEXT` and
|
|
126
|
+
`_as_json_payload()`) and the `_VERBS` list in `_commands/overview.py`.
|
|
127
|
+
5. A noun group that gets action-verbs **must** also expose `<noun> overview` —
|
|
128
|
+
the rubric's `overview_cli_noun_exists` check. `_commands/cli.py` is the
|
|
129
|
+
worked example (its bare form prints its own overview).
|
|
130
|
+
6. Descriptive verbs must not hard-fail on a bad target path — `overview`
|
|
131
|
+
accepts and ignores a positional `target` for exactly this reason.
|
|
132
|
+
|
|
133
|
+
## CI and release
|
|
134
|
+
|
|
135
|
+
Three jobs in `.github/workflows/tests.yml`: `test` (pytest + coverage →
|
|
136
|
+
SonarCloud, scan skipped when `SONAR_TOKEN` is empty, so fork PRs stay green),
|
|
137
|
+
`lint` (black, isort, flake8, bandit, markdownlint, `teken cli doctor --strict`),
|
|
138
|
+
and `version-check`.
|
|
139
|
+
|
|
140
|
+
**Every PR bumps the version — including docs-, config-, and CI-only PRs.**
|
|
141
|
+
Use the `version-bump` skill (or edit `pyproject.toml` + `CHANGELOG.md` by hand,
|
|
142
|
+
Keep-a-Changelog format). `__version__` is read from package metadata, so there
|
|
143
|
+
is no second version literal to update.
|
|
144
|
+
|
|
145
|
+
`version-check` only partly enforces that rule: it compares the PR's
|
|
146
|
+
`pyproject.toml` version against `origin/main` as **strings** and fails on
|
|
147
|
+
equality alone. Any different value passes, a downgrade included — `0.8.1` →
|
|
148
|
+
`0.8.0` is green today. Treat the check as a "did you forget entirely?" tripwire,
|
|
149
|
+
not a guarantee the version moved forward; the publish job is what actually
|
|
150
|
+
breaks later. (The comparison is string-equality in every AgentCulture sibling,
|
|
151
|
+
so tightening it belongs upstream, not in this repo alone.)
|
|
152
|
+
|
|
153
|
+
`publish.yml` publishes to TestPyPI on same-repo PRs (`<version>.devN`) and to
|
|
154
|
+
PyPI on push to main, both via Trusted Publishing.
|
|
155
|
+
|
|
156
|
+
Line length is **100** (black, isort profile=black, flake8 with `E203,W503`
|
|
157
|
+
ignored). SonarCloud project key: `agentculture_microphone-cli`; the quality
|
|
158
|
+
gate blocks CI when the token is configured.
|
|
159
|
+
|
|
160
|
+
## Vendored skills
|
|
161
|
+
|
|
162
|
+
`.claude/skills/` is vendored **cite-don't-import** from `guildmaster` (several
|
|
163
|
+
originate in `devague`, one in `colleague`). Do not hand-edit them — they are
|
|
164
|
+
excluded from markdownlint and Sonar for that reason. Provenance and the
|
|
165
|
+
re-sync procedure live in `docs/skill-sources.md`; per-machine paths go in a
|
|
166
|
+
git-ignored `.claude/skills.local.yaml` (copy the `.example`).
|
|
167
|
+
|
|
168
|
+
Use the `cicd` skill for PR creation and review-comment handling. Online posts
|
|
169
|
+
made outside those scripts sign as `- microphone-cli (Claude)`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: microphone-cli
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.2
|
|
4
4
|
Summary: Agent-first CLI for USB microphones and microphone arrays: enumerate devices, select and inspect channels, control gain and sample format, and read direction-of-arrival from array firmware.
|
|
5
5
|
Project-URL: Homepage, https://github.com/agentculture/microphone-cli
|
|
6
6
|
Project-URL: Issues, https://github.com/agentculture/microphone-cli/issues
|
|
@@ -17,17 +17,23 @@ Description-Content-Type: text/markdown
|
|
|
17
17
|
|
|
18
18
|
# microphone-cli
|
|
19
19
|
|
|
20
|
-
Agent-first CLI for USB microphones and microphone arrays: enumerate devices,
|
|
20
|
+
Agent-first CLI for USB microphones and microphone arrays: enumerate devices,
|
|
21
|
+
select and inspect channels, control gain and sample format, and read
|
|
22
|
+
direction-of-arrival from array firmware.
|
|
23
|
+
|
|
24
|
+
> **Status: scaffold.** The identity, CI, and agent-first CLI baseline are in
|
|
25
|
+
> place; the microphone domain verbs are not implemented yet. What ships today
|
|
26
|
+
> is the introspection surface below.
|
|
21
27
|
|
|
22
28
|
## What you get
|
|
23
29
|
|
|
24
30
|
- **An agent-first CLI** cited from [teken](https://github.com/agentculture/teken)
|
|
25
31
|
(`afi-cli`) — the runtime package has no third-party dependencies.
|
|
26
32
|
- **A mesh identity** — `culture.yaml` (`suffix` + `backend`) and the matching
|
|
27
|
-
resident prompt file (`AGENTS.colleague.md`, since this
|
|
33
|
+
resident prompt file (`AGENTS.colleague.md`, since this agent runs
|
|
28
34
|
`backend: colleague`).
|
|
29
|
-
- **The canonical guildmaster skill kit**
|
|
30
|
-
|
|
35
|
+
- **The canonical guildmaster skill kit** under `.claude/skills/`, vendored
|
|
36
|
+
cite-don't-import. See [`docs/skill-sources.md`](docs/skill-sources.md).
|
|
31
37
|
- **A build + deploy baseline** — pytest, lint, the agent-first rubric gate, and
|
|
32
38
|
PyPI Trusted Publishing wired into GitHub Actions.
|
|
33
39
|
|
|
@@ -36,11 +42,15 @@ Agent-first CLI for USB microphones and microphone arrays: enumerate devices, se
|
|
|
36
42
|
```bash
|
|
37
43
|
uv sync
|
|
38
44
|
uv run pytest -n auto # run the test suite
|
|
39
|
-
uv run microphone
|
|
40
|
-
uv run microphone
|
|
45
|
+
uv run microphone whoami # identity from culture.yaml
|
|
46
|
+
uv run microphone learn # self-teaching prompt (add --json)
|
|
41
47
|
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
|
|
42
48
|
```
|
|
43
49
|
|
|
50
|
+
The installed console script is **`microphone`**. Argparse still prints
|
|
51
|
+
`microphone-cli` as the program name in `--help` output; the runnable command is
|
|
52
|
+
`microphone`.
|
|
53
|
+
|
|
44
54
|
## CLI
|
|
45
55
|
|
|
46
56
|
| Verb | What it does |
|
|
@@ -56,20 +66,32 @@ Every command supports `--json`. Results go to stdout, errors/diagnostics to
|
|
|
56
66
|
stderr (never mixed). Exit codes: `0` success, `1` user error, `2` environment
|
|
57
67
|
error, `3+` reserved.
|
|
58
68
|
|
|
59
|
-
##
|
|
69
|
+
## Development
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
uv run pytest tests/test_cli.py # a single file
|
|
73
|
+
uv run pytest -k whoami # a single test
|
|
74
|
+
uv run black --check microphone_cli tests
|
|
75
|
+
uv run isort --check-only microphone_cli tests
|
|
76
|
+
uv run flake8 microphone_cli tests
|
|
77
|
+
uv run bandit -c pyproject.toml -r microphone_cli
|
|
78
|
+
```
|
|
60
79
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
80
|
+
Every PR bumps the version in `pyproject.toml` and adds a `CHANGELOG.md` entry,
|
|
81
|
+
even for docs- and CI-only changes. CI's `version-check` job catches a forgotten
|
|
82
|
+
bump by failing when the version still matches `main`; it does not verify the
|
|
83
|
+
version moved *forward*.
|
|
84
|
+
|
|
85
|
+
Markdown lint is an npm tool, not a `uv` one — install it separately, pinned to
|
|
86
|
+
the version CI uses:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npm install -g markdownlint-cli2@0.21.0
|
|
90
|
+
markdownlint-cli2 "**/*.md" "#node_modules" "#.local" "#.claude/skills"
|
|
91
|
+
```
|
|
70
92
|
|
|
71
|
-
See [`CLAUDE.md`](CLAUDE.md) for the
|
|
72
|
-
|
|
93
|
+
See [`CLAUDE.md`](CLAUDE.md) for the architecture, the CLI contracts (errors,
|
|
94
|
+
stream split, `--json`), and how to add a verb or noun group.
|
|
73
95
|
|
|
74
96
|
## License
|
|
75
97
|
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# microphone-cli
|
|
2
|
+
|
|
3
|
+
Agent-first CLI for USB microphones and microphone arrays: enumerate devices,
|
|
4
|
+
select and inspect channels, control gain and sample format, and read
|
|
5
|
+
direction-of-arrival from array firmware.
|
|
6
|
+
|
|
7
|
+
> **Status: scaffold.** The identity, CI, and agent-first CLI baseline are in
|
|
8
|
+
> place; the microphone domain verbs are not implemented yet. What ships today
|
|
9
|
+
> is the introspection surface below.
|
|
10
|
+
|
|
11
|
+
## What you get
|
|
12
|
+
|
|
13
|
+
- **An agent-first CLI** cited from [teken](https://github.com/agentculture/teken)
|
|
14
|
+
(`afi-cli`) — the runtime package has no third-party dependencies.
|
|
15
|
+
- **A mesh identity** — `culture.yaml` (`suffix` + `backend`) and the matching
|
|
16
|
+
resident prompt file (`AGENTS.colleague.md`, since this agent runs
|
|
17
|
+
`backend: colleague`).
|
|
18
|
+
- **The canonical guildmaster skill kit** under `.claude/skills/`, vendored
|
|
19
|
+
cite-don't-import. See [`docs/skill-sources.md`](docs/skill-sources.md).
|
|
20
|
+
- **A build + deploy baseline** — pytest, lint, the agent-first rubric gate, and
|
|
21
|
+
PyPI Trusted Publishing wired into GitHub Actions.
|
|
22
|
+
|
|
23
|
+
## Quickstart
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
uv sync
|
|
27
|
+
uv run pytest -n auto # run the test suite
|
|
28
|
+
uv run microphone whoami # identity from culture.yaml
|
|
29
|
+
uv run microphone learn # self-teaching prompt (add --json)
|
|
30
|
+
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The installed console script is **`microphone`**. Argparse still prints
|
|
34
|
+
`microphone-cli` as the program name in `--help` output; the runnable command is
|
|
35
|
+
`microphone`.
|
|
36
|
+
|
|
37
|
+
## CLI
|
|
38
|
+
|
|
39
|
+
| Verb | What it does |
|
|
40
|
+
|------|--------------|
|
|
41
|
+
| `whoami` | Report this agent's nick, version, backend, and model from `culture.yaml`. |
|
|
42
|
+
| `learn` | Print a structured self-teaching prompt. |
|
|
43
|
+
| `explain <path>` | Markdown docs for any noun/verb path. |
|
|
44
|
+
| `overview` | Read-only descriptive snapshot of the agent. |
|
|
45
|
+
| `doctor` | Check the agent-identity invariants (prompt-file-present, backend-consistency). |
|
|
46
|
+
| `cli overview` | Describe the CLI surface itself. |
|
|
47
|
+
|
|
48
|
+
Every command supports `--json`. Results go to stdout, errors/diagnostics to
|
|
49
|
+
stderr (never mixed). Exit codes: `0` success, `1` user error, `2` environment
|
|
50
|
+
error, `3+` reserved.
|
|
51
|
+
|
|
52
|
+
## Development
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
uv run pytest tests/test_cli.py # a single file
|
|
56
|
+
uv run pytest -k whoami # a single test
|
|
57
|
+
uv run black --check microphone_cli tests
|
|
58
|
+
uv run isort --check-only microphone_cli tests
|
|
59
|
+
uv run flake8 microphone_cli tests
|
|
60
|
+
uv run bandit -c pyproject.toml -r microphone_cli
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Every PR bumps the version in `pyproject.toml` and adds a `CHANGELOG.md` entry,
|
|
64
|
+
even for docs- and CI-only changes. CI's `version-check` job catches a forgotten
|
|
65
|
+
bump by failing when the version still matches `main`; it does not verify the
|
|
66
|
+
version moved *forward*.
|
|
67
|
+
|
|
68
|
+
Markdown lint is an npm tool, not a `uv` one — install it separately, pinned to
|
|
69
|
+
the version CI uses:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm install -g markdownlint-cli2@0.21.0
|
|
73
|
+
markdownlint-cli2 "**/*.md" "#node_modules" "#.local" "#.claude/skills"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
See [`CLAUDE.md`](CLAUDE.md) for the architecture, the CLI contracts (errors,
|
|
77
|
+
stream split, `--json`), and how to add a verb or noun group.
|
|
78
|
+
|
|
79
|
+
## License
|
|
80
|
+
|
|
81
|
+
Apache 2.0 — see [`LICENSE`](LICENSE).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "microphone-cli"
|
|
3
|
-
version = "0.8.
|
|
3
|
+
version = "0.8.2"
|
|
4
4
|
description = "Agent-first CLI for USB microphones and microphone arrays: enumerate devices, select and inspect channels, control gain and sample format, and read direction-of-arrival from array firmware."
|
|
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 = "microphone-cli"
|
|
159
|
-
version = "0.8.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 = "microphone-cli"
|
|
230
|
+
version = "0.8.2"
|
|
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"
|
microphone_cli-0.8.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 **microphone-cli** agent.
|
|
11
|
-
|
|
12
|
-
## Description
|
|
13
|
-
|
|
14
|
-
Agent-first CLI for USB microphones and microphone arrays: enumerate devices, select and inspect channels, control gain and sample format, and read direction-of-arrival from array firmware.
|
|
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`, `microphone-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.
|
microphone_cli-0.8.0/README.md
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# microphone-cli
|
|
2
|
-
|
|
3
|
-
Agent-first CLI for USB microphones and microphone arrays: enumerate devices, select and inspect channels, control gain and sample format, and read direction-of-arrival from array firmware.
|
|
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 microphone-cli whoami # identity from culture.yaml
|
|
23
|
-
uv run microphone-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 `microphone_cli/` and the `microphone-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
|
{microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/ask-colleague/prompts/explore.md
RENAMED
|
File without changes
|
{microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/ask-colleague/prompts/review.md
RENAMED
|
File without changes
|
|
File without changes
|
{microphone_cli-0.8.0 → microphone_cli-0.8.2}/.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
|
{microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/cicd/scripts/portability-lint.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/communicate/scripts/fetch-issues.sh
RENAMED
|
File without changes
|
{microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/communicate/scripts/mesh-message.sh
RENAMED
|
File without changes
|
{microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/communicate/scripts/post-comment.sh
RENAMED
|
File without changes
|
{microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/communicate/scripts/post-issue.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{microphone_cli-0.8.0 → microphone_cli-0.8.2}/.claude/skills/doc-test-alignment/scripts/check.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
|
{microphone_cli-0.8.0 → microphone_cli-0.8.2}/.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|