Skip to content

Commit bae0b07

Browse files
committed
Correct the skill_used allowlist rationale to reportable-by-name
user-invocable false opts out of slash synthesis, not name reporting: seven flagged skills stay allowlisted as use_skill recipes; only the four bake-only background skills are excluded.
1 parent 5bc0959 commit bae0b07

3 files changed

Lines changed: 28 additions & 14 deletions

File tree

‎docs/TELEMETRY.md‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,19 @@ share of prompts driven by MCP stays visible without the server key coming
7676
with it. `agent_name` on `subagent_*` is the same pattern: first-party
7777
director ids from `DIRECTOR_IDS` (and the legacy `worker` alias) are reported
7878
by id; project-defined or marketplace profile ids become `custom`.
79-
`skill_used` carries `skill_name`: a user-invocable first-party skill name
80-
from the closed `corbits-skills` allowlist (`ast-grep`, `create-issue`,
79+
`skill_used` carries `skill_name`: a first-party skill name reportable by
80+
name from the closed `corbits-skills` allowlist (`ast-grep`, `create-issue`,
8181
`git-rebase`, `git-worktrees`, `implement`, `interview`,
8282
`linear-issue-workflow`, `opsh`, `philosophy`, `plan`,
8383
`pull-request-review`, `refactor`, `review`, `scribe`, `style`,
84-
`typescript`), or `custom` for anything else. Bundled skills marked
85-
`user-invocable: false` (`native-integration`, `native-runtime`, `ponytail`,
86-
`idiot-proof`) are excluded from the allowlist by design. Unknown,
84+
`typescript`), or `custom` for anything else. `user-invocable: false` opts a
85+
skill out of slash synthesis, not out of name reporting: eleven bundled
86+
skills carry the flag, and seven of them (`git-rebase`, `git-worktrees`,
87+
`linear-issue-workflow`, `opsh`, `philosophy`, `style`, `typescript`)
88+
remain real `use_skill` recipes, so they stay on the allowlist — the names
89+
are ours either way. Excluded are the four bake-only background skills
90+
(`idiot-proof`, `native-integration`, `native-runtime`, `ponytail`), which
91+
are baked into agent prompts rather than invoked as skills. Unknown,
8792
project-local, and plugin-authored skill names are never transmitted —
8893
`skill_name` is the only identifying-adjacent property the event can carry.
8994
`plugin_loaded` goes further: there is no first-party list of plugins to

‎src/telemetry/classify.ts‎

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,19 @@ const BUILT_IN_AGENT_NAMES: ReadonlySet<string> = new Set([
7171
"worker",
7272
]);
7373

74-
// User-invocable first-party skills shipped by the bundled `corbits-skills`
75-
// plugin (plugins/corbits-skills/skills). The manifest carries only the plugin
76-
// id and kind — no skill list — so the closed set is spelled out here and
77-
// pinned by tests/unit/telemetry-product-events.test.ts. Bundled skills marked
78-
// `user-invocable: false` (native-integration, native-runtime, ponytail,
79-
// idiot-proof) are deliberately excluded — they are baked into agent prompts
80-
// rather than user-invoked — so the set covers only the user-invocable
81-
// first-party skills. Project- or plugin-authored skills are never reported by
82-
// name.
74+
// First-party skills reportable by name: the bundled `corbits-skills`
75+
// skills (plugins/corbits-skills/skills) whose names we ship ourselves, so
76+
// reporting one cannot identify the operator. The manifest carries only the
77+
// plugin id and kind — no skill list — so the closed set is spelled out here
78+
// and pinned by tests/unit/telemetry-product-events.test.ts.
79+
// `user-invocable: false` is a slash-surface flag, not a telemetry flag:
80+
// eleven bundled skills carry it, and seven of them (git-rebase,
81+
// git-worktrees, linear-issue-workflow, opsh, philosophy, style, typescript)
82+
// opt out of slash synthesis yet remain real `use_skill` recipes, so they
83+
// stay reportable by name. Excluded are the four bake-only background skills
84+
// (idiot-proof, native-integration, native-runtime, ponytail), which are
85+
// baked into agent prompts rather than invoked as skills. Project- or
86+
// plugin-authored skills are never reported by name.
8387
const FIRST_PARTY_SKILL_NAMES: ReadonlySet<string> = new Set([
8488
"ast-grep",
8589
"create-issue",

‎tests/unit/telemetry-product-events.test.ts‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,11 @@ test("first-party skill names are reported by name; everything else stays custom
244244
expect(classifySkillName("acme-internal-deploy")).toBe("custom");
245245
// Bundled catalog skills outside the closed allowlist are not reported by
246246
// name either — the allowlist is the closed set, not the skills directory.
247+
// All four bake-only background skills (user-invocable: false, baked into
248+
// agent prompts rather than invoked as skills) stay custom, while the
249+
// seven flagged-but-allowlisted use_skill-only recipes assert by name above.
250+
expect(classifySkillName("idiot-proof")).toBe("custom");
251+
expect(classifySkillName("native-integration")).toBe("custom");
247252
expect(classifySkillName("native-runtime")).toBe("custom");
248253
expect(classifySkillName("ponytail")).toBe("custom");
249254
expect(classifySkillName("Review")).toBe("custom");

0 commit comments

Comments
 (0)