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,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tink-harness",
|
|
3
|
+
"description": "Claude Code harness workflow plugin marketplace.",
|
|
4
|
+
"owner": {
|
|
5
|
+
"name": "dotori"
|
|
6
|
+
},
|
|
7
|
+
"plugins": [
|
|
8
|
+
{
|
|
9
|
+
"name": "tink",
|
|
10
|
+
"source": "./",
|
|
11
|
+
"description": "A small harness layer for Claude Code."
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Tink are tracked here.
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
### Planned (v1.1)
|
|
8
|
+
|
|
9
|
+
- Layered scope model: merge `global` (`~/.tink/`) + `repo` (`.tink/`) + `local` (`.tink/local/` or `.tink/settings.local.json`) following the Claude Code settings pattern. Tracked separately.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## [1.0.0] - 2026-05-25
|
|
13
|
+
|
|
14
|
+
First stable release. All hardening gates passed.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- `pre-publish-multi-agent-verify` harness: 5-agent parallel verification harness for npm publish readiness. Agents cover install matrix, UX walkthrough, doc consistency, secret leak audit, and slash/contract coverage.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- `update` subcommand never propagated template changes to existing installs. Commands, skills, and maintenance files now always overwrite on update; harnesses, hooks, memory, and config are preserved when user-modified (respects `weave` customizations).
|
|
23
|
+
- `VERSIONING.md` update command used `npx tink-harness@latest update` (npm registry form, fails before first publish). Changed to `npx github:dotoricode/tink-harness update` (GitHub form, always works).
|
|
24
|
+
|
|
25
|
+
### Removed
|
|
26
|
+
|
|
27
|
+
- Remaining phantom references to `context-habit-calibration` in `cast.md`, `list.md`, and `SKILL.md` (harness was merged into `harness-curation` in v0.1.5).
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## [0.1.5] - 2026-05-24
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
|
|
34
|
+
- `tink-feedback-apply` harness: classify user feedback about Tink into the correct layer (behavioral, UX, preference, harness procedure, or new harness) and apply the minimum viable change.
|
|
35
|
+
- `/tink:list` output redesign: multi-line per harness, header field description, three categories (작업용 / 메타 / 이 저장소 전용), assessment section, and next-command suggestions.
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
|
|
39
|
+
- Built-in harness `## Checks` sections replaced generic boilerplate with domain-specific checks:
|
|
40
|
+
- `research`: decision named, options compared, facts/guesses labeled, recommendation follows evidence.
|
|
41
|
+
- `review`: correctness/security/data/UX risk addressed, severity labeled, no speculative blockers.
|
|
42
|
+
- `ship`: CI checks pass or reason stated, rollback documented, artifacts listed, risks explicit.
|
|
43
|
+
- `ship` Plan step 3: "Prepare notes for humans" → "Draft PR or release summary: what changed, what risks, what rollback."
|
|
44
|
+
- `harness-curation` now includes context habit calibration (signals, 6 habit types, calibration procedure) as an inline section. No separate harness needed.
|
|
45
|
+
- `index.json`: `harness-synthesis` and `harness-curation` classified as `kind: "meta"` to distinguish from work harnesses.
|
|
46
|
+
|
|
47
|
+
### Removed
|
|
48
|
+
|
|
49
|
+
- `context-habit-calibration` standalone harness. Its content is now part of `harness-curation`.
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
## [0.1.4] - 2026-05-23
|
|
53
|
+
|
|
54
|
+
### Added
|
|
55
|
+
|
|
56
|
+
- `/tink:update` slash command: detects install source, diagnoses user-modified files, and shows the safe update command.
|
|
57
|
+
- `npx tink-harness update` subcommand: data-preserving update that keeps user-modified files. Use `--force` to overwrite everything (data loss risk).
|
|
58
|
+
- HARNESS.md harness catalog for fast human scanning.
|
|
59
|
+
- Hard-gate behavior for `ship` harness (release/publish/deploy/PR) — runs the safety gate at initial approval, not just at the first risky step.
|
|
60
|
+
|
|
61
|
+
### Changed
|
|
62
|
+
|
|
63
|
+
- Default installer language now auto-detects from `LANG`/`LANGUAGE`/`LC_ALL`, falling back to English; previously hardcoded to Korean.
|
|
64
|
+
- README Update section recommends `npx ... update` only. The `install --force` path is no longer documented as a user-facing option (the `--force` flag remains in the code for emergency use but is not advertised).
|
|
65
|
+
- `/tink:cast` approval format uses plain language for the soft-gate review block; internal labels are kept in code/docs but not shown to the user.
|
|
66
|
+
- `/tink:cast` UX overhauls: shorter prompts, fewer approval gates for trivial tasks, single consolidated approval for soft-gate cases.
|
|
67
|
+
|
|
68
|
+
### Fixed
|
|
69
|
+
|
|
70
|
+
- Restored the README hero image after the previous fix targeted the wrong surface.
|
|
71
|
+
- Increased the installer TINK banner contrast for dark terminal themes.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
## [0.1.3]
|
|
75
|
+
|
|
76
|
+
Skipped during pre-v1 sequencing.
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
## [0.1.2] - 2026-05-22
|
|
80
|
+
|
|
81
|
+
### Changed
|
|
82
|
+
|
|
83
|
+
- Added a synthesis probe so `/tink:cast` can detect when a built-in harness is only a generic fit.
|
|
84
|
+
- Made run-only draft harnesses the default path for generic-fit cases, with saving still requiring separate approval.
|
|
85
|
+
- Clarified that `harness-synthesis` should handle both `no fit` and `generic fit` cases.
|
|
86
|
+
|
|
87
|
+
## [0.1.1] - 2026-05-22
|
|
88
|
+
|
|
89
|
+
### Added
|
|
90
|
+
|
|
91
|
+
- Existing-user update instructions for Claude Code plugin installs.
|
|
92
|
+
- Standalone compatibility installer refresh command using `--force`.
|
|
93
|
+
- Maintenance evidence structure: approval ledger and weave queue templates.
|
|
94
|
+
- Run record fields for selected, rejected, actually loaded, and maintenance evidence.
|
|
95
|
+
|
|
96
|
+
### Changed
|
|
97
|
+
|
|
98
|
+
- Bumped the Claude Code plugin version to make `/plugin update` detect the latest release.
|
|
99
|
+
- Clarified `unknown` evidence handling for `/tink:list`.
|
|
100
|
+
- Added evidence grades for `/tink:frog` and evidence handles for `/tink:weave`.
|
|
101
|
+
|
|
102
|
+
## [0.1.0] - 2026-05-22
|
|
103
|
+
|
|
104
|
+
### Added
|
|
105
|
+
|
|
106
|
+
- Initial pre-v1 plugin shape for Tink.
|
|
107
|
+
- Plugin-first `/tink:*` command surface.
|
|
108
|
+
- Standalone compatibility installer.
|
|
109
|
+
- Built-in harnesses, setup flow, optional hook recommendation, and visible `.tink/` state model.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 dotori
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.ko.md
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src=".github/assets/hero.gif" alt="Tink Hero Banner" width="100%">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1>
|
|
6
|
+
<strong>Tink</strong>
|
|
7
|
+
</h1>
|
|
8
|
+
|
|
9
|
+
<p>사람과 함께 일하며 함께 자라는 하네스</p>
|
|
10
|
+
|
|
11
|
+
<p>
|
|
12
|
+
Tink는 작업에 맞는 하네스를 고르고, 작업에 맞는 하네스를 만들기도 하며, 하네스를 개선 및 제거도 합니다.
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<p>
|
|
16
|
+
<em>Tink는 <strong>knit(뜨개질)</strong>을 거꾸로 한 이름입니다. 엉킨 작업 흐름을 풀고, 더 나은 흐름으로 다시 뜨개질해 묶어준다는 뜻입니다. 동시에 곁에 있는 작은 조력자 팅커벨에 대한 오마주이기도 합니다.</em>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p>
|
|
20
|
+
<a href="https://github.com/dotoricode/tink-harness/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/dotoricode/tink-harness/ci.yml?branch=main&label=ci" alt="CI"></a>
|
|
21
|
+
<a href="https://github.com/dotoricode/tink-harness/blob/main/LICENSE"><img src="https://img.shields.io/github/license/dotoricode/tink-harness" alt="License"></a>
|
|
22
|
+
<a href="https://github.com/dotoricode/tink-harness/stargazers"><img src="https://img.shields.io/github/stars/dotoricode/tink-harness?style=social" alt="GitHub stars"></a>
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
[English](README.md) · **한국어**
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 왜 만들었나
|
|
30
|
+
|
|
31
|
+
요즘 새로운 AI 하네스가 거의 매일 등장합니다. 그중 상당수는 저에게 정말 유용했습니다.
|
|
32
|
+
|
|
33
|
+
처음에는 하나씩 써보면서 저에게 맞는 것만 남겼습니다. 그런데 여러 개를 섞을수록 환경이 점점 엉켜갔습니다. 매번 처음부터 다시 정리하기가 지쳐서, 결국 제가 이해하고 통제할 수 있는 skill 기반 흐름으로 돌아갔습니다.
|
|
34
|
+
|
|
35
|
+
그 뒤로 한동안 Hermes Agent를 썼습니다. 그때 마음에 남은 것은, 쓸수록 시스템이 나아진다는 점이었습니다. 반복되는 작업이 다시 쓸 수 있는 skill이 되고, 실수가 기억이 되며, 시스템이 사용하는 사람에게 천천히 맞춰져 갔습니다.
|
|
36
|
+
|
|
37
|
+
Tink는 단순한 질문에서 시작됐습니다:
|
|
38
|
+
|
|
39
|
+
> Claude Code나 Codex도 저와 함께 이렇게 자랄 수 있을까요?
|
|
40
|
+
|
|
41
|
+
큰 프레임워크를 더 얹지 않고도, 에이전트를 더 늘리지 않고도. 그저 Claude나 Codex가 지금 작업에 맞는 하네스를 고르고, 맞는 게 없으면 새로 만들고, 시간이 지나며 그 모음을 더 좋게 다듬도록 돕는 방식으로요.
|
|
42
|
+
|
|
43
|
+
## 설치
|
|
44
|
+
|
|
45
|
+
Claude Code 플러그인 설치:
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
/plugin marketplace add dotoricode/tink-harness
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
/plugin install tink@tink-harness
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
/reload-plugins
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
/tink:setup
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
독립형(Standalone) 호환 설치 프로그램:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npx github:dotoricode/tink-harness install
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
독립형 설치 프로그램은 `LANG` 환경 변수를 자동으로 감지합니다(감지 실패 시 영어 기본값). 강제로 지정하려면 `--lang=en|ko|zh`를 넘기세요.
|
|
70
|
+
|
|
71
|
+
## 업데이트
|
|
72
|
+
|
|
73
|
+
Claude Code 플러그인 사용자:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
/plugin marketplace update tink-harness
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
/plugin update tink@tink-harness
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
/reload-plugins
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
업데이트 명령으로 최신 버전을 찾지 못하면, 제거 후 다시 설치하세요:
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
/plugin uninstall tink@tink-harness
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```text
|
|
94
|
+
/plugin install tink@tink-harness
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
기존 독립형 설치를 업데이트하려면(사용자 수정 파일은 유지됩니다):
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
npx github:dotoricode/tink-harness update
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## 명령
|
|
104
|
+
|
|
105
|
+
Tink는 명령 체계를 최소한으로 유지합니다.
|
|
106
|
+
|
|
107
|
+
Tink는 플러그인 우선 구조이며, 모든 명령은 `tink` 네임스페이스를 사용합니다. 따라서 공개되는 명령은 `/tink:*`로 한정되고 일반 명령과의 충돌을 피할 수 있습니다.
|
|
108
|
+
|
|
109
|
+
### `/tink:cast`
|
|
110
|
+
|
|
111
|
+
**cast**는 뜨개질에서 첫 코를 잡는 동작입니다. 모든 작업의 시작점이 됩니다.
|
|
112
|
+
|
|
113
|
+
Tink에서 `cast`는 기본 실행 흐름입니다. 작업을 읽고, 적절한 하네스를 선택하거나 초안을 만들고, 짧은 내부 검토를 거친 뒤 `.tink/current/`에 현재 작업 상태를 구성합니다. 이후 사용자 승인을 받고 안전한 첫 단계를 실행합니다.
|
|
114
|
+
|
|
115
|
+
단순한 질의응답을 넘어서는 작업이라면 보통 `cast`로 시작합니다.
|
|
116
|
+
|
|
117
|
+
### `/tink:frog`
|
|
118
|
+
|
|
119
|
+
**frog**는 잘못 뜬 부분을 풀어내는 뜨개질 용어입니다. 실을 푸는 소리인 "rip it, rip it"에서 이름이 왔습니다.
|
|
120
|
+
|
|
121
|
+
Tink에서 `frog`는:
|
|
122
|
+
|
|
123
|
+
- 더 이상 사용하지 않는 하네스
|
|
124
|
+
- 다른 하네스와 역할이 겹치는 항목
|
|
125
|
+
- 범위가 지나치게 넓은 하네스
|
|
126
|
+
- 유지 비용 대비 효율이 낮은 하네스
|
|
127
|
+
|
|
128
|
+
를 찾아 정리를 제안합니다.
|
|
129
|
+
|
|
130
|
+
삭제는 항상 사용자 승인 이후에만 수행됩니다.
|
|
131
|
+
|
|
132
|
+
하네스 구성이 복잡하거나 정리가 필요할 때 사용합니다.
|
|
133
|
+
|
|
134
|
+
### `/tink:weave`
|
|
135
|
+
|
|
136
|
+
**weave**는 뜨개질을 마친 뒤 남은 실을 안쪽으로 정리해 마감하는 과정(**weave in**)에서 따온 이름입니다.
|
|
137
|
+
|
|
138
|
+
Tink에서 `weave`는 실제 사용 기록, 실패 사례, 사용자 수정 내용을 바탕으로 기존 하네스를 다듬습니다.
|
|
139
|
+
|
|
140
|
+
목표는 다음 실행이:
|
|
141
|
+
|
|
142
|
+
- 더 명확하고
|
|
143
|
+
- 더 안전하며
|
|
144
|
+
- 더 검증 가능하도록
|
|
145
|
+
|
|
146
|
+
개선하는 것입니다.
|
|
147
|
+
|
|
148
|
+
하네스가 거의 맞지만 조금씩 어긋나기 시작할 때 사용합니다.
|
|
149
|
+
|
|
150
|
+
### 기타 명령
|
|
151
|
+
|
|
152
|
+
- `/tink:setup`
|
|
153
|
+
- 언어, 설치 범위, Git 추적, Hook 정책을 설정합니다.
|
|
154
|
+
|
|
155
|
+
- `/tink:list`
|
|
156
|
+
- 사용 가능한 하네스와 최근 사용 내역을 확인합니다.
|
|
157
|
+
|
|
158
|
+
- `/tink:update`
|
|
159
|
+
- 설치 경로를 감지하고 안전한 업데이트 방법을 안내합니다.
|
|
160
|
+
|
|
161
|
+
## 동작 방식
|
|
162
|
+
|
|
163
|
+
Tink는 사용자가 직접 확인할 수 있는 파일 구조를 사용합니다.
|
|
164
|
+
|
|
165
|
+
- `.tink/harnesses/`
|
|
166
|
+
- 재사용 가능한 작업 하네스
|
|
167
|
+
|
|
168
|
+
- `.tink/current/`
|
|
169
|
+
- 현재 실행 상태
|
|
170
|
+
|
|
171
|
+
- `.tink/runs/`
|
|
172
|
+
- 완료·중단·취소·교체된 실행 기록
|
|
173
|
+
|
|
174
|
+
- `.tink/memory/`
|
|
175
|
+
- 승인된 실수, 선호 설정, 작업 중 얻은 교훈
|
|
176
|
+
|
|
177
|
+
가장 중요한 원칙은 **승인(approval)** 입니다.
|
|
178
|
+
|
|
179
|
+
Tink는:
|
|
180
|
+
|
|
181
|
+
- 하네스 생성
|
|
182
|
+
- 메모리 저장
|
|
183
|
+
- 정리 작업
|
|
184
|
+
- 개선 제안
|
|
185
|
+
|
|
186
|
+
을 수행할 수 있지만, 실제 적용 전에는 항상 사용자 확인을 거칩니다.
|
|
187
|
+
|
|
188
|
+
실행 전에는 짧은 점검 단계를 수행하며, 중요한 변경이 있을 때만 별도 제안을 표시합니다.
|
|
189
|
+
|
|
190
|
+
위험이 낮은 작업은 기록된 가정을 바탕으로 계속 진행할 수 있습니다. 하지만:
|
|
191
|
+
|
|
192
|
+
- 공개
|
|
193
|
+
- 배포
|
|
194
|
+
- 삭제
|
|
195
|
+
- 대규모 수정
|
|
196
|
+
- 되돌리기 어려운 변경
|
|
197
|
+
|
|
198
|
+
처럼 외부 영향이 큰 작업은 반드시 명시적 승인이 필요합니다.
|
|
199
|
+
|
|
200
|
+
또한:
|
|
201
|
+
|
|
202
|
+
- 새 하네스
|
|
203
|
+
- 메모리 항목
|
|
204
|
+
- `.claude/` 워크플로 파일
|
|
205
|
+
|
|
206
|
+
같은 재사용 가능한 자산을 저장할 때는 항상 별도의 승인을 다시 받습니다.
|
|
207
|
+
|
|
208
|
+
현재 실행을 승인했다고 해서, 이후 설치나 영구 저장까지 자동으로 승인되는 것은 아닙니다.
|
|
209
|
+
|
|
210
|
+
## Tink가 하지 않는 것
|
|
211
|
+
|
|
212
|
+
Tink는 다음을 목표로 하지 않습니다.
|
|
213
|
+
|
|
214
|
+
- 코딩 에이전트
|
|
215
|
+
- 워크플로 엔진
|
|
216
|
+
- 멀티 에이전트 런타임
|
|
217
|
+
- 프롬프트 라이브러리
|
|
218
|
+
- Claude Code나 Codex 대체 도구
|
|
219
|
+
|
|
220
|
+
Tink는 Claude Code나 Codex 위에 얹는 작은 하네스 레이어입니다.
|
|
221
|
+
|
|
222
|
+
## 라이선스
|
|
223
|
+
|
|
224
|
+
MIT
|
package/README.md
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src=".github/assets/hero.gif" alt="Tink Hero Banner" width="100%">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1>
|
|
6
|
+
<strong>Tink</strong>
|
|
7
|
+
</h1>
|
|
8
|
+
|
|
9
|
+
<p>A small harness layer for Claude Code</p>
|
|
10
|
+
|
|
11
|
+
<p>
|
|
12
|
+
Tink helps Claude Code choose the right harness, keep run state visible, and improve the harness set as you work.
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<p>
|
|
16
|
+
<em>Tink is <strong>knit</strong> in reverse: untying tangled workflows and knitting better ones back together. It also nods to Tinker Bell, the small helper at your side.</em>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p>
|
|
20
|
+
<a href="https://github.com/dotoricode/tink-harness/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/dotoricode/tink-harness/ci.yml?branch=main&label=ci" alt="CI"></a>
|
|
21
|
+
<a href="https://github.com/dotoricode/tink-harness/blob/main/LICENSE"><img src="https://img.shields.io/github/license/dotoricode/tink-harness" alt="License"></a>
|
|
22
|
+
<a href="https://github.com/dotoricode/tink-harness/stargazers"><img src="https://img.shields.io/github/stars/dotoricode/tink-harness?style=social" alt="GitHub stars"></a>
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
**English** · [한국어](README.ko.md)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Why I made this
|
|
30
|
+
|
|
31
|
+
New coding harnesses show up almost every day. Many of them are genuinely useful.
|
|
32
|
+
|
|
33
|
+
At first, I tried them one by one and kept the ones that fit me. But the more I mixed them, the more my environment got tangled. Resetting everything again and again was tiring, so I ended up falling back to a skill-based workflow that I could understand and control.
|
|
34
|
+
|
|
35
|
+
Then I used Hermes Agent for a while. What stayed with me was the way it gets better through use: repeated work turns into reusable skills, mistakes become memory, and the system slowly adapts to the person using it.
|
|
36
|
+
|
|
37
|
+
Tink started from a simple question:
|
|
38
|
+
|
|
39
|
+
> Could Claude Code or Codex grow with me in the same way?
|
|
40
|
+
|
|
41
|
+
Not by adding a big framework. Not by running more agents. Just by helping Claude or Codex choose the right harness for the current task, create one when nothing fits, and improve the set over time.
|
|
42
|
+
|
|
43
|
+
## Install
|
|
44
|
+
|
|
45
|
+
Claude Code plugin install:
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
/plugin marketplace add dotoricode/tink-harness
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
/plugin install tink@tink-harness
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
/reload-plugins
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
/tink:setup
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Standalone compatibility installer:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npx github:dotoricode/tink-harness install
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Standalone installer auto-detects `LANG` (English fallback). Pass `--lang=en|ko|zh` to override.
|
|
70
|
+
|
|
71
|
+
## Update
|
|
72
|
+
|
|
73
|
+
Claude Code plugin users:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
/plugin marketplace update tink-harness
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
/plugin update tink@tink-harness
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
/reload-plugins
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
If update does not find the latest version, uninstall and install again:
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
/plugin uninstall tink@tink-harness
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```text
|
|
94
|
+
/plugin install tink@tink-harness
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
To update an existing standalone install (keeps user-modified files):
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
npx github:dotoricode/tink-harness update
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Commands
|
|
104
|
+
|
|
105
|
+
Tink keeps the command surface small.
|
|
106
|
+
|
|
107
|
+
Tink is plugin-first. Commands are namespaced under `tink`, so the public surface stays `/tink:*` and avoids generic command conflicts.
|
|
108
|
+
|
|
109
|
+
### `/tink:cast`
|
|
110
|
+
|
|
111
|
+
**cast** means to place the first loops on the needle (코잡기, Cast on). In knitting, casting on is the very first step — it sets the foundation for everything that follows.
|
|
112
|
+
|
|
113
|
+
In Tink, `cast` is the main path. It reads the task, chooses or drafts the right harness, runs a quick internal sanity check, creates `.tink/current/` as the visible workbench, and starts the first safe step after approval.
|
|
114
|
+
|
|
115
|
+
Use it when the task is more than a quick answer.
|
|
116
|
+
|
|
117
|
+
### `/tink:frog`
|
|
118
|
+
|
|
119
|
+
**frog** means to rip out stitches (풀시오, Frogging). In knitting, frogging unravels rows that went wrong — the name comes from the sound of pulling out yarn, "rip it, rip it."
|
|
120
|
+
|
|
121
|
+
In Tink, `frog` looks for harnesses that are unused, overlapping, too broad, or no longer worth their context cost. It proposes cleanup, but does not delete without approval.
|
|
122
|
+
|
|
123
|
+
Use it when the harness set starts to feel noisy.
|
|
124
|
+
|
|
125
|
+
### `/tink:weave`
|
|
126
|
+
|
|
127
|
+
**weave** means to weave in the ends (실오라기 정리, Weave in). In knitting, weaving in secures the loose threads left after finishing, giving the work its final shape.
|
|
128
|
+
|
|
129
|
+
In Tink, `weave` improves an existing harness using real use, failures, and corrections. It should make the next run clearer, safer, or easier to verify.
|
|
130
|
+
|
|
131
|
+
Use it when a harness is useful but slightly wrong.
|
|
132
|
+
|
|
133
|
+
### Other commands
|
|
134
|
+
|
|
135
|
+
- `/tink:setup`: choose language, install scope, git tracking, and hook policy.
|
|
136
|
+
- `/tink:list`: inspect available harnesses and recent usage signals.
|
|
137
|
+
- `/tink:update`: detect install source and show the safe update command.
|
|
138
|
+
|
|
139
|
+
## How it works
|
|
140
|
+
|
|
141
|
+
Tink uses files you can inspect:
|
|
142
|
+
|
|
143
|
+
- `.tink/harnesses/`: reusable task harnesses
|
|
144
|
+
- `.tink/current/`: the current run state
|
|
145
|
+
- `.tink/runs/`: compact records from finished, blocked, canceled, or replaced runs
|
|
146
|
+
- `.tink/memory/`: approved mistakes, preferences, and lessons
|
|
147
|
+
|
|
148
|
+
The important rule is approval.
|
|
149
|
+
|
|
150
|
+
Tink may suggest a harness, a memory entry, a cleanup, or an improvement. Before each run is committed, Tink runs one quick sanity check and surfaces a proposal only when something important is at stake. Low-risk steps let you continue with recorded assumptions; irreversible or externally visible actions (publish, deploy, deletions, broad changes) require explicit approval. Saving anything reusable — a new harness, a memory entry, a `.claude/` workflow file — always needs its own separate approval; approving the current run does not authorize saves that future installs would inherit.
|
|
151
|
+
|
|
152
|
+
## What Tink is not
|
|
153
|
+
|
|
154
|
+
Tink is not:
|
|
155
|
+
|
|
156
|
+
- a coding agent
|
|
157
|
+
- a workflow engine
|
|
158
|
+
- a multi-agent runtime
|
|
159
|
+
- a prompt library
|
|
160
|
+
- a replacement for Claude Code or Codex
|
|
161
|
+
|
|
162
|
+
It is a small harness layer for Claude Code or Codex.
|
|
163
|
+
|
|
164
|
+
## License
|
|
165
|
+
|
|
166
|
+
MIT
|
package/VERSIONING.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Versioning
|
|
2
|
+
|
|
3
|
+
Current version: `0.1.5`
|
|
4
|
+
|
|
5
|
+
Tink is pre-v1. Do not bump to `1.0.0` until the v1 release-hardening gates pass.
|
|
6
|
+
|
|
7
|
+
## Source of truth
|
|
8
|
+
|
|
9
|
+
Keep these versions aligned for every versioned release:
|
|
10
|
+
|
|
11
|
+
- `package.json`
|
|
12
|
+
- `package-lock.json`
|
|
13
|
+
- `.claude-plugin/plugin.json`
|
|
14
|
+
- `CHANGELOG.md`
|
|
15
|
+
|
|
16
|
+
Claude Code uses `.claude-plugin/plugin.json` to decide whether plugin users can receive an update. If this value does not change, `/plugin update` can report that the plugin is already latest even after new commits.
|
|
17
|
+
|
|
18
|
+
## Pre-v1 bump rules
|
|
19
|
+
|
|
20
|
+
Use semver, but keep everything under `1.0.0` for now.
|
|
21
|
+
|
|
22
|
+
- Patch, for example `0.1.1` to `0.1.4`: docs, tests, installer polish, command wording, small template fixes, non-breaking maintenance structure.
|
|
23
|
+
- Minor, for example `0.1.x` to `0.2.0`: new command behavior, meaningful installer flow change, new persisted state shape, or anything existing users should deliberately notice.
|
|
24
|
+
- Major `1.0.0`: only after release-hardening tests, docs truthfulness, clean install smoke, plugin validation, CI, and explicit release decision.
|
|
25
|
+
|
|
26
|
+
## Release checklist
|
|
27
|
+
|
|
28
|
+
Before pushing a versioned release:
|
|
29
|
+
|
|
30
|
+
1. Update `package.json`, `package-lock.json`, and `.claude-plugin/plugin.json` to the same version.
|
|
31
|
+
2. Add a `CHANGELOG.md` entry for the version.
|
|
32
|
+
3. Confirm README update instructions still match the actual Claude Code plugin path.
|
|
33
|
+
4. Run:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm test
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
git diff --check
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
claude plugin validate .claude-plugin/plugin.json
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
claude plugin validate .claude-plugin/marketplace.json
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm pack --dry-run --json
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
5. Push and verify GitHub Actions CI.
|
|
56
|
+
|
|
57
|
+
## Existing-user update path
|
|
58
|
+
|
|
59
|
+
Claude Code plugin users:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
/plugin marketplace update tink-harness
|
|
63
|
+
/plugin update tink@tink-harness
|
|
64
|
+
/reload-plugins
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Standalone compatibility installer users:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npx github:dotoricode/tink-harness update
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
`update` preserves user-modified files. The `--force` flag is reserved for emergency repair and is not the recommended path.
|