@tanstack/intent 0.1.0 → 0.2.0

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.
Files changed (57) hide show
  1. package/README.md +0 -3
  2. package/dist/artifact-coverage-CXX6wav1.mjs +2 -0
  3. package/dist/{artifact-coverage-nGwun1tt.mjs → artifact-coverage-DFtI6V_H.mjs} +1 -3
  4. package/dist/{cli-error-BrMXlbtx.mjs → cli-error-DDAO6DIL.mjs} +1 -2
  5. package/dist/{cli-support-BevVu4gw.mjs → cli-support-BQSl7gAE.mjs} +8 -11
  6. package/dist/{cli-support-Cpo_9JfL.mjs → cli-support-DK1Kq8Ue.mjs} +2 -6
  7. package/dist/cli.d.mts +0 -1
  8. package/dist/cli.mjs +14 -16
  9. package/dist/{command-runner-fstUIUhe.mjs → command-runner-B5OofX0E.mjs} +1 -2
  10. package/dist/{core-6UP6jyL8.mjs → core-BRUBEMwe.mjs} +9 -13
  11. package/dist/core.d.mts +3 -4
  12. package/dist/core.mjs +2 -11
  13. package/dist/{display-CVMGtcHz.mjs → display-CnpA7XuV.mjs} +3 -7
  14. package/dist/{edit-package-json-DKyJ04t1.mjs → edit-package-json-D8xfcy2X.mjs} +1 -2
  15. package/dist/{exclude-BTaE6TNh.mjs → exclude-DbHwcgQQ.mjs} +6 -11
  16. package/dist/{excludes-DG83YEzb.mjs → excludes-ByvSbmmj.mjs} +3 -6
  17. package/dist/index.d.mts +3 -31
  18. package/dist/index.mjs +9 -280
  19. package/dist/{install-DXQsQQIL.mjs → install-CTGQvXoB.mjs} +18 -24
  20. package/dist/{list-CxB37mvm.mjs → list-9SbFGUd5.mjs} +5 -19
  21. package/dist/{load-Ch4UjIza.mjs → load-BY8vh7Gp.mjs} +4 -14
  22. package/dist/{meta-C-t9P5Ls.mjs → meta-CF4XIYOo.mjs} +3 -5
  23. package/dist/{package-manager-BUgTjW9Q.mjs → package-manager-Dw7lYcI0.mjs} +1 -3
  24. package/dist/{project-context-DBSibDPb.mjs → project-context-oi_m7paK.mjs} +2 -4
  25. package/dist/{resolver-CDbVXv4g.mjs → resolver-Uwx8B5jv.mjs} +4 -6
  26. package/dist/{scaffold-D2vwv9ls.mjs → scaffold-D8TAMXvs.mjs} +1 -3
  27. package/dist/{scanner-CRCZwhKS.mjs → scanner-qT_M6nV5.mjs} +9 -16
  28. package/dist/{setup-DW3pn0QW.d.mts → setup-CdfBc7Oe.d.mts} +0 -1
  29. package/dist/{setup-DpCYUVSf.mjs → setup-Cx1r2y-1.mjs} +3 -5
  30. package/dist/{setup-github-actions-emXSyGy3.mjs → setup-github-actions-IxZTZihi.mjs} +1 -2
  31. package/dist/setup.d.mts +1 -1
  32. package/dist/setup.mjs +3 -6
  33. package/dist/{skill-paths-B-j0dWDA.mjs → skill-paths-Bm1P6IYe.mjs} +2 -4
  34. package/dist/{skill-use-CUrNHf-u.mjs → skill-use-B2xRF1i9.mjs} +1 -2
  35. package/dist/{source-policy-DaImacFt.mjs → source-policy-DkR80hkL.mjs} +4 -7
  36. package/dist/source-policy-hMYcpIgm.mjs +2 -0
  37. package/dist/{stale-DxZyYibt.mjs → stale-DhjSTIt-.mjs} +3 -5
  38. package/dist/staleness-B5Cqe77_.mjs +2 -0
  39. package/dist/{staleness-DVFARTES.mjs → staleness-DoZU3lzy.mjs} +10 -17
  40. package/dist/{types-DhITOzhi.d.mts → types-P6UfPVdp.d.mts} +1 -33
  41. package/dist/{utils-9fhWAVua.mjs → utils-6FtqhOYf.mjs} +14 -3
  42. package/dist/utils-BKBDYbCx.mjs +2 -0
  43. package/dist/{validate-CnQBn6v9.mjs → validate-BSfTOq0v.mjs} +134 -47
  44. package/dist/{workflow-review-wL1Iu2Sf.mjs → workflow-review-B4AfwtHH.mjs} +1 -3
  45. package/dist/{workflow-review-CtOR1bgh.mjs → workflow-review-Bo2kPVXV.mjs} +2 -3
  46. package/dist/{workspace-patterns-BffPlZ1D.mjs → workspace-patterns-BDoJIWk-.mjs} +2 -4
  47. package/dist/workspace-patterns-CrL8hAbd.mjs +2 -0
  48. package/meta/domain-discovery/SKILL.md +1 -1
  49. package/meta/generate-skill/SKILL.md +35 -28
  50. package/meta/tree-generator/SKILL.md +43 -39
  51. package/package.json +5 -6
  52. package/dist/artifact-coverage-BfJ7f-S9.mjs +0 -3
  53. package/dist/source-policy-y3sktvzu.mjs +0 -9
  54. package/dist/staleness-BoFc6DMh.mjs +0 -5
  55. package/dist/utils-CSPzvaFu.mjs +0 -3
  56. package/dist/workspace-patterns-Bjq_cXww.mjs +0 -4
  57. package/meta/feedback-collection/SKILL.md +0 -234
@@ -52,7 +52,9 @@ SKILL.md into that package's skills directory (e.g.
52
52
  `packages/client/skills/core/SKILL.md`), not a shared root.
53
53
 
54
54
  1. **Skill name** — format `library-group/skill-name` (e.g. `tanstack-query/core`,
55
- `tanstack-router/loaders`, `db/core/live-queries`)
55
+ `tanstack-router/loaders`, `db/core/live-queries`). This is the skill's
56
+ directory path: its **last segment** becomes the frontmatter `name` (a
57
+ spec-legal leaf), and the full path is where the `SKILL.md` lives.
56
58
  2. **Skill description** — what the skill covers and when an agent should load it
57
59
  3. **Source documentation** — the docs, guides, API references, and/or source
58
60
  files to distill from
@@ -118,7 +120,7 @@ cannot already know:
118
120
 
119
121
  Before writing the skill body, search the library's GitHub repo for issues
120
122
  and discussions relevant to THIS skill's topic. This step is important for
121
- both initial generation and regeneration — community feedback reveals
123
+ both initial generation and regeneration — issue discussions reveal
122
124
  failure modes that docs miss.
123
125
 
124
126
  **Search strategy:**
@@ -170,17 +172,18 @@ domain-discovery — use those directly.
170
172
 
171
173
  ```yaml
172
174
  ---
173
- name: [library]/[skill-name]
175
+ name: '[skill-name]'
174
176
  description: >
175
177
  [1–3 sentences. What this skill covers and exactly when an agent should
176
178
  load it. Written for the agent — include the keywords an agent would
177
179
  encounter when it needs this skill. Dense routing key.]
178
- type: core
179
- library: [library]
180
- library_version: "[version this targets]"
180
+ metadata:
181
+ type: core
182
+ library: '[library]'
183
+ library_version: '[version this targets]'
181
184
  sources:
182
- - "[Owner/repo]:docs/[path].md"
183
- - "[Owner/repo]:src/[path].ts"
185
+ - '[Owner/repo]:docs/[path].md'
186
+ - '[Owner/repo]:src/[path].ts'
184
187
  ---
185
188
  ```
186
189
 
@@ -188,14 +191,15 @@ sources:
188
191
 
189
192
  ```yaml
190
193
  ---
191
- name: [library]/[parent]/[skill-name]
194
+ name: '[skill-name]'
192
195
  description: >
193
196
  [1–3 sentences. What this sub-topic covers and when to load it.]
194
- type: sub-skill
195
- library: [library]
196
- library_version: "[version]"
197
+ metadata:
198
+ type: sub-skill
199
+ library: '[library]'
200
+ library_version: '[version]'
197
201
  sources:
198
- - "[Owner/repo]:docs/[path].md"
202
+ - '[Owner/repo]:docs/[path].md'
199
203
  ---
200
204
  ```
201
205
 
@@ -203,29 +207,39 @@ sources:
203
207
 
204
208
  ```yaml
205
209
  ---
206
- name: [library]/[framework]
210
+ name: '[framework]'
207
211
  description: >
208
212
  [1–3 sentences. Framework-specific bindings. Name the hooks, components,
209
213
  providers.]
210
- type: framework
211
- library: [library]
212
- framework: [react | vue | solid | svelte | angular]
213
- library_version: "[version]"
214
+ metadata:
215
+ type: framework
216
+ library: '[library]'
217
+ framework: '[react | vue | solid | svelte | angular]'
218
+ library_version: '[version]'
214
219
  requires:
215
- - [library]/core
220
+ - '[library]/core'
216
221
  sources:
217
- - "[Owner/repo]:docs/framework/[framework]/[path].md"
222
+ - '[Owner/repo]:docs/framework/[framework]/[path].md'
218
223
  ---
219
224
  ```
220
225
 
221
226
  ### Frontmatter rules
222
227
 
228
+ - `name` is the spec-legal leaf segment — lowercase letters, numbers, and
229
+ hyphens only — and matches the skill's parent directory. It carries no
230
+ slashes; the namespace lives in the skill's directory path instead.
231
+ - Intent-specific scalars (`type`, `library`, `library_version`, `framework`)
232
+ live under the `metadata` map. The Agent Skills spec permits only `name`,
233
+ `description`, `license`, `compatibility`, `metadata`, and `allowed-tools`
234
+ at the top level, so emitting these scalars at the top level fails
235
+ validation.
223
236
  - `description` must be written so the agent loads this skill at the right
224
237
  time — not too broad (triggers on everything) and not too narrow (never
225
238
  triggers). Pack with function names, option names, concept keywords.
226
239
  - `sources` uses the format `Owner/repo:relative-path`. Glob patterns are
227
240
  supported (e.g. `TanStack/query:docs/framework/react/guides/*.md`).
228
- - `library_version` is the version of the source library this skill targets.
241
+ - `metadata.library_version` is the version of the source library this skill
242
+ targets.
229
243
  - `requires` lists skills that must be loaded before this one.
230
244
 
231
245
  ---
@@ -443,11 +457,4 @@ Output is consumed by all major AI coding agents. To ensure consistency:
443
457
  - Critical info at start or end of sections (not buried in middle)
444
458
  - Each SKILL.md is self-contained except for declared `requires`
445
459
 
446
- ---
447
-
448
- ## Meta-skill feedback
449
-
450
- After generating all skills, run the `skill-feedback-collection` skill to
451
- capture feedback about the scaffolding process (domain-discovery,
452
- tree-generator, and generate-skill).
453
460
  ```
@@ -287,14 +287,15 @@ framework-agnostic concepts and contains the sub-skill registry.
287
287
 
288
288
  ```yaml
289
289
  ---
290
- name: [lib]-core
290
+ name: '[lib]-core'
291
291
  description: >
292
292
  [1–3 sentences. What this library does and the framework-agnostic
293
293
  concepts it provides. Pack with keywords: function names, config
294
294
  options, concepts. This is a routing key, not a human summary.]
295
- type: core
296
- library: [lib]
297
- library_version: "[version this targets]"
295
+ metadata:
296
+ type: core
297
+ library: '[lib]'
298
+ library_version: '[version this targets]'
298
299
  ---
299
300
  ```
300
301
 
@@ -332,16 +333,17 @@ One SKILL.md per domain. Follow this structure exactly.
332
333
 
333
334
  ```yaml
334
335
  ---
335
- name: [lib]-core/[domain-slug]
336
+ name: '[domain-slug]'
336
337
  description: >
337
338
  [1–3 sentences. What this domain covers AND when to load it. Name
338
339
  specific functions, options, or APIs. Dense routing key.]
339
- type: sub-skill
340
- library: [lib]
341
- library_version: "[version]"
340
+ metadata:
341
+ type: sub-skill
342
+ library: '[lib]'
343
+ library_version: '[version]'
342
344
  sources:
343
- - "[repo]:docs/[path].md"
344
- - "[repo]:src/[path].ts"
345
+ - '[repo]:docs/[path].md'
346
+ - '[repo]:src/[path].ts'
345
347
  ---
346
348
  ```
347
349
 
@@ -452,17 +454,18 @@ framework-specific patterns and mistakes.
452
454
 
453
455
  ```yaml
454
456
  ---
455
- name: react-[lib]
457
+ name: 'react-[lib]'
456
458
  description: >
457
459
  [1–3 sentences. React-specific bindings for [library]. Name the hooks,
458
460
  components, and providers. Mention React-specific patterns like SSR
459
461
  hydration if applicable.]
460
- type: framework
461
- library: [lib]
462
- framework: react
463
- library_version: "[version]"
462
+ metadata:
463
+ type: framework
464
+ library: '[lib]'
465
+ framework: react
466
+ library_version: '[version]'
464
467
  requires:
465
- - [lib]-core
468
+ - '[lib]-core'
466
469
  ---
467
470
  ```
468
471
 
@@ -499,18 +502,18 @@ with the framework frontmatter:
499
502
 
500
503
  ```yaml
501
504
  ---
502
- name: react-[lib]/[domain-slug]
505
+ name: '[domain-slug]'
503
506
  description: >
504
507
  [React-specific description for this domain.]
505
- type: sub-skill
506
- library: [lib]
507
- framework: react
508
- library_version: "[version]"
508
+ metadata:
509
+ type: sub-skill
510
+ library: '[lib]'
511
+ framework: react
512
+ library_version: '[version]'
509
513
  requires:
510
- - [lib]-core
511
- - [lib]-core/[domain-slug]
514
+ - '[lib]-core'
515
+ - '[lib]-core/[domain-slug]'
512
516
  ---
513
-
514
517
  This skill builds on [lib]-core/[domain-slug]. Read the core skill first.
515
518
  ```
516
519
 
@@ -556,19 +559,19 @@ framework hooks and providers).
556
559
 
557
560
  ```yaml
558
561
  ---
559
- name: compositions/[lib-a]-[lib-b]
562
+ name: '[lib-a]-[lib-b]'
560
563
  description: >
561
564
  [How lib-a and lib-b wire together. Name the specific integration
562
565
  points: functions, hooks, patterns.]
563
- type: composition
564
- library_version: "[version of primary lib]"
566
+ metadata:
567
+ type: composition
568
+ library_version: '[version of primary lib]'
565
569
  requires:
566
- - [lib-a]-core
567
- - react-[lib-a]
568
- - [lib-b]-core
569
- - react-[lib-b]
570
+ - '[lib-a]-core'
571
+ - 'react-[lib-a]'
572
+ - '[lib-b]-core'
573
+ - 'react-[lib-b]'
570
574
  ---
571
-
572
575
  This skill requires familiarity with both [lib-a] and [lib-b].
573
576
  Read their core and framework skills first.
574
577
  ```
@@ -601,15 +604,16 @@ for these skill types.
601
604
 
602
605
  ```yaml
603
606
  ---
604
- name: react-[lib]/security
607
+ name: security
605
608
  description: >
606
609
  Go-live security validation for [library]. Checks [specific concerns].
607
- type: security
608
- library: [lib]
609
- framework: react
610
- library_version: '[version]'
610
+ metadata:
611
+ type: security
612
+ library: '[lib]'
613
+ framework: react
614
+ library_version: '[version]'
611
615
  requires:
612
- - react-[lib]
616
+ - 'react-[lib]'
613
617
  ---
614
618
  ```
615
619
 
@@ -702,7 +706,7 @@ Run when:
702
706
  - The library has released a new version
703
707
  - A maintainer reports skills produce outdated code
704
708
  - A changelog or migration guide has been published since skill creation
705
- - Feedback reports indicate skill content is inaccurate
709
+ - Issue reports indicate skill content is inaccurate
706
710
 
707
711
  ### Step 1 — Detect staleness
708
712
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/intent",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Ship compositional knowledge for AI coding agents alongside your npm packages",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -28,14 +28,13 @@
28
28
  "dependencies": {
29
29
  "cac": "^6.7.14",
30
30
  "jsonc-parser": "^3.3.1",
31
- "semver": "^7.7.4",
32
- "yaml": "2.8.3"
31
+ "semver": "^7.8.4",
32
+ "yaml": "2.9.0"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/semver": "^7.7.1",
36
- "@verdaccio/node-api": "6.0.0-6-next.76",
37
- "tsdown": "^0.19.0",
38
- "verdaccio": "^6.3.2"
36
+ "tsdown": "^0.22.2",
37
+ "verdaccio": "^6.7.2"
39
38
  },
40
39
  "scripts": {
41
40
  "build": "tsdown src/index.ts src/cli.ts src/setup.ts src/core.ts --format esm --dts",
@@ -1,3 +0,0 @@
1
- import { t as readIntentArtifacts } from "./artifact-coverage-nGwun1tt.mjs";
2
-
3
- export { readIntentArtifacts };
@@ -1,9 +0,0 @@
1
- import "./utils-9fhWAVua.mjs";
2
- import "./skill-paths-B-j0dWDA.mjs";
3
- import "./scanner-CRCZwhKS.mjs";
4
- import "./workspace-patterns-BffPlZ1D.mjs";
5
- import "./project-context-DBSibDPb.mjs";
6
- import "./excludes-DG83YEzb.mjs";
7
- import { a as checkLoadAllowed, i as applySourcePolicy, n as EMPTY_NOTE, o as readSkillSourcesConfig, r as MIGRATION_NOTICE, s as scanForPolicedIntents, t as ALLOW_ALL_NOTICE } from "./source-policy-DaImacFt.mjs";
8
-
9
- export { scanForPolicedIntents };
@@ -1,5 +0,0 @@
1
- import "./utils-9fhWAVua.mjs";
2
- import "./artifact-coverage-nGwun1tt.mjs";
3
- import { n as checkStaleness, r as readPackageName, t as buildWorkspaceCoverageSignals } from "./staleness-DVFARTES.mjs";
4
-
5
- export { buildWorkspaceCoverageSignals, checkStaleness, readPackageName };
@@ -1,3 +0,0 @@
1
- import { a as listNestedNodeModulesPackageDirs, c as parseFrontmatter, i as getDeps, l as resolveDepDir, n as detectGlobalNodeModules, o as listNodeModulesPackageDirs, r as findSkillFiles, s as nodeReadFs, t as createFsIdentityCache, u as toPosixPath } from "./utils-9fhWAVua.mjs";
2
-
3
- export { createFsIdentityCache, detectGlobalNodeModules, findSkillFiles, getDeps, listNestedNodeModulesPackageDirs, listNodeModulesPackageDirs, nodeReadFs, parseFrontmatter, resolveDepDir, toPosixPath };
@@ -1,4 +0,0 @@
1
- import "./utils-9fhWAVua.mjs";
2
- import { a as readWorkspacePatterns, i as getWorkspaceInfo, n as findWorkspacePackages, o as resolveWorkspacePackages, r as findWorkspaceRoot, t as findPackagesWithSkills } from "./workspace-patterns-BffPlZ1D.mjs";
3
-
4
- export { findWorkspaceRoot, getWorkspaceInfo };
@@ -1,234 +0,0 @@
1
- ---
2
- name: skill-feedback-collection
3
- description: >
4
- Collect structured feedback about skill usage after completing a coding task.
5
- Activate at the end of any session where one or more SKILL.md files were
6
- loaded. Captures agent signals (gaps, errors, corrections, human interventions)
7
- and brief human input, then submits directly via gh CLI or provides manual
8
- submission instructions.
9
- metadata:
10
- version: '2.0'
11
- category: meta-tooling
12
- ---
13
-
14
- # Skill Feedback Collection
15
-
16
- Run this at the end of any session where you loaded one or more SKILL.md files.
17
- The goal is to capture what worked, what didn't, and what was missing — so skill
18
- maintainers can improve future versions.
19
-
20
- This skill also covers **meta-skill feedback** — feedback about the scaffolding
21
- process itself. When invoked after running domain-discovery, tree-generator, and
22
- generate-skill, treat those three meta skills as the "skills" being evaluated.
23
- Capture what worked and what didn't in each scaffolding phase so the meta skills
24
- can be improved.
25
-
26
- ---
27
-
28
- ## Phase 1 — Automated Signal Collection
29
-
30
- Review your own session transcript. No human interaction needed yet.
31
-
32
- ### 1a: Skills inventory
33
-
34
- Before analyzing gaps and errors, inventory all skills that were available
35
- during the session:
36
-
37
- - **Loaded and used:** Skills you read and actively followed.
38
- - **Available but not loaded:** Skills that were installed (discoverable via
39
- `npx @tanstack/intent@latest list`) but you never read. This is important — many issues stem from
40
- the agent not loading the right skill, not from the skill itself being wrong.
41
-
42
- ### 1b: Gap detection
43
-
44
- Identify moments where the skill was silent and you had to bridge the gap
45
- yourself — via code reading, search, trial-and-error, or general knowledge.
46
-
47
- For each gap, note:
48
-
49
- - What you needed to do
50
- - What the skill should have told you
51
- - How you solved it (code reading, web search, guessing)
52
-
53
- ### 1c: Error/correction tracking
54
-
55
- Identify moments where the skill prescribed an approach that produced an error.
56
-
57
- For each error, note:
58
-
59
- - What the skill said to do
60
- - The error or incorrect behavior that resulted
61
- - The fix you applied
62
-
63
- ### 1d: Human intervention events
64
-
65
- Identify moments where the human clarified, corrected, or overrode your approach.
66
-
67
- For each intervention, note:
68
-
69
- - What you were doing when the human intervened
70
- - What the human said or changed
71
- - Whether the skill could have prevented this
72
-
73
- ### 1e: Step duration anomalies
74
-
75
- Identify steps that consumed disproportionate effort compared to their apparent
76
- complexity. These signal that the skill should provide a template, snippet, or
77
- more detailed guidance.
78
-
79
- ---
80
-
81
- ## Phase 2 — Human Interview
82
-
83
- Ask the human up to 4 questions. Keep it brief — skip questions if the session
84
- already provided clear answers. Respect if they decline.
85
-
86
- 1. "Was anything unclear about what was happening during the task?"
87
- 2. "Did anything feel frustrating or take longer than expected?"
88
- 3. "Were you uncertain about the output quality at any point?"
89
- 4. "Anything you'd want done differently next time?"
90
-
91
- Derive `userRating` from overall sentiment:
92
-
93
- - Mostly positive → `good`
94
- - Mixed signals → `mixed`
95
- - Mostly negative → `bad`
96
-
97
- If the human gives an explicit rating, use that instead.
98
-
99
- ---
100
-
101
- ## Phase 3 — Build the Feedback
102
-
103
- Write one Markdown feedback file per skill used. Only include skills that were
104
- actually used during the session — skip any that were loaded but never
105
- referenced.
106
-
107
- ### Template
108
-
109
- ```markdown
110
- # Skill Feedback: [skill name from SKILL.md frontmatter]
111
-
112
- **Package:** [npm package name that contains the skill]
113
- **Skill version:** [metadata.version or library_version from frontmatter]
114
- **Rating:** [good | mixed | bad]
115
-
116
- ## Task
117
-
118
- [one-sentence summary of what the human asked you to do]
119
-
120
- ## Skills Inventory
121
-
122
- **Loaded and used:**
123
-
124
- - [list each skill the agent read and actively followed during the session]
125
-
126
- **Available but not loaded:**
127
-
128
- - [list skills that were installed/available but the agent never read]
129
-
130
- ## What Worked
131
-
132
- [patterns/instructions from the skill that were accurate and helpful]
133
-
134
- ## What Failed
135
-
136
- [from 1c — skill instructions that produced errors]
137
-
138
- ## Missing
139
-
140
- [from 1b — gaps where the skill should have covered]
141
-
142
- ## Self-Corrections
143
-
144
- [from 1c fixes + 1d human interventions, combined]
145
-
146
- ## User Comments
147
-
148
- [optional — direct quotes or paraphrased human input from Phase 2]
149
- ```
150
-
151
- ### Field derivation guide
152
-
153
- | Field | Source |
154
- | ---------------- | ------------------------------------------------------------------ |
155
- | Skill name | Frontmatter `name` field of the SKILL.md you loaded |
156
- | Package | The npm package the skill lives in (e.g. `@tanstack/query-intent`) |
157
- | Skill version | Frontmatter `metadata.version` or `library_version` |
158
- | Task | Summarize the human's original request in one sentence |
159
- | Skills Inventory | Which skills were loaded vs. available but not loaded (see below) |
160
- | What Worked | List skill sections/patterns that were correct and useful |
161
- | What Failed | From 1c — skill instructions that produced errors |
162
- | Missing | From 1b — gaps where the skill was silent |
163
- | Self-Corrections | From 1c fixes + 1d human interventions, combined |
164
- | Rating | From Phase 2 sentiment analysis or explicit rating |
165
- | User Comments | From Phase 2 answers, keep brief |
166
-
167
- ---
168
-
169
- ## Phase 4 — Submit
170
-
171
- Determine the target repo from the skill's package. The repo is typically
172
- derivable from the `repository` field in the package's `package.json`, or
173
- from the `sources` field in the SKILL.md frontmatter.
174
-
175
- ### Link to existing issues/discussions
176
-
177
- Before creating a new issue, search the target repo for existing issues or
178
- discussions that match the feedback. Use `gh search issues` or the GitHub
179
- web search with keywords from the "What Failed" and "Missing" sections.
180
-
181
- - If an **open issue** already describes the same problem, comment on it
182
- with the feedback instead of creating a duplicate. Reference the skill
183
- name and version in your comment.
184
- - If a **closed issue** describes a problem the skill still gets wrong
185
- (regression or stale skill content), reference the closed issue in the
186
- new feedback issue body: `Related to #[number] — this was fixed in the
187
- library but the skill still describes the old behavior.`
188
- - If a **discussion thread** covers the same topic, link to it in the
189
- feedback issue body so maintainers can see the community context.
190
-
191
- This prevents duplicate issues and gives maintainers richer context for
192
- improving skills.
193
-
194
- ### Privacy check
195
-
196
- Before submitting, determine whether the user's project is public or private.
197
- Check with `gh repo view --json visibility` or look for a `private` field in
198
- the project's `package.json`. If you can't determine visibility, assume private.
199
-
200
- **Private repos:** Feedback is submitted to a public issue tracker, so it must
201
- not contain project-specific details. Before submission:
202
-
203
- 1. Strip any project-specific code, file paths, internal API names, service
204
- URLs, or business logic from all fields
205
- 2. Rewrite the "Task" field to describe the _type_ of task generically
206
- (e.g. "set up authenticated data fetching" not "set up auth for our
207
- internal billing API at api.acme.corp/billing")
208
- 3. Rewrite "What Failed" and "Missing" entries to reference only the
209
- skill's own APIs and patterns, not the user's code
210
- 4. Show the sanitized feedback to the user and ask them to confirm it's
211
- safe to submit before proceeding
212
-
213
- **Public repos:** No sanitization needed. Proceed directly to submission.
214
-
215
- ### If `gh` CLI is available
216
-
217
- Submit directly as a GitHub issue:
218
-
219
- ```bash
220
- gh issue create --repo [owner/repo] --title "Skill Feedback: [skill-name] ([rating])" --label "skill:[skill-name]" --body-file intent-feedback.md
221
- ```
222
-
223
- If the label doesn't exist, omit the `--label` flag — don't let a missing
224
- label block submission.
225
-
226
- If submission succeeds, delete the feedback file.
227
-
228
- ### If `gh` CLI is not available
229
-
230
- Tell the human:
231
-
232
- > "I've written skill feedback to `intent-feedback.md`. To submit it,
233
- > open an issue at https://github.com/[owner/repo]/issues and paste the
234
- > contents."