commanders: the connection is the platform's, not the commander's

Framed this as a credential-safety rule; it is a boundary. A commander does not
hold a Whisper URL, does not name one and has no parameter for it — it knows the
platform can transcribe and asks the platform. So there is usually nothing
sensitive in a commander to leak, and sharing is simple for a reason rather than
by luck. The credential rule survives for the case where a commander genuinely
needs a secret of its own.

Also records a scope decision. Whether the platform is configured at all is a
system administration problem, not something to solve with a capability
registry — and the commander skill already covers it: do the first run by hand,
then arm. An unconfigured endpoint fails in front of the person doing it, and the
same rule catches somebody forking the commander onto a machine that lacks it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043
This commit is contained in:
2026-08-24 00:52:58 +00:00
co-authored by Claude Opus 5
parent 6d06acc111
commit 3adc88963b
+15 -9
View File
@@ -117,16 +117,22 @@ what is ignored and how credentials are handled is reference material — read o
for it. An affordance's body is charged to every turn of every commander forever, and this would earn that for it. An affordance's body is charged to every turn of every commander forever, and this would earn that
cost approximately never. `capabilities/skills/commander/SKILL.md` gains a section. cost approximately never. `capabilities/skills/commander/SKILL.md` gains a section.
**Credentials are named, never valued.** This is the rule that matters, because the natural place to put a **A commander never holds a service's connection details, and that is a boundary rather than a
Whisper URL is the config file that is about to become public. A commander declares what must be precaution.** The Whisper URL is not the commander's business: it knows the platform can transcribe and
configured — "an STT endpoint" — and the platform holds the value. Gitignoring `state/` does not cover asks the platform, which holds the connection. So there is usually nothing sensitive in a commander to
this: a credential is definition-shaped, it looks like configuration, and it would be committed and pushed leak, and the sharing story is simple for a reason rather than by luck.
and stay published.
**And a shared commander declares what it requires.** Yours assumes a transcription plugin, a Whisper Where a commander genuinely does need a secret of its own, the same rule applies for the obvious reason: a
server actually configured, and a folder that exists. Landing on an install without them, it arms cleanly credential is definition-shaped — it looks like configuration — so excluding `state/` does not protect it,
and fails silently at 3am — the worst failure this system has. Same problem `osDependencies` solves for a and a shared repository is exactly the artefact where one gets published and stays published. Name what
plugin, wanting the same answer: the receiving platform refuses rather than pretends. must be configured; let the platform hold the value.
**Whether the platform is actually configured is not this system's problem.** A commander depending on
transcription can be armed on a server where nobody set up a Whisper endpoint, and it would produce
nothing. That is a system administration mistake, and the answer is already in the commander skill rather
than in new machinery: **do the first run by hand, then arm.** A first run against something unconfigured
fails in front of the person doing it. The same rule catches the shared case — somebody forking this onto
their own machine finds out on their first run instead of at 3am.
The forking story then reads: clone, open a conversation, answer where your memos land and what you want The forking story then reads: clone, open a conversation, answer where your memos land and what you want
done with them, and the commander rewrites its own parameters and arms. done with them, and the commander rewrites its own parameters and arms.