tink-harness 1.0.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.
- package/.claude-plugin/marketplace.json +14 -0
- package/.claude-plugin/plugin.json +8 -0
- package/CHANGELOG.md +109 -0
- package/LICENSE +21 -0
- package/README.ko.md +224 -0
- package/README.md +166 -0
- package/VERSIONING.md +73 -0
- package/bin/install.js +520 -0
- package/commands/cast.md +484 -0
- package/commands/frog.md +77 -0
- package/commands/list.md +104 -0
- package/commands/setup.md +185 -0
- package/commands/update.md +90 -0
- package/commands/weave.md +81 -0
- package/hooks/hooks.json +15 -0
- package/package.json +52 -0
- package/skills/tink/SKILL.md +66 -0
- package/templates/claude/commands/tink/cast.md +484 -0
- package/templates/claude/commands/tink/frog.md +77 -0
- package/templates/claude/commands/tink/list.md +104 -0
- package/templates/claude/commands/tink/setup.md +185 -0
- package/templates/claude/commands/tink/update.md +90 -0
- package/templates/claude/commands/tink/weave.md +81 -0
- package/templates/claude/skills/tink/SKILL.md +66 -0
- package/templates/tink/config.json +20 -0
- package/templates/tink/harnesses/HARNESS.md +28 -0
- package/templates/tink/harnesses/bug-fix.md +31 -0
- package/templates/tink/harnesses/code-change.md +30 -0
- package/templates/tink/harnesses/docs.md +30 -0
- package/templates/tink/harnesses/harness-curation.md +78 -0
- package/templates/tink/harnesses/harness-synthesis.md +52 -0
- package/templates/tink/harnesses/index.json +157 -0
- package/templates/tink/harnesses/pre-publish-multi-agent-verify.md +44 -0
- package/templates/tink/harnesses/research.md +31 -0
- package/templates/tink/harnesses/review.md +31 -0
- package/templates/tink/harnesses/ship.md +33 -0
- package/templates/tink/harnesses/tink-feedback-apply.md +37 -0
- package/templates/tink/hooks/user-prompt-submit.json +7 -0
- package/templates/tink/hooks/user-prompt-submit.mjs +49 -0
- package/templates/tink/maintenance/ledger.jsonl +0 -0
- package/templates/tink/maintenance/weave-queue.json +3 -0
- package/templates/tink/memory/lessons.md +17 -0
- package/templates/tink/memory/mistakes.md +16 -0
- package/templates/tink/memory/preferences.md +16 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# harness-synthesis
|
|
2
|
+
|
|
3
|
+
## When to use
|
|
4
|
+
Existing harnesses feel generic, or the task needs a domain-specific procedure built from research, failures, user feedback, or repeated work. Use it for both `no fit` and `generic fit` cases when the synthesis probe shows reusable domain rules.
|
|
5
|
+
|
|
6
|
+
Use this to create harnesses such as:
|
|
7
|
+
- `accessibility-regression-gate`
|
|
8
|
+
- `customer-interview-synthesis`
|
|
9
|
+
- `nextjs-rsc-boundary-refactor`
|
|
10
|
+
- `pre-pr-security-gate`
|
|
11
|
+
- `pricing-copy-experiment`
|
|
12
|
+
- `weekly-trend-report-validation`
|
|
13
|
+
|
|
14
|
+
## Ask first
|
|
15
|
+
- What recurring task or failure should this harness improve?
|
|
16
|
+
- What research, notes, run history, or examples should it learn from?
|
|
17
|
+
- What must the harness do better than a generic skill recommendation?
|
|
18
|
+
- Should the draft be used once, saved after this run, or saved immediately after approval?
|
|
19
|
+
|
|
20
|
+
Do not repeat questions already answered in `.tink/current/answers.md`.
|
|
21
|
+
|
|
22
|
+
## Plan
|
|
23
|
+
1. Gather only the relevant inputs: harness index, approved memory, user correction, run notes, research notes, and target files.
|
|
24
|
+
2. Extract behavior-shaping rules, not trivia: triggers, decisions, checks, stop conditions, recovery, and evidence.
|
|
25
|
+
3. Decide the draft level: run-only draft by default, save candidate only when reuse evidence is strong or the user asks.
|
|
26
|
+
4. Draft one small harness with a specific name and clear `When to use` boundary.
|
|
27
|
+
5. Make it operational: include ask-first questions, step order, checks, done criteria, and failure recovery.
|
|
28
|
+
6. Score the draft before proposing save:
|
|
29
|
+
- specificity: not just a generic checklist
|
|
30
|
+
- actionability: changes what Claude does next
|
|
31
|
+
- verifiability: has evidence and checks
|
|
32
|
+
- reuse likelihood: likely to apply again
|
|
33
|
+
- context cost: small enough to load often
|
|
34
|
+
7. Use it for the current run after approval.
|
|
35
|
+
8. Save to `.tink/harnesses/<name>.md` and update `index.json` only after separate save approval. A normal run approval only permits a run-only draft in `.tink/current/`.
|
|
36
|
+
|
|
37
|
+
## Checks
|
|
38
|
+
- The new harness or run-only draft has the required sections for its level.
|
|
39
|
+
- The name is specific, lowercase, and hyphenated.
|
|
40
|
+
- It does not duplicate an existing harness.
|
|
41
|
+
- It includes `.tink/current/answers.md` reuse guidance.
|
|
42
|
+
- It contains no secrets, raw logs, full diffs, or one-off task state.
|
|
43
|
+
- It would have changed at least one decision in the current task.
|
|
44
|
+
- A run-only draft is not written to `.tink/harnesses/`, `index.json`, or the ledger without separate save approval.
|
|
45
|
+
|
|
46
|
+
## Done means
|
|
47
|
+
- The draft harness is either applied to this run as a run-only draft, saved with separate approval, or explicitly rejected.
|
|
48
|
+
- If saved, `.tink/harnesses/index.json` includes the new harness metadata.
|
|
49
|
+
- The final report states the source inputs, what rules were extracted, and why the harness is reusable.
|
|
50
|
+
|
|
51
|
+
## If it fails, Tink back
|
|
52
|
+
Return to a run-only draft. Do not save. State what made the harness too generic, duplicated, unverifiable, or too expensive in context, then propose the next smallest improvement.
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "code-change",
|
|
4
|
+
"kind": "built-in",
|
|
5
|
+
"context": "small",
|
|
6
|
+
"use_when": "Add, change, or refactor code with a clear scope.",
|
|
7
|
+
"asks": [
|
|
8
|
+
"What is the target?",
|
|
9
|
+
"What should not change?"
|
|
10
|
+
],
|
|
11
|
+
"checks": [
|
|
12
|
+
"Related files only",
|
|
13
|
+
"Tests or clear reason not run",
|
|
14
|
+
"Diff evidence"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "bug-fix",
|
|
19
|
+
"kind": "built-in",
|
|
20
|
+
"context": "small",
|
|
21
|
+
"use_when": "Something is broken and needs a minimal fix.",
|
|
22
|
+
"asks": [
|
|
23
|
+
"How can it be reproduced?",
|
|
24
|
+
"Expected vs actual?"
|
|
25
|
+
],
|
|
26
|
+
"checks": [
|
|
27
|
+
"Reproduced or reason stated",
|
|
28
|
+
"Root cause identified",
|
|
29
|
+
"Regression checked"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "research",
|
|
34
|
+
"kind": "built-in",
|
|
35
|
+
"context": "small",
|
|
36
|
+
"use_when": "Compare options, read docs, or collect grounded facts.",
|
|
37
|
+
"asks": [
|
|
38
|
+
"What decision should this support?",
|
|
39
|
+
"What sources matter?"
|
|
40
|
+
],
|
|
41
|
+
"checks": [
|
|
42
|
+
"Decision named",
|
|
43
|
+
"Facts separated from guesses",
|
|
44
|
+
"Recommendation follows evidence"
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "review",
|
|
49
|
+
"kind": "built-in",
|
|
50
|
+
"context": "small",
|
|
51
|
+
"use_when": "Review changes, risks, or a PR/diff.",
|
|
52
|
+
"asks": [
|
|
53
|
+
"What is the base?",
|
|
54
|
+
"What risks matter most?"
|
|
55
|
+
],
|
|
56
|
+
"checks": [
|
|
57
|
+
"Correctness/security/data/UX risk addressed",
|
|
58
|
+
"Severity labeled per finding",
|
|
59
|
+
"No speculative blockers"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "docs",
|
|
64
|
+
"kind": "built-in",
|
|
65
|
+
"context": "tiny",
|
|
66
|
+
"use_when": "Write or improve README, guides, PRDs, or user-facing docs.",
|
|
67
|
+
"asks": [
|
|
68
|
+
"Who is the reader?",
|
|
69
|
+
"What should they do next?"
|
|
70
|
+
],
|
|
71
|
+
"checks": [
|
|
72
|
+
"Audience clear",
|
|
73
|
+
"Examples included if useful",
|
|
74
|
+
"Plain language"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"name": "ship",
|
|
79
|
+
"kind": "built-in",
|
|
80
|
+
"context": "small",
|
|
81
|
+
"use_when": "Prepare a PR, release, deployment, or public handoff.",
|
|
82
|
+
"asks": [
|
|
83
|
+
"What is shipping?",
|
|
84
|
+
"What rollback or risk matters?"
|
|
85
|
+
],
|
|
86
|
+
"checks": [
|
|
87
|
+
"CI checks pass or skip reason stated",
|
|
88
|
+
"Rollback documented",
|
|
89
|
+
"Known risks explicit"
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "harness-synthesis",
|
|
94
|
+
"kind": "meta",
|
|
95
|
+
"context": "small",
|
|
96
|
+
"use_when": "Create a domain-specific harness from research, failures, user feedback, or repeated work when generic harnesses are not enough.",
|
|
97
|
+
"asks": [
|
|
98
|
+
"What recurring task or failure should improve?",
|
|
99
|
+
"What research or examples should it learn from?"
|
|
100
|
+
],
|
|
101
|
+
"checks": [
|
|
102
|
+
"Specific and non-duplicative",
|
|
103
|
+
"Operational checks and done criteria",
|
|
104
|
+
"Saved only after approval"
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"name": "harness-curation",
|
|
109
|
+
"kind": "meta",
|
|
110
|
+
"context": "small",
|
|
111
|
+
"use_when": "Choose, replace, synthesize, weave, or frog harnesses when too many tools or heavy workflows would hurt the current task. Also use when context or prompt habits need calibration across runs.",
|
|
112
|
+
"asks": [
|
|
113
|
+
"What is the current task and success evidence?",
|
|
114
|
+
"What constraint makes heavy harnesses risky?"
|
|
115
|
+
],
|
|
116
|
+
"checks": [
|
|
117
|
+
"Smallest effective set chosen",
|
|
118
|
+
"Heavy harnesses rejected or deferred with reason",
|
|
119
|
+
"Maintenance saved only after approval"
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"name": "pre-publish-multi-agent-verify",
|
|
124
|
+
"kind": "synthesized",
|
|
125
|
+
"context": "small",
|
|
126
|
+
"use_when": "Verify a public publish/release across multiple isolated environments with parallel agents โ install matrix, UX walkthrough, doc consistency, leak audit, slash/contract coverage. Use when generic ship checks miss broad surface (npm/PyPI/GitHub Release/Docker Hub).",
|
|
127
|
+
"asks": [
|
|
128
|
+
"What package/artifact ships to which medium?",
|
|
129
|
+
"What 2-4 user-target scenarios should agents share as the verification target?",
|
|
130
|
+
"What isolation mechanism (git worktree, temp dir, container)?"
|
|
131
|
+
],
|
|
132
|
+
"checks": [
|
|
133
|
+
"Build artifact produced and recorded",
|
|
134
|
+
"User-target scenarios locked before agents start",
|
|
135
|
+
"Each agent owns one concern, โค300 words, evidence-only",
|
|
136
|
+
"Findings classified blocker/major/minor/nit",
|
|
137
|
+
"CHANGELOG [Unreleased] merged into the shipping version",
|
|
138
|
+
"No secrets, credentials, or private paths in published files",
|
|
139
|
+
"Advertised commands/API present in shipped artifact (sha 1:1)"
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"name": "tink-feedback-apply",
|
|
144
|
+
"kind": "built-in",
|
|
145
|
+
"context": "small",
|
|
146
|
+
"use_when": "User gives feedback about Tink's behavior, interaction pattern, or output quality โ classify the feedback layer and apply the minimum fix.",
|
|
147
|
+
"asks": [
|
|
148
|
+
"What exactly went wrong or felt wrong?",
|
|
149
|
+
"Should this fix persist for future sessions?"
|
|
150
|
+
],
|
|
151
|
+
"checks": [
|
|
152
|
+
"Correct layer identified",
|
|
153
|
+
"Minimum viable change only",
|
|
154
|
+
"Triggering scenario verified"
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
]
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# pre-publish-multi-agent-verify
|
|
2
|
+
|
|
3
|
+
## When to use
|
|
4
|
+
๊ณต๊ฐ publish/release/๋ฐฐํฌ ์ง์ โ ๋จ์ผ ์์ด์ ํธ ๊ฒํ ๋ก๋ ๋์น๊ธฐ ์ฌ์ด ๊ด๋ฒ์ํ ํ๋ฉด(install, UX, docs, leak, slash, contract)์ ์ฌ๋ฌ ๊ฒฉ๋ฆฌ ํ๊ฒฝ์์ ๋ณ๋ ฌ ๊ฒ์ฆํด์ผ ํ ๋. `ship`์ ์ผ๋ฐ ์ฒดํฌ๋ฆฌ์คํธ๋ก๋ ๋ถ์กฑํ๊ณ , npm/crates/PyPI ๊ฐ์ ๋๋๋ฆฌ๊ธฐ ์ด๋ ค์ด ๋งค์ฒด๋ก ๋ฐฐํฌํ ๋ ํนํ ๊ฐ์น ์์.
|
|
5
|
+
|
|
6
|
+
## Ask first
|
|
7
|
+
- ์ด๋ค ํจํค์ง/์ํฐํฉํธ๋ฅผ ์ด๋ค ๋งค์ฒด๋ก publishํ๋๊ฐ? (npm/PyPI/GitHub Release/Docker Hub โฆ)
|
|
8
|
+
- ์ฌ์ฉ์ ํ์ ์๋๋ฆฌ์ค 3๊ฐ๋ ๋ฌด์์ธ๊ฐ? (๊ฒ์ฆ ์์ *์ *์ ์ ๊ทธ๊ธฐ)
|
|
9
|
+
- ๊ฒฉ๋ฆฌ ํ๊ฒฝ์ ๋ฌด์์ธ๊ฐ? (git worktree / ์์ ๋๋ ํ ๋ฆฌ / ์ปจํ
์ด๋)
|
|
10
|
+
|
|
11
|
+
## Domain rules
|
|
12
|
+
1. **์๋๋ฆฌ์ค ์ฌ์ ์ ๊ธ**: ๊ฒ์ฆ ์์ ์ ์ ์ฌ์ฉ์ ํ์ ์๋๋ฆฌ์ค 2~4๊ฐ๋ฅผ ๋ชป๋ฐ๋๋ค. ์์ด์ ํธ๊ฐ ๊ฐ์ ๋ค๋ฅด๊ฒ ํด์ํ๋ฉด ๋ณด๊ณ ๊ฐ ํฉ์ด์ง๋ค.
|
|
13
|
+
2. **๊ฒฉ๋ฆฌ ๊ฐ์ **: ๊ฐ ์์ด์ ํธ๋ ๋ณ๋ worktree ๋๋ ์์ ๋๋ ํ ๋ฆฌ์์ ์์
. ๋ณธ repo์ working tree๋ฅผ ๋๋ฝํ์ง ์๋๋ค.
|
|
14
|
+
3. **์์ด์ ํธ๋น ๊ด์ฌ์ฌ 1๊ฐ**: install matrix / UX walkthrough / doc consistency / leak audit / slashยทcontract coverage. ํ ์์ด์ ํธ๊ฐ ๋ ๊ด์ฌ์ฌ๋ฅผ ๊ฒธํ์ง ์๋๋ค.
|
|
15
|
+
4. **Evidence-only**: ๋ณด๊ณ ๋ "๋๋์ ๋ถํธํจ" ๊ฑฐ๋ถ. file:line, ๋ช
๋ น stdout, exit code, sha ๋น๊ต ๊ฐ์ ์ฌํ ๊ฐ๋ฅํ ์ฆ๊ฑฐ๋ง ์ธ์ .
|
|
16
|
+
5. **300๋จ์ด ์ํ**: ์์ด์ ํธ๋น ๋ณด๊ณ โค300๋จ์ด. ํฉ์ฐ์ด ๊ฐ๋ฅํด์ง๋ค.
|
|
17
|
+
6. **๋ถ๋ฅ 4๋จ๊ณ**: blocker / major / minor / nit. ๊ฐ ์์ด์ ํธ๊ฐ ์์ฒด ๋ถ๋ฅ ํ ๋ฉ์ธ์ด ํฉ์ฐ ์ ์ฌ์กฐ์ ๊ฐ๋ฅ.
|
|
18
|
+
7. **CHANGELOG ์ ์ง์ฑ**: docs-consistency๋ ๋ฐ๋์ `[Unreleased]` โ `[๋ฒ์ ]` ๋ณํฉ ์ฌ๋ถ ํ์ธ. ์ด๋ฒ ๋ฒ์ ์ด shipํ๋ ๋ชจ๋ ํญ๋ชฉ์ด ํด๋น ๋ฒ์ entry์ ์ ํ ์์ด์ผ ํ๋ค.
|
|
19
|
+
|
|
20
|
+
## Plan
|
|
21
|
+
1. tarball/build artifact ์์ฑ (`npm pack`, `cargo package`, `python -m build` ๋ฑ) โ ์ ์ ์ฐ์ถ ํ์ธ.
|
|
22
|
+
2. ์ฌ์ฉ์ ํ์ ์๋๋ฆฌ์ค๋ฅผ ์ฌ์ฉ์์ ํจ๊ป ์ ๊ทผ๋ค (์ํํธ ๊ฒ์ดํธ๊ฐ ์๋ ํ๋ ๊ฒ์ดํธ).
|
|
23
|
+
3. 5๊ฐ(๋๋ ๋๋ฉ์ธ์ ๋ง์ถฐ 3~6๊ฐ) ์์ด์ ํธ๋ฅผ ๊ฒฉ๋ฆฌ ํ๊ฒฝ์์ ๋ณ๋ ฌ ์คํ.
|
|
24
|
+
4. ๋ณด๊ณ ํฉ์ฐ + blocker/major/minor/nit ๋ถ๋ฅ.
|
|
25
|
+
5. publish ๊ฐ/๋ถ ๊ถ๊ณ + ์ฌ์ฉ์ ๊ฒฐ์ .
|
|
26
|
+
|
|
27
|
+
## Checks
|
|
28
|
+
- Build artifact ์์ฑ ์ ์ (sha ๊ธฐ๋ก).
|
|
29
|
+
- ๋ชจ๋ ์์ด์ ํธ verdict ์์ง.
|
|
30
|
+
- blocker 0๊ฑด ํ์ธ ํ์๋ง publish ๊ถ๊ณ .
|
|
31
|
+
- CHANGELOG `[Unreleased]` ๋น์ด ์๊ฑฐ๋ v+1์ ์ํ ๊ฒ๋ง ๋จ์ ์์.
|
|
32
|
+
- ๊ด๊ณ ๋ ๋ชจ๋ ๋ช
๋ น/์ฌ๋์/API surface๊ฐ ์ค์ ๋ก ์ถํ ์ฐ์ถ๋ฌผ์ ์กด์ฌ (sha 1:1 ๋๋ ๋ช
์์ ์ฐจ์ด ๋ฌธ์ํ).
|
|
33
|
+
- ๋น๋ฐ/credentials/๊ฐ์ธ ๊ฒฝ๋ก ๋์ถ ์์.
|
|
34
|
+
|
|
35
|
+
## Done means
|
|
36
|
+
- ๊ฐ ์์ด์ ํธ PASS/FAIL + evidence๊ฐ ํฉ์ฐ ๋ณด๊ณ ์ ๊ธฐ๋ก๋จ.
|
|
37
|
+
- blocker/major/minor/nit ๋ถ๋ฅ ๋ช
์.
|
|
38
|
+
- publish ๊ฐ/๋ถ ๊ถ๊ณ ์ ๊ทธ ๊ทผ๊ฑฐ๊ฐ ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋จ.
|
|
39
|
+
|
|
40
|
+
## If it fails
|
|
41
|
+
- blocker 1+ โ publish ์ฐจ๋จ. ๋ง์ง๋ง ์์ ์ง์ (์ด์ ์ ์ ๋ฒ์ )์์ fix ํ ์ฌ๊ฒ์ฆ.
|
|
42
|
+
- major 2+ โ ์ฌ์ฉ์์๊ฒ go/no-go ๊ฒฐ์ ์์ฒญ. ๊ฐ major ๋ณ fix ํ๋ณด ์ ์.
|
|
43
|
+
- minor๋ง โ publish OK ๊ถ๊ณ + ํ์ fix ํ์ ์ถ๊ฐ.
|
|
44
|
+
- ์์ด์ ํธ ๋ณด๊ณ ๊ฐ ๋ชจ์๋ ๋๋ ์ฌ์ฉ์ ํ์ ์๋๋ฆฌ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌํด์.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# research
|
|
2
|
+
|
|
3
|
+
## When to use
|
|
4
|
+
Compare options, read docs, or collect grounded facts.
|
|
5
|
+
|
|
6
|
+
## Ask first
|
|
7
|
+
- What decision should this support?
|
|
8
|
+
- Which sources or constraints matter?
|
|
9
|
+
- How current does the answer need to be?
|
|
10
|
+
|
|
11
|
+
## Plan
|
|
12
|
+
1. Define the question.
|
|
13
|
+
2. Collect sources.
|
|
14
|
+
3. Separate facts from guesses.
|
|
15
|
+
4. Summarize tradeoffs.
|
|
16
|
+
5. Recommend the next action.
|
|
17
|
+
|
|
18
|
+
## Checks
|
|
19
|
+
- Decision this research supports is named.
|
|
20
|
+
- At least two options or sources are compared.
|
|
21
|
+
- Facts and guesses are explicitly labeled.
|
|
22
|
+
- Recommendation follows from evidence, not preference.
|
|
23
|
+
- Do not repeat questions already answered in `.tink/current/answers.md`.
|
|
24
|
+
|
|
25
|
+
## Done means
|
|
26
|
+
- Sources are linked.
|
|
27
|
+
- Uncertainty is labeled.
|
|
28
|
+
- Recommendation follows from evidence.
|
|
29
|
+
|
|
30
|
+
## If it fails, Tink back
|
|
31
|
+
Return to the last safe step. State what failed, the last safe point, and the next single action.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# review
|
|
2
|
+
|
|
3
|
+
## When to use
|
|
4
|
+
Review changes, risks, or a PR/diff.
|
|
5
|
+
|
|
6
|
+
## Ask first
|
|
7
|
+
- What should be reviewed?
|
|
8
|
+
- What is the base or expected behavior?
|
|
9
|
+
- Which risks matter most?
|
|
10
|
+
|
|
11
|
+
## Plan
|
|
12
|
+
1. Inspect changed files.
|
|
13
|
+
2. Prioritize correctness, security, data, and UX risks.
|
|
14
|
+
3. Check tests or evidence.
|
|
15
|
+
4. Write actionable findings only.
|
|
16
|
+
5. Avoid unsupported style noise.
|
|
17
|
+
|
|
18
|
+
## Checks
|
|
19
|
+
- Correctness, security, data, and UX risk each addressed or noted absent.
|
|
20
|
+
- Each finding has a severity label (blocker / major / minor / nit).
|
|
21
|
+
- No speculative blockers โ each is reproducible or evidence-based.
|
|
22
|
+
- No unrelated style or preference noise.
|
|
23
|
+
- Do not repeat questions already answered in `.tink/current/answers.md`.
|
|
24
|
+
|
|
25
|
+
## Done means
|
|
26
|
+
- Findings are reproducible or evidence-based.
|
|
27
|
+
- Severity is clear.
|
|
28
|
+
- No speculative blockers.
|
|
29
|
+
|
|
30
|
+
## If it fails, Tink back
|
|
31
|
+
Return to the last safe step. State what failed, the last safe point, and the next single action.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# ship
|
|
2
|
+
|
|
3
|
+
## When to use
|
|
4
|
+
Prepare a PR, release, deployment, or public handoff.
|
|
5
|
+
|
|
6
|
+
Release/publish/deploy/PR are hard-gate territory: cast triggers a Stitch safety hard gate during initial approval when this harness is selected.
|
|
7
|
+
|
|
8
|
+
## Ask first
|
|
9
|
+
- What is shipping?
|
|
10
|
+
- What checks are required?
|
|
11
|
+
- What rollback or risk matters?
|
|
12
|
+
|
|
13
|
+
## Plan
|
|
14
|
+
1. Summarize changes.
|
|
15
|
+
2. Run or verify required checks.
|
|
16
|
+
3. Draft PR or release summary: what changed, what risks, what rollback.
|
|
17
|
+
4. State risks and rollback.
|
|
18
|
+
5. Confirm final handoff.
|
|
19
|
+
|
|
20
|
+
## Checks
|
|
21
|
+
- All required CI checks pass, or reason for skip is stated.
|
|
22
|
+
- Rollback or revert procedure is documented.
|
|
23
|
+
- Changed artifacts (files, package, version) are listed.
|
|
24
|
+
- Known risks are explicitly stated, not implied.
|
|
25
|
+
- Do not repeat questions already answered in `.tink/current/answers.md`.
|
|
26
|
+
|
|
27
|
+
## Done means
|
|
28
|
+
- Checks are complete or clearly blocked.
|
|
29
|
+
- Known risks are stated.
|
|
30
|
+
- Handoff is short and usable.
|
|
31
|
+
|
|
32
|
+
## If it fails, Tink back
|
|
33
|
+
Return to the last safe step. State what failed, the last safe point, and the next single action.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# tink-feedback-apply
|
|
2
|
+
|
|
3
|
+
## Trigger
|
|
4
|
+
์ฌ์ฉ์๊ฐ Tink์ ๋์, ์ํธ์์ฉ ํจํด, ์ถ๋ ฅ ํ์ง์ ๋ํด ํผ๋๋ฐฑ์ ์ค ๋ โ ๋ฉ์ถฐ์ผ ํ ๊ฒ, ๋ฐ๊ฟ์ผ ํ ๊ฒ, ๊ฐ์ ํด์ผ ํ ๊ฒ.
|
|
5
|
+
|
|
6
|
+
## Domain rules
|
|
7
|
+
|
|
8
|
+
### 1. ํผ๋๋ฐฑ ๋ถ๋ฅ
|
|
9
|
+
- **behavioral rule**: cast/frog/weave๊ฐ ์ด๋ป๊ฒ ํ๋ํด์ผ ํ๋์ง
|
|
10
|
+
- **UX pattern**: ์ํธ์์ฉ ํ๋ฆ (๋ฌด์์ ๋ณด์ฌ์ค์ง, ๋ฌด์์ ๊ฑด๋๋ธ์ง)
|
|
11
|
+
- **preference**: ์ง์ ์ ํธ (ํค, ์ธ์ด, ์์ธ๋)
|
|
12
|
+
- **harness procedure**: ํน์ ํ๋ค์ค ์ ์ฐจ๊ฐ ํ๋ ธ๊ฑฐ๋ ๋น ์ง ๋จ๊ณ๊ฐ ์์
|
|
13
|
+
- **new harness**: ๋ฐ๋ณต ์์
์ ๋ณ๋ ํ๋ค์ค ํ์
|
|
14
|
+
|
|
15
|
+
### 2. ๋ ์ด์ด ์์น
|
|
16
|
+
- behavioral / UX โ `commands/cast.md` โ 3-layer ๋์ ์์ : `.claude/commands/tink/`, `templates/claude/commands/tink/`, `commands/`
|
|
17
|
+
- preference โ `.tink/memory/preferences.md`
|
|
18
|
+
- harness procedure โ `.tink/harnesses/<name>.md`
|
|
19
|
+
- new harness โ `.tink/harnesses/<name>.md` ์์ฑ + `index.json` ์
๋ฐ์ดํธ
|
|
20
|
+
|
|
21
|
+
### 3. ์ต์ ์ ํจ ๋ณ๊ฒฝ
|
|
22
|
+
- ํ ์ค ๋๋ ํ ๋จ๋ฝ. ๊ตฌ์กฐ ์ฌ์์ฑ ๊ธ์ง.
|
|
23
|
+
- "Do not" ๊ท์น โ `## Do not` ์น์
์ ์ถ๊ฐ
|
|
24
|
+
- ์ ์ฐจ ๋จ๊ณ โ ํด๋น ๋จ๊ณ๋ง ์์
|
|
25
|
+
|
|
26
|
+
### 4. ํธ๋ฆฌ๊ฑฐ ์๋๋ฆฌ์ค ๊ฒ์ฆ
|
|
27
|
+
- ํผ๋๋ฐฑ์ ์ ๋ฐํ ์ํฉ์ ์ค๋ช
ํํ๋ก ์ฌํ
|
|
28
|
+
- ๋ณ๊ฒฝ์ด ๊ทธ ์ํฉ์ ๋ฐฉ์งํ์์ง ํ์ธ
|
|
29
|
+
|
|
30
|
+
## Checks
|
|
31
|
+
- ์ฌ๋ฐ๋ฅธ ๋ ์ด์ด์ ๋ณ๊ฒฝ๋๋์ง (preference โ harness โ command)
|
|
32
|
+
- ๋ณ๊ฒฝ์ด ์ต์ํ์ธ์ง โ ๊ด๋ จ ์๋ ์์ ์์
|
|
33
|
+
- ํธ๋ฆฌ๊ฑฐ ์๋๋ฆฌ์ค ํต๊ณผ (์ค๋ช
ํํ)
|
|
34
|
+
- command / harness / memory ํ์ผ ๋ณ๊ฒฝ ์ Reusable State Save Gate ํ์ด๋ก๋ ์ง์ ์ ์
|
|
35
|
+
|
|
36
|
+
## Recovery
|
|
37
|
+
๋ณ๊ฒฝ์ด ๋ค๋ฅธ ๋์์ ๊นจ๋จ๋ฆฌ๋ฉด, git์ผ๋ก ๋๋๋ฆฌ๊ณ ๋ณ๊ฒฝ ๋ฒ์๋ฅผ ๋ ์ขํ์ ์ฌ์๋.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tink-cast-suggestion",
|
|
3
|
+
"description": "Optional Claude Code hook template. Use only after /tink:setup approval. It should provide short advisory-only automatic suggestions, not auto-apply harnesses.",
|
|
4
|
+
"event": "UserPromptSubmit",
|
|
5
|
+
"command": "node .tink/hooks/user-prompt-submit.mjs",
|
|
6
|
+
"behavior": "Registered as a Claude Code UserPromptSubmit hook only when the user selects the hook component. It reads the prompt from stdin, emits at most one advisory line when /tink:cast would help, and never auto-applies harnesses or saves memory."
|
|
7
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
|
|
4
|
+
function readStdin() {
|
|
5
|
+
try {
|
|
6
|
+
return fs.readFileSync(0, 'utf8');
|
|
7
|
+
} catch {
|
|
8
|
+
return '';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function safeJson(text) {
|
|
13
|
+
try {
|
|
14
|
+
return JSON.parse(text || '{}');
|
|
15
|
+
} catch {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function readConfigLanguage() {
|
|
21
|
+
try {
|
|
22
|
+
const cfg = safeJson(fs.readFileSync('.tink/config.json', 'utf8'));
|
|
23
|
+
return cfg.language || 'auto';
|
|
24
|
+
} catch {
|
|
25
|
+
return 'auto';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const payload = safeJson(readStdin());
|
|
30
|
+
const prompt = String(payload.prompt || payload.user_prompt || payload.message || '');
|
|
31
|
+
const language = readConfigLanguage();
|
|
32
|
+
|
|
33
|
+
if (!prompt.trim()) process.exit(0);
|
|
34
|
+
if (prompt.trim().startsWith('/')) process.exit(0);
|
|
35
|
+
|
|
36
|
+
const nonTrivialSignals = [
|
|
37
|
+
/fix|debug|refactor|implement|review|ship|deploy|research|investigate/i,
|
|
38
|
+
/๋ฒ๊ทธ|์์ |๊ตฌํ|๊ฒํ |๋ฐฐํฌ|์กฐ์ฌ|์ ๋ฆฌ|๊ฐ์ /,
|
|
39
|
+
/\b(ํ์ผ|repo|PR|ํ
์คํธ|CI|๋ก๊ทธ)\b/i
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
if (nonTrivialSignals.some((pattern) => pattern.test(prompt))) {
|
|
43
|
+
const message = language === 'en'
|
|
44
|
+
? 'Tink suggestion: for complex work, run /tink:cast first to choose a harness and create run state.'
|
|
45
|
+
: language === 'zh'
|
|
46
|
+
? 'Tink ๅปบ่ฎฎ๏ผๅคๆไปปๅกๅฏไปฅๅ
่ฟ่ก /tink:cast๏ผ้ๆฉ harness ๅนถๅๅปบ่ฟ่ก็ถๆใ'
|
|
47
|
+
: 'Tink ์ ์: ๋ณต์กํ ์์
์ด๋ฉด /tink:cast๋ก ํ๋ค์ค์ ์คํ ์ํ๋ฅผ ๋จผ์ ์ก์ ์ ์์ต๋๋ค.';
|
|
48
|
+
console.log(message);
|
|
49
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Lessons
|
|
2
|
+
|
|
3
|
+
Record reusable lessons that improve future harness choices.
|
|
4
|
+
|
|
5
|
+
Rules:
|
|
6
|
+
- Save only after user approval.
|
|
7
|
+
- Save generalized lessons, not raw transcripts.
|
|
8
|
+
- Keep entries short.
|
|
9
|
+
- Prefer harness updates when the lesson belongs inside a specific harness.
|
|
10
|
+
- Use compact evidence handles so future hone/purge decisions can trace the entry.
|
|
11
|
+
|
|
12
|
+
Entry shape:
|
|
13
|
+
```text
|
|
14
|
+
- [YYYY-MM-DD] kind=lesson; source=<run-id|user>; applies_to=<harness|global>; note=<one sentence>; approval=<op-id>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Entries
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Mistakes
|
|
2
|
+
|
|
3
|
+
Record repeated mistakes that should not happen again.
|
|
4
|
+
|
|
5
|
+
Rules:
|
|
6
|
+
- Save only after user approval.
|
|
7
|
+
- Keep entries short and reusable.
|
|
8
|
+
- Do not store raw logs, full diffs, secrets, private data, or one-off task progress.
|
|
9
|
+
- Use compact evidence handles so future hone/purge decisions can trace the entry.
|
|
10
|
+
|
|
11
|
+
Entry shape:
|
|
12
|
+
```text
|
|
13
|
+
- [YYYY-MM-DD] kind=mistake; source=<run-id|user>; applies_to=<harness|global>; note=<one sentence>; approval=<op-id>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Entries
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Preferences
|
|
2
|
+
|
|
3
|
+
Record stable project or user preferences that reduce repeated steering.
|
|
4
|
+
|
|
5
|
+
Rules:
|
|
6
|
+
- Save only after user approval or explicit instruction.
|
|
7
|
+
- Use short declarative bullets.
|
|
8
|
+
- Do not store temporary task state.
|
|
9
|
+
- Use compact evidence handles when the preference came from a run.
|
|
10
|
+
|
|
11
|
+
Entry shape:
|
|
12
|
+
```text
|
|
13
|
+
- [YYYY-MM-DD] kind=preference; source=<run-id|user>; applies_to=<harness|global>; note=<one sentence>; approval=<op-id|explicit-user>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Entries
|