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,185 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Configure Tink language, install scope, git tracking, and hook policy.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /tink:setup
|
|
6
|
+
|
|
7
|
+
Set up Tink for Claude Code.
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
Prepare one small self-growing harness system that helps Claude choose/build harnesses, avoid repeated mistakes, and remember reusable lessons only after approval.
|
|
11
|
+
|
|
12
|
+
## Interaction policy
|
|
13
|
+
Always call the `AskUserQuestion` tool for choice prompts. Do not render `❯` text format. Do not ask the user to type a number inline.
|
|
14
|
+
|
|
15
|
+
Map prompt content to `AskUserQuestion` fields:
|
|
16
|
+
- `question`: the full question text
|
|
17
|
+
- `header`: max 12-character tag (e.g. "언어 선택", "설치 범위", "Git 설정")
|
|
18
|
+
- `label`: 1–5 word option name. Add "(권장)" if recommended.
|
|
19
|
+
- `description`: explanatory text for the option
|
|
20
|
+
|
|
21
|
+
Use Korean field values when `.tink/config.json` language is `ko` or `auto` with Korean input; use English otherwise.
|
|
22
|
+
|
|
23
|
+
## Setup review mode
|
|
24
|
+
If `.tink/config.json` already exists, do not jump straight to git tracking. First show a short current-settings review, then ask what to change.
|
|
25
|
+
|
|
26
|
+
Use this wording in Korean:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
현재 Tink 설정입니다.
|
|
30
|
+
|
|
31
|
+
- 언어: {language}
|
|
32
|
+
- 범위 (Scope): {install_scope}
|
|
33
|
+
- 톤 (Tone): calm, clear, concise, no jokes
|
|
34
|
+
- Hook: {hook_scope}
|
|
35
|
+
- Git 추적: {git_policy_or_inferred_policy}
|
|
36
|
+
|
|
37
|
+
톤은 선택 항목이 아니라 Tink의 고정 정책입니다. 조용하고 명확하게, 농담 없이 답하는 것을 기본으로 합니다.
|
|
38
|
+
|
|
39
|
+
? 무엇을 바꿀까요?
|
|
40
|
+
❯ 1. 그대로 사용 (권장)
|
|
41
|
+
2. 언어 변경
|
|
42
|
+
3. 범위 변경
|
|
43
|
+
4. 훅/Git 변경
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
If the user chooses `그대로 사용`, summarize available commands and stop. Do not re-ask git tracking.
|
|
47
|
+
If the user chooses `훅/Git 변경`, first walk through the Git tracking question, then the Hook registration question.
|
|
48
|
+
|
|
49
|
+
## Legacy Tiny migration
|
|
50
|
+
If `.tiny/`, `.claude/commands/tiny/`, `.claude/commands/tiny-use.md`, or output that recommends `/tiny:use` is present, treat it as legacy state from the old Tiny/Tink prototype. Do not keep recommending `/tiny:use`.
|
|
51
|
+
|
|
52
|
+
Show this short explanation before changing files:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
이전 Tiny 설정이 보입니다.
|
|
56
|
+
|
|
57
|
+
Tink v1에서는 `/tiny:use` 대신 `/tink:cast`를 사용합니다.
|
|
58
|
+
필요하면 기존 `.tiny/`의 harness/config/memory를 `.tink/`로 옮기고, 앞으로의 안내를 `/tink:cast` 기준으로 정리할 수 있습니다.
|
|
59
|
+
|
|
60
|
+
? 어떻게 할까요?
|
|
61
|
+
❯ 1. 이전 Tiny 설정을 Tink로 옮기기
|
|
62
|
+
2. 이전 Tiny 설정은 그대로 두고 Tink만 사용하기
|
|
63
|
+
3. 취소
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Only migrate after the user chooses option 1. Migration means copying useful `.tiny/harnesses/`, `.tiny/config.json`, and `.tiny/memory/` into `.tink/` without deleting the original unless the user explicitly asks. Update stale guidance so future next steps say `/tink:cast`, not `/tiny:use`.
|
|
67
|
+
|
|
68
|
+
## First question: language
|
|
69
|
+
Always ask language first if it is not already clear from `.tink/config.json`.
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
? 언어를 선택해주세요.
|
|
73
|
+
❯ 1. 한국어
|
|
74
|
+
2. English
|
|
75
|
+
3. 中文
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Use the selected language for setup prompts, run files, approval prompts, and final reports. Keep built-in harness IDs in English for stable filenames.
|
|
79
|
+
|
|
80
|
+
## Before asking choices
|
|
81
|
+
Explain the current files in plain language before asking the user to choose. Keep the explanation short.
|
|
82
|
+
|
|
83
|
+
Use this wording in Korean:
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
Tink는 두 종류의 파일을 씁니다.
|
|
87
|
+
|
|
88
|
+
1. 재사용 하네스 (Reusable Harnesses): `.tink/harnesses/`
|
|
89
|
+
작업 방식 템플릿입니다. 예: bug-fix, research, review.
|
|
90
|
+
팀이 같이 쓰면 유용하므로 보통 git에 커밋합니다.
|
|
91
|
+
|
|
92
|
+
2. 실행 상태 (Run State): `.tink/current/`, `.tink/runs/`, `.tink/cache/`
|
|
93
|
+
이번 작업 계획, 체크, 임시 메모입니다.
|
|
94
|
+
개인/임시 기록이라 기본적으로 git에서 제외합니다.
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Setup questions
|
|
98
|
+
Ask these questions in order. Use the `AskUserQuestion` tool for all choice prompts (see Interaction policy above).
|
|
99
|
+
|
|
100
|
+
### 1. Scope
|
|
101
|
+
```text
|
|
102
|
+
? Tink를 어디에 설정할까요?
|
|
103
|
+
❯ 1. Repo 범위 (Repo Scope, 권장)
|
|
104
|
+
이 프로젝트에만 `.claude/`와 `.tink/`를 둡니다. 팀 공유와 프로젝트별 하네스에 적합합니다.
|
|
105
|
+
2. Global 범위 (Global Scope)
|
|
106
|
+
사용자 홈의 Claude Code 설정에 둡니다. 여러 프로젝트에서 같은 명령을 쓰고 싶을 때 적합합니다.
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
There is no `Both` option by default.
|
|
110
|
+
|
|
111
|
+
### 2. Git tracking
|
|
112
|
+
Ask only after explaining consequences.
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
? 프로젝트 하네스 (Harness)를 git에 커밋할까요?
|
|
116
|
+
|
|
117
|
+
먼저 차이를 설명합니다.
|
|
118
|
+
|
|
119
|
+
❯ 1. 하네스만 커밋 (Harnesses only, 권장)
|
|
120
|
+
좋은 점:
|
|
121
|
+
- 팀원과 같은 작업 방식, 체크리스트, 선호를 공유합니다.
|
|
122
|
+
- 다른 PC나 새 clone에서도 Tink가 같은 기준으로 동작합니다.
|
|
123
|
+
- 실행 기록은 빠져서 repo가 지저분해지지 않습니다.
|
|
124
|
+
|
|
125
|
+
실제로 커밋되는 것:
|
|
126
|
+
- `.tink/harnesses/`: 작업 방식 템플릿
|
|
127
|
+
- `.tink/config.json`: 언어/scope 같은 기본 설정
|
|
128
|
+
- `.tink/memory/`: 승인된 반복 실수, 선호, 교훈
|
|
129
|
+
|
|
130
|
+
제외되는 것:
|
|
131
|
+
- `.tink/current/`, `.tink/runs/`, `.tink/cache/`: 이번 실행 기록/임시 상태
|
|
132
|
+
|
|
133
|
+
2. 전부 커밋
|
|
134
|
+
좋은 점:
|
|
135
|
+
- 실행 과정까지 전부 남길 수 있습니다.
|
|
136
|
+
주의:
|
|
137
|
+
- 임시 메모, 작업 중 파일, 개인 맥락이 섞일 수 있어 대부분 비권장입니다.
|
|
138
|
+
|
|
139
|
+
3. 커밋 안 함
|
|
140
|
+
좋은 점:
|
|
141
|
+
- repo에는 아무 흔적을 남기지 않고 개인 도구로만 씁니다.
|
|
142
|
+
결과:
|
|
143
|
+
- 다른 팀원, 다른 PC, 새 clone에서는 harness가 공유되지 않습니다.
|
|
144
|
+
- 프로젝트별로 쌓은 개선이 유실되거나 재설정이 필요할 수 있습니다.
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 3. Hook registration
|
|
148
|
+
Hook is optional and off by default. If selected in the installer, it is registered as a Claude Code `UserPromptSubmit` hook. Do not ask for hook scope again. Use the already selected repo/global scope.
|
|
149
|
+
|
|
150
|
+
Explain:
|
|
151
|
+
|
|
152
|
+
```text
|
|
153
|
+
Hook은 선택 사항입니다.
|
|
154
|
+
|
|
155
|
+
무엇을 하나요?
|
|
156
|
+
- Claude Code `UserPromptSubmit`에 등록되어 일반 사용자 프롬프트를 보고 “/tink:cast를 먼저 쓰면 좋겠다”는 추천만 합니다.
|
|
157
|
+
- 작업을 자동 실행하지 않습니다.
|
|
158
|
+
- 메모리 (Memory)나 하네스 (Harness)를 자동 저장하지 않습니다.
|
|
159
|
+
- `/grill-me` 같은 다른 slash skill 명령은 가로채지 않습니다.
|
|
160
|
+
|
|
161
|
+
지금은 hook 없이 `/tink:cast`를 직접 쓰는 흐름을 권장합니다.
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Command map after setup
|
|
165
|
+
Explain the five commands:
|
|
166
|
+
|
|
167
|
+
```text
|
|
168
|
+
사용 가능한 Tink 명령입니다.
|
|
169
|
+
|
|
170
|
+
- `/tink:setup`: 언어, repo/global 범위 (Scope), git 추적, 훅 (Hook) 정책을 정합니다.
|
|
171
|
+
- `/tink:cast`: 작업에 맞는 하네스 (Harness)를 고르거나 만들고, 적용하고, 재사용 교훈을 저장 제안합니다. 가장 자주 쓰는 명령입니다.
|
|
172
|
+
- `/tink:list`: 사용 가능한 하네스 (Harness)와 최근 사용 신호를 짧게 보여줍니다.
|
|
173
|
+
- `/tink:frog`: 거의 쓰지 않는 하네스 (Harness)를 근거와 함께 제거 후보로 제안합니다. 승인 전 삭제하지 않습니다.
|
|
174
|
+
- `/tink:weave`: 자주 쓰는 하네스 (Harness)를 실제 실패/반복/피드백 기준으로 개선합니다. 승인 전 저장하지 않습니다.
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Do not
|
|
178
|
+
- Do not edit `CLAUDE.md` automatically.
|
|
179
|
+
- Do not ask the user to choose before explaining the consequences.
|
|
180
|
+
- Do not ask for tone selection. Tone is a fixed Tink policy, not a setup choice.
|
|
181
|
+
- Do not use jokes.
|
|
182
|
+
- Do not intercept other slash commands with Tink hooks.
|
|
183
|
+
|
|
184
|
+
## Tone
|
|
185
|
+
Calm, clear, concise. No jokes. Show this as a fixed policy during setup review; do not turn it into another preference menu.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Detect install source, diagnose user-modified files, and show the safe update command.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /tink:update
|
|
6
|
+
|
|
7
|
+
Tink를 최신 버전으로 안전하게 업데이트하는 방법을 안내합니다.
|
|
8
|
+
|
|
9
|
+
## What this command does
|
|
10
|
+
This command does not run the update itself. It detects how Tink was installed in this project, diagnoses whether any user-modified files are at risk, and shows the correct command to run.
|
|
11
|
+
|
|
12
|
+
## Procedure
|
|
13
|
+
1. **Source-repo guard (first):** If the project root contains all of `templates/tink/`, `bin/install.js`, and a `package.json` whose `name` is `"tink-harness"`, this is the tink-harness source repository itself — not a consumer install. Skip the rest of the procedure and emit the "source repo" output (see below). Do not show plugin or npx update commands in this case.
|
|
14
|
+
2. Detect install source:
|
|
15
|
+
- If the project root (or `cwd`) has `.claude-plugin/plugin.json` and a top-level `commands/` directory, Tink was installed via Claude Code plugin marketplace.
|
|
16
|
+
- Otherwise, treat it as an `npx tink-harness install` (standalone) installation.
|
|
17
|
+
3. Scan for files that have diverged from the latest installed templates (read-only inspection only):
|
|
18
|
+
- **Always updated**: `.claude/commands/tink/`, `.claude/skills/tink/`, `.tink/maintenance/` — template changes always propagate here.
|
|
19
|
+
- **Preserved if user-modified**: `.tink/harnesses/`, `.tink/hooks/`, `.tink/memory/`, `.tink/config.json` — respects `weave` customizations and local configuration.
|
|
20
|
+
4. Show the appropriate update path and a short list of files in the "preserved" category that have diverged.
|
|
21
|
+
|
|
22
|
+
## Update path: Claude Code plugin
|
|
23
|
+
```text
|
|
24
|
+
/plugin marketplace update tink-harness
|
|
25
|
+
/plugin update tink@tink-harness
|
|
26
|
+
/reload-plugins
|
|
27
|
+
```
|
|
28
|
+
If update is not detected, uninstall and reinstall:
|
|
29
|
+
```text
|
|
30
|
+
/plugin uninstall tink@tink-harness
|
|
31
|
+
/plugin install tink@tink-harness
|
|
32
|
+
```
|
|
33
|
+
The plugin path is handled by Claude Code and does not touch the local `.tink/` directory.
|
|
34
|
+
|
|
35
|
+
## Update path: npx (standalone)
|
|
36
|
+
```text
|
|
37
|
+
npx tink-harness update
|
|
38
|
+
```
|
|
39
|
+
Before v1.0.0 publish:
|
|
40
|
+
```text
|
|
41
|
+
npx github:dotoricode/tink-harness update
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The `update` subcommand:
|
|
45
|
+
- **Always overwrites**: commands, skills, and maintenance files (`.claude/commands/tink/`, `.claude/skills/tink/`, `.tink/maintenance/`) — so you get the latest harness runner and command behavior automatically.
|
|
46
|
+
- **Preserves if modified**: harnesses, hooks, memory, and config (`.tink/harnesses/`, `.tink/hooks/`, `.tink/memory/`, `.tink/config.json`) — respects your `weave` customizations and local settings.
|
|
47
|
+
|
|
48
|
+
## Output format (source repo)
|
|
49
|
+
|
|
50
|
+
If the source-repo guard triggers, print only this and stop — do not present plugin or npx commands:
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
### 🧶 Tink 업데이트 안내
|
|
54
|
+
|
|
55
|
+
이 디렉토리는 tink-harness **소스 리포지토리**입니다. 일반 사용자 업데이트 대상이 아니에요.
|
|
56
|
+
|
|
57
|
+
- 개발 변경 반영: `git pull` 후 일반적인 빌드/테스트 흐름을 사용하세요.
|
|
58
|
+
- 사용자 환경에서 업데이트 흐름을 검증하려면 별도의 프로젝트 디렉토리에서 이 명령을 실행하세요.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Output format
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
### 🧶 Tink 업데이트 안내
|
|
65
|
+
|
|
66
|
+
**설치 경로**: <plugin marketplace | npx standalone>
|
|
67
|
+
|
|
68
|
+
**항상 업데이트됨**: commands, skills, maintenance (최신 버전으로 자동 반영)
|
|
69
|
+
|
|
70
|
+
**사용자 수정 파일** (업데이트 시 보존):
|
|
71
|
+
- <path1>
|
|
72
|
+
- <path2>
|
|
73
|
+
- (보존할 파일 없음)
|
|
74
|
+
|
|
75
|
+
**업데이트 명령**:
|
|
76
|
+
<command lines>
|
|
77
|
+
|
|
78
|
+
? 어떻게 할까요?
|
|
79
|
+
1. 위 명령 복사해서 직접 실행
|
|
80
|
+
2. 변경 사항 미리 보기 (`npx tink-harness update --dry-run`) ← npx standalone에서만 표시
|
|
81
|
+
3. 취소
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Use `AskUserQuestion`. Show option 2 (dry-run) **only on the npx standalone path** — Claude Code plugin updates have no dry-run equivalent. So: plugin path → 2 options (run / cancel); npx path → 3 options (run / dry-run / cancel).
|
|
85
|
+
|
|
86
|
+
## Do not
|
|
87
|
+
- Do not actually run the update command — show it for the user to run in their shell or Claude Code.
|
|
88
|
+
- Do not modify `.tink/` files during diagnosis.
|
|
89
|
+
- Do not bypass the user choice; always offer cancel.
|
|
90
|
+
- Do not present plugin or npx update commands when the source-repo guard triggers — the user is editing tink-harness itself and would get misleading instructions.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Improve active harnesses based on real use, failures, and corrections.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /tink:weave
|
|
6
|
+
|
|
7
|
+
Improve harnesses that are actually being used.
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
Tink should get sharper through use, not grow randomly.
|
|
11
|
+
|
|
12
|
+
## Interaction policy
|
|
13
|
+
Always call the `AskUserQuestion` tool for choice prompts. Do not render `❯` text format. Do not ask the user to type a number inline.
|
|
14
|
+
|
|
15
|
+
Map prompt content to `AskUserQuestion` fields:
|
|
16
|
+
- `question`: the full question text
|
|
17
|
+
- `header`: max 12-character tag (e.g. "진행 방식", "저장 여부")
|
|
18
|
+
- `label`: 1–5 word option name. Add "(권장)" if recommended.
|
|
19
|
+
- `description`: explanatory text for the option
|
|
20
|
+
|
|
21
|
+
Use Korean field values when `.tink/config.json` language is `ko` or `auto` with Korean input; use English otherwise.
|
|
22
|
+
|
|
23
|
+
## Procedure
|
|
24
|
+
1. Read `.tink/harnesses/index.json`. If invoked from `/tink:frog`, first read the purge output, `.tink/current/notes.md`, or `.tink/maintenance/weave-queue.json` for the weave handoff packet.
|
|
25
|
+
2. Identify one or a few active harnesses to improve using real failures and evidence:
|
|
26
|
+
- repeated mistakes
|
|
27
|
+
- user corrections
|
|
28
|
+
- failed checks
|
|
29
|
+
- confusing approval prompts
|
|
30
|
+
- too much context footprint
|
|
31
|
+
- missing done criteria
|
|
32
|
+
3. Require concrete evidence handles before proposing a save:
|
|
33
|
+
- run record path or run ID
|
|
34
|
+
- current notes path when same-conversation certainty exists
|
|
35
|
+
- failed check name
|
|
36
|
+
- compact user correction snippet
|
|
37
|
+
- purge handoff ID from `.tink/maintenance/weave-queue.json`
|
|
38
|
+
4. Classify the evidence as repeated or single-run. Single-run evidence may suggest a trial edit, but should not become broad policy unless the user explicitly approves.
|
|
39
|
+
5. Explain why the change belongs in the harness rather than `.tink/memory/` or `.tink/current/notes.md`.
|
|
40
|
+
6. Read only the target harness files.
|
|
41
|
+
7. Propose small edits:
|
|
42
|
+
- clearer when-to-use trigger
|
|
43
|
+
- better ask-first question
|
|
44
|
+
- tighter checks
|
|
45
|
+
- smaller context footprint
|
|
46
|
+
- explicit failure recovery
|
|
47
|
+
8. Show an approval payload: destination files, exact patch summary, evidence handles, repeated vs single-run classification, why reusable, context-cost delta, sensitive content excluded, rollback path.
|
|
48
|
+
9. Ask for approval before saving.
|
|
49
|
+
10. Apply surgical changes, update index metadata if needed, mark the weave queue item status, and append the approval/result to `.tink/maintenance/ledger.jsonl`.
|
|
50
|
+
|
|
51
|
+
## Approval format
|
|
52
|
+
```text
|
|
53
|
+
Hone target:
|
|
54
|
+
- code-change
|
|
55
|
+
|
|
56
|
+
Evidence:
|
|
57
|
+
- source: `.tink/runs/2026-05-22-code-change.md`
|
|
58
|
+
- classification: repeated
|
|
59
|
+
- observed failure: verification command was unclear in two runs
|
|
60
|
+
|
|
61
|
+
Approval payload:
|
|
62
|
+
- operation: weave
|
|
63
|
+
- destination files: `.tink/harnesses/code-change.md`, `.tink/harnesses/index.json` if metadata changes
|
|
64
|
+
- context-cost delta: neutral or smaller
|
|
65
|
+
- ledger: append op ID to `.tink/maintenance/ledger.jsonl`
|
|
66
|
+
- rollback: revert this patch or rerun `/tink:weave` with the previous trigger
|
|
67
|
+
|
|
68
|
+
Proposed improvement:
|
|
69
|
+
- Checks 섹션에 “검증 명령과 실패 시 마지막 안전 지점 기록” 추가
|
|
70
|
+
|
|
71
|
+
? 진행할까요?
|
|
72
|
+
❯ 1. 승인 — 이 개선 저장
|
|
73
|
+
2. 조정
|
|
74
|
+
3. 취소
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Do not
|
|
78
|
+
- Do not rewrite a harness from scratch unless the user asks.
|
|
79
|
+
- Do not add broad principles that do not change behavior.
|
|
80
|
+
- Do not save one-off task progress as harness knowledge.
|
|
81
|
+
- Do not propose a harness edit without evidence handles.
|
package/hooks/hooks.json
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tink-harness",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Self-growing harnesses for Claude Code.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"tink-harness": "bin/install.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"bin/",
|
|
12
|
+
"templates/",
|
|
13
|
+
".claude-plugin/",
|
|
14
|
+
"commands/",
|
|
15
|
+
"skills/",
|
|
16
|
+
"hooks/",
|
|
17
|
+
"README.md",
|
|
18
|
+
"CHANGELOG.md",
|
|
19
|
+
"VERSIONING.md",
|
|
20
|
+
"LICENSE"
|
|
21
|
+
],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"test": "python tests/test_templates.py && node --check bin/install.js",
|
|
24
|
+
"check": "npm test"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"claude-code",
|
|
28
|
+
"ai-agents",
|
|
29
|
+
"agent-harness",
|
|
30
|
+
"developer-tools",
|
|
31
|
+
"cli",
|
|
32
|
+
"automation",
|
|
33
|
+
"agentic-coding",
|
|
34
|
+
"llm",
|
|
35
|
+
"workflow-automation",
|
|
36
|
+
"code-agents",
|
|
37
|
+
"hooks",
|
|
38
|
+
"skills"
|
|
39
|
+
],
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "git+https://github.com/dotoricode/tink-harness.git"
|
|
43
|
+
},
|
|
44
|
+
"bugs": {
|
|
45
|
+
"url": "https://github.com/dotoricode/tink-harness/issues"
|
|
46
|
+
},
|
|
47
|
+
"homepage": "https://github.com/dotoricode/tink-harness#readme",
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@clack/prompts": "^0.11.0",
|
|
50
|
+
"picocolors": "^1.1.1"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tink
|
|
3
|
+
description: Self-growing harnesses for Claude Code. Use to cast, apply, frog, and weave task harnesses.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Tink
|
|
7
|
+
|
|
8
|
+
Tink helps Claude cast the smallest useful harness, materialize it as run state, and start the work. It keeps the active harness/tool set small because too many tools can hurt performance, and it can suggest small habit-aware calibrations from observed signals.
|
|
9
|
+
|
|
10
|
+
## Core philosophy
|
|
11
|
+
Tink is one self-growing skill, not a pile of commands and not a skill recommendation list.
|
|
12
|
+
|
|
13
|
+
It should:
|
|
14
|
+
1. understand the task,
|
|
15
|
+
2. choose the smallest effective harness/tool set,
|
|
16
|
+
3. replace heavy harnesses when the current stage or token budget makes them harmful,
|
|
17
|
+
4. build or synthesize a narrow harness when none fits,
|
|
18
|
+
5. apply it only after approval,
|
|
19
|
+
6. create `.tink/current/` run state before deeper work,
|
|
20
|
+
7. recommend small habit-aware calibrations from observed context/token/input/output/reset signals,
|
|
21
|
+
8. execute the first safe step after approval,
|
|
22
|
+
9. avoid repeating the same mistake,
|
|
23
|
+
10. remember reusable lessons only after approval,
|
|
24
|
+
11. keep the harness set small by purging or honing it over time.
|
|
25
|
+
|
|
26
|
+
## Command surface
|
|
27
|
+
Use only these commands:
|
|
28
|
+
|
|
29
|
+
- `/tink:setup`: configure language, scope, git tracking, and hook policy.
|
|
30
|
+
- `/tink:cast`: main path. Choose/build/synthesize a harness, run Stitch, create run state, start work, and propose reusable learning.
|
|
31
|
+
- `/tink:list`: inspect harnesses and lightweight usage signals.
|
|
32
|
+
- `/tink:frog`: propose unused or redundant harness removal. Never delete without approval.
|
|
33
|
+
- `/tink:weave`: improve active harnesses based on real use, failures, and corrections.
|
|
34
|
+
- `/tink:update`: detect install source, diagnose user-modified files, and show the safe update command.
|
|
35
|
+
|
|
36
|
+
## Operating rules
|
|
37
|
+
1. Read `.tink/harnesses/index.json` before loading harness bodies.
|
|
38
|
+
2. Read small approved memory files when present: `.tink/memory/mistakes.md`, `preferences.md`, `lessons.md`.
|
|
39
|
+
3. Prefer the smallest useful harness set. Use context footprint, not a universal hard cap: tiny harnesses may stack, large harnesses load one at a time after approval, and meta harnesses should reduce or replace context rather than pile on.
|
|
40
|
+
4. If `.tink/current/` exists and continuity is uncertain, read the five current files, summarize goal / last safe point / next step / open questions / verification, then ask resume/archive/replace/cancel before continuing.
|
|
41
|
+
5. Run the synthesis probe on the initial harness choice. The probe produces one of three outcomes: strong fit (0-1 yes), generic fit (2-3 yes), or no fit (4-5 yes or no harness matches). Strong fit keeps the harness; generic fit adds a run-only draft; no fit loads `harness-synthesis`.
|
|
42
|
+
6. If no existing harness fits, use `harness-synthesis` to draft a narrow domain-specific harness instead of forcing a bad fit.
|
|
43
|
+
7. If too many tools, skills, agents, or harnesses are available, use `harness-curation` to choose the smallest effective set before loading more context.
|
|
44
|
+
8. If lightweight signals show recurring context, token, prompt-quality, output-length, reset, or evidence habits, use `harness-curation` to make one advisory recommendation.
|
|
45
|
+
9. When research notes, examples, prior failures, or user corrections are available, extract behavior-shaping rules: triggers, decision rules, checks, stop conditions, recovery, and evidence.
|
|
46
|
+
10. Run Stitch once before committing to `.tink/current/`: evaluate every time, show exactly one proposal only for high-impact quality or safety branches, and use configured language.
|
|
47
|
+
11. Use soft Stitch choices `Approve`, `Add requirements`, `Continue as-is` or localized equivalents; use hard choices `Approve`, `Add requirements`, `Cancel` only.
|
|
48
|
+
12. Hard gates must not offer `Continue as-is` or `이대로 진행`, and Stitch may change method or order but not the user's goal without separate approval.
|
|
49
|
+
13. Treat Reusable State Save Gate as a separate hard approval gate for `.tink/memory/*`, `.tink/harnesses/*`, `.tink/config.json`, `.claude/`, and template/plugin files that affect future installs.
|
|
50
|
+
14. Current-run approval never authorizes reusable-state writes; before saving reusable state, show operation, destination files, exact entry or patch summary, reusable reason, sensitive content excluded, and rollback/removal path.
|
|
51
|
+
15. Ask for approval before applying, saving, purging, or honing.
|
|
52
|
+
16. After approval, create `.tink/current/plan.md`, `checks.md`, `steps.json`, `notes.md`, and `answers.md`.
|
|
53
|
+
17. Do not stop at recommendation. Execute the first safe step after run state exists.
|
|
54
|
+
18. Store reusable memory under `.tink/memory/` only after separate Reusable State Save Gate approval.
|
|
55
|
+
19. If a check fails, update `.tink/current/notes.md`, state the failure, last safe point, and next single action.
|
|
56
|
+
20. Keep context compact. Do not paste raw logs or full diffs.
|
|
57
|
+
21. Use calm, clear, concise language. Prefer plain everyday words over technical terms — if a simpler word works, use it. No jokes.
|
|
58
|
+
|
|
59
|
+
## Quality bar
|
|
60
|
+
The user should not have to repeat themselves. If the same mistake appears twice, propose `/tink:weave` or a memory update through `/tink:cast`.
|
|
61
|
+
|
|
62
|
+
A successful Tink run leaves evidence:
|
|
63
|
+
- current run files exist or were intentionally archived,
|
|
64
|
+
- checks were verified or explicitly blocked,
|
|
65
|
+
- the final answer reports changed files and evidence,
|
|
66
|
+
- reusable learning is proposed only when it will matter again.
|