tink-harness 1.0.0 → 1.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 (42) hide show
  1. package/.claude-plugin/plugin.json +2 -2
  2. package/CHANGELOG.md +67 -5
  3. package/README.ko.md +49 -153
  4. package/README.md +82 -40
  5. package/VERSIONING.md +8 -8
  6. package/bin/install.js +257 -111
  7. package/commands/cast.md +214 -46
  8. package/commands/frog.md +9 -0
  9. package/commands/update.md +1 -5
  10. package/commands/verify.md +252 -0
  11. package/commands/weave.md +41 -27
  12. package/docs/compatibility-policy.md +30 -0
  13. package/docs/mcp-safe-profile.md +118 -0
  14. package/docs/pr/2026-06-07-v1.2.0.md +60 -0
  15. package/docs/repo-signals.md +77 -0
  16. package/package.json +11 -6
  17. package/skills/tink/SKILL.md +73 -66
  18. package/templates/claude/commands/tink/cast.md +214 -46
  19. package/templates/claude/commands/tink/frog.md +9 -0
  20. package/templates/claude/commands/tink/update.md +1 -5
  21. package/templates/claude/commands/tink/verify.md +252 -0
  22. package/templates/claude/commands/tink/weave.md +41 -27
  23. package/templates/claude/skills/tink/SKILL.md +73 -66
  24. package/templates/codex/skills/tink-cast/SKILL.md +13 -0
  25. package/templates/codex/skills/tink-core/RULES.md +112 -0
  26. package/templates/codex/skills/tink-frog/SKILL.md +13 -0
  27. package/templates/codex/skills/tink-list/SKILL.md +13 -0
  28. package/templates/codex/skills/tink-setup/SKILL.md +13 -0
  29. package/templates/codex/skills/tink-update/SKILL.md +13 -0
  30. package/templates/codex/skills/tink-verify/SKILL.md +13 -0
  31. package/templates/codex/skills/tink-weave/SKILL.md +13 -0
  32. package/templates/tink/config.json +10 -1
  33. package/templates/tink/harnesses/index.json +174 -157
  34. package/templates/tink/harnesses/pr-merge.md +53 -0
  35. package/templates/tink/hooks/guards.json +32 -0
  36. package/templates/tink/hooks/user-prompt-submit.mjs +51 -49
  37. package/templates/tink/maintenance/friction.jsonl +1 -0
  38. package/templates/tink/rules/index.json +128 -0
  39. package/templates/tink/schemas/context-map.schema.json +154 -0
  40. package/templates/tink/schemas/contract.schema.json +113 -0
  41. package/templates/tink/schemas/session.schema.json +37 -0
  42. package/templates/tink/schemas/verification.schema.json +141 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tink",
3
- "description": "A small harness layer for Claude Code.",
4
- "version": "1.0.0",
3
+ "description": "A small harness layer for Claude Code and Codex.",
4
+ "version": "1.2.0",
5
5
  "author": {
6
6
  "name": "dotori"
7
7
  }
package/CHANGELOG.md CHANGED
@@ -2,11 +2,73 @@
2
2
 
3
3
  All notable changes to Tink are tracked here.
4
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.
5
+ ## [Unreleased]
6
+
7
+ No unreleased changes yet.
8
+
9
+
10
+ ## [1.2.0] - 2026-06-07
11
+
12
+ ### Added
13
+
14
+ - Codex autocomplete aliases matching the Claude Code command surface: `$tink:cast`, `$tink:verify`, `$tink:list`, `$tink:frog`, `$tink:weave`, `$tink:setup`, and `$tink:update`.
15
+ - Contract-first context artifacts for non-trivial runs: `context-pack.md`, `context-map.json`, and `excluded-context.md`.
16
+ - Repo Signal fixtures and documentation so `/tink:cast` can select relevant tests, schemas, sync partners, and verification hints without adding a new `tink index` command.
17
+ - Verify Runner schema and fixtures for `.tink/current/verification.json`, including pass, fail, blocked, skipped, final report, notes summary, and maintenance signal behavior.
18
+ - MCP Safe Profile documentation and external-context profile schema support for sources such as Figma, GitHub, official docs, dashboards, API responses, screenshots, attachments, and runbooks.
19
+ - Compatibility policy documenting that new Tink work must support Claude Code and Codex, plus macOS and Windows.
20
+ - PR history draft for this release in `docs/pr/2026-06-07-v1.2.0.md`.
21
+
22
+ ### Changed
23
+
24
+ - Codex documentation and installer next-step guidance now prefer `$tink:*` spelling while keeping legacy `$tink <action>` prompts compatible.
25
+ - Project guidance now uses lower-case `templates/codex/skills/` and the actual `.claude/` / `.claude-plugin/` paths so Mac/Linux case-sensitive filesystems match the documented structure.
26
+ - Codex skill display is focused on action aliases only; shared Codex rules now live in non-visible `tink-core/RULES.md`.
27
+ - `/tink:cast` records included, excluded, and external context more explicitly, including sensitivity, confidence, source handles, and verification hints.
28
+ - `/tink:verify` now uses one portable runner model for Claude Code `/tink:verify` and Codex `$tink:verify`.
29
+ - README and Korean README now explain the 1.2.0 release highlights and point to compatibility, repo signal, and MCP Safe Profile docs.
30
+
31
+ ### Fixed
32
+
33
+ - Existing Codex installs that still have the old visible `skills/tink/SKILL.md` directory are cleaned up during install/update when it is recognized as the legacy Tink skill.
34
+
35
+ ### Removed
36
+
37
+ - Removed the old installable Codex `tink` skill surface so the picker no longer shows duplicate or awkward `Tink: Tink` entries.
38
+
39
+
40
+ ## [1.1.1] - 2026-05-26
41
+
42
+ ### Added
43
+
44
+ - Small Writ-inspired rule selection: rule graph nodes now distinguish `mandatory` and `retrievable` guidance with phase, budget cost, and keyword metadata.
45
+ - Current-run `session.json` schema so Tink can record `loaded_rule_ids_by_phase` and avoid repeating the same rule guidance during a run.
46
+ - Verification evidence and friction templates: `/tink:verify` now documents `.tink/current/verification.json` evidence and `.tink/maintenance/friction.jsonl` failure signals.
47
+
48
+ ### Changed
49
+
50
+ - `/tink:cast`, `/tink:verify`, and `/tink:weave` now describe the smaller rule-loading path: mandatory first, keyword retrieval second, phase dedupe, compact evidence, then repeated-friction promotion through weave.
51
+ - README and graph docs now explain the compact rule graph, verification evidence, and friction signal flow.
52
+
53
+
54
+ ## [1.1.0] - 2026-05-26
55
+
56
+ ### Added
57
+
58
+ - Contract-first run model: `/tink:cast` now writes `.tink/current/contract.json` for non-trivial runs so task type, risks, success conditions, forbidden actions, verification, and evidence are structured before harness bodies are loaded.
59
+ - `/tink:verify` command: runs the checks promised in the current contract, records compact evidence, and feeds failed checks into weave as `check_failed` signals.
60
+ - Repo-local rule graph templates in `.tink/rules/index.json`, plus `contract.schema.json`, so Tink can select relevant harnesses, checks, and opt-in guard candidates without loading large Markdown by default.
61
+ - Opt-in guard templates for repeated failures that should become real Claude Code hook boundaries after explicit approval.
62
+ - Documentation for graph contracts, verification, and guard promotion.
63
+
64
+ ### Changed
65
+
66
+ - `/tink:weave` can now classify improvements as harness edits, rule graph updates, or opt-in hook guard candidates.
67
+ - Hook recommendation script now uses readable multilingual messages and keeps the default hook advisory-only.
68
+
69
+ ### Planned
70
+
71
+ - 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
72
 
11
73
 
12
74
  ## [1.0.0] - 2026-05-25
package/README.ko.md CHANGED
@@ -2,25 +2,11 @@
2
2
  <img src=".github/assets/hero.gif" alt="Tink Hero Banner" width="100%">
3
3
  </p>
4
4
 
5
- <h1>
6
- <strong>Tink</strong>
7
- </h1>
5
+ # Tink
8
6
 
9
- <p>사람과 함께 일하며 함께 자라는 하네스</p>
7
+ Claude Code와 Codex를 위한 작은 하네스 레이어입니다.
10
8
 
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>
9
+ Tink는 지금 작업에 맞는 하네스를 고르고, 실행 상태를 보이게 만들고, 실제 사용 중 생긴 실패와 피드백으로 하네스 세트를 개선합니다.
24
10
 
25
11
  [English](README.md) · **한국어**
26
12
 
@@ -28,196 +14,106 @@
28
14
 
29
15
  ## 왜 만들었나
30
16
 
31
- 요즘 새로운 AI 하네스가 거의 매일 등장합니다. 그중 상당수는 저에게 정말 유용했습니다.
32
-
33
- 처음에는 하나씩 써보면서 저에게 맞는 것만 남겼습니다. 그런데 여러 개를 섞을수록 환경이 점점 엉켜갔습니다. 매번 처음부터 다시 정리하기가 지쳐서, 결국 제가 이해하고 통제할 수 있는 skill 기반 흐름으로 돌아갔습니다.
34
-
35
- 그 뒤로 한동안 Hermes Agent를 썼습니다. 그때 마음에 남은 것은, 쓸수록 시스템이 나아진다는 점이었습니다. 반복되는 작업이 다시 쓸 수 있는 skill이 되고, 실수가 기억이 되며, 시스템이 사용하는 사람에게 천천히 맞춰져 갔습니다.
17
+ 새로운 AI 코딩 하네스와 워크플로는 계속 늘어납니다. 좋은 것도 많지만, 여러 개를 섞다 보면 환경이 무거워지고 매번 다시 정리해야 합니다.
36
18
 
37
- Tink는 단순한 질문에서 시작됐습니다:
38
-
39
- > Claude Code나 Codex도 저와 함께 이렇게 자랄 수 있을까요?
40
-
41
- 큰 프레임워크를 더 얹지 않고도, 에이전트를 더 늘리지 않고도. 그저 Claude나 Codex가 지금 작업에 맞는 하네스를 고르고, 맞는 게 없으면 새로 만들고, 시간이 지나며 그 모음을 더 좋게 다듬도록 돕는 방식으로요.
19
+ Tink는 프레임워크가 아닙니다. Claude Code나 Codex가 지금 작업에 필요한 절차만 고르고, 없으면 작은 임시 하네스를 만들고, 반복되는 실수만 승인 후 재사용 지식으로 남기도록 돕습니다.
42
20
 
43
21
  ## 설치
44
22
 
45
- Claude Code 플러그인 설치:
23
+ Claude Code 플러그인:
46
24
 
47
25
  ```text
48
26
  /plugin marketplace add dotoricode/tink-harness
49
- ```
50
-
51
- ```text
52
27
  /plugin install tink@tink-harness
53
- ```
54
-
55
- ```text
56
28
  /reload-plugins
57
- ```
58
-
59
- ```text
60
29
  /tink:setup
61
30
  ```
62
31
 
63
- 독립형(Standalone) 호환 설치 프로그램:
32
+ Standalone / Codex 호환 설치:
64
33
 
65
34
  ```bash
66
- npx github:dotoricode/tink-harness install
35
+ npx tink-harness@latest install
67
36
  ```
68
37
 
69
- 독립형 설치 프로그램은 `LANG` 환경 변수를 자동으로 감지합니다(감지 실패 영어 기본값). 강제로 지정하려면 `--lang=en|ko|zh`를 넘기세요.
38
+ 설치 `Claude Code`, `Codex`, 또는 다를 선택할 있습니다. Codex에서는 `$tink:cast <task>`로 시작합니다.
70
39
 
71
40
  ## 업데이트
72
41
 
73
- Claude Code 플러그인 사용자:
42
+ Claude Code 플러그인:
74
43
 
75
44
  ```text
76
45
  /plugin marketplace update tink-harness
77
- ```
78
-
79
- ```text
80
46
  /plugin update tink@tink-harness
81
- ```
82
-
83
- ```text
84
47
  /reload-plugins
85
48
  ```
86
49
 
87
- 업데이트 명령으로 최신 버전을 찾지 못하면, 제거 후 다시 설치하세요:
88
-
89
- ```text
90
- /plugin uninstall tink@tink-harness
91
- ```
92
-
93
- ```text
94
- /plugin install tink@tink-harness
95
- ```
96
-
97
- 기존 독립형 설치를 업데이트하려면(사용자 수정 파일은 유지됩니다):
50
+ Standalone / Codex:
98
51
 
99
52
  ```bash
100
- npx github:dotoricode/tink-harness update
53
+ npx tink-harness@latest update
101
54
  ```
102
55
 
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`는:
56
+ ## 1.2.0에서 달라진 점
122
57
 
123
- - 이상 사용하지 않는 하네스
124
- - 다른 하네스와 역할이 겹치는 항목
125
- - 범위가 지나치게 넓은 하네스
126
- - 유지 비용 대비 효율이 낮은 하네스
58
+ 이번 릴리스는 Tink를 Claude Code와 Codex에서 같은 하네스 레이어로 쓰기 쉽게 정리합니다.
127
59
 
128
- 찾아 정리를 제안합니다.
60
+ - Codex에는 하나의 넓은 `tink` 스킬 대신 `$tink:cast`, `$tink:verify` 같은 action skill만 보이도록 설치됩니다.
61
+ - 비단순 작업은 `context-pack.md`, `context-map.json`, `excluded-context.md`로 어떤 context를 썼고 뺐는지 남깁니다.
62
+ - Repo Signal은 새 `tink index` 명령을 만들지 않고도 관련 테스트, 스키마, 동기화 파일, 검증 힌트를 고르는 데 쓰입니다.
63
+ - `/tink:verify`와 `$tink:verify`는 같은 Verify Runner 모델을 쓰며 `.tink/current/verification.json`에 검증 증거를 남깁니다.
64
+ - 외부 context는 MCP Safe Profile을 따릅니다. 가장 작은 source handle만 남기고, 신뢰도와 민감도를 표시하며, 위험하거나 너무 넓은 context는 `excluded-context.md`에 따로 기록합니다.
129
65
 
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
- ## 동작 방식
66
+ ## 명령
162
67
 
163
- Tink는 사용자가 직접 확인할 있는 파일 구조를 사용합니다.
68
+ Claude Code에서는 `/tink:*`, Codex에서는 `$tink:*`을 씁니다. 예전 `$tink cast` 형식도 호환되지만, 기본 안내와 자동완성 표면은 `$tink:*`입니다.
164
69
 
165
- - `.tink/harnesses/`
166
- - 재사용 가능한 작업 하네스
70
+ ### `/tink:cast` / `$tink:cast`
167
71
 
168
- - `.tink/current/`
169
- - 현재 실행 상태
72
+ 작업을 읽고, 필요한 하네스만 고르고, `.tink/current/` 실행 상태를 만든 뒤 첫 번째 안전한 단계를 시작합니다.
170
73
 
171
- - `.tink/runs/`
172
- - 완료·중단·취소·교체된 실행 기록
74
+ Tink는 이제 비단순 작업에 대해 `.tink/current/contract.json`도 만듭니다. 이 파일에는 작업 종류, 위험, 성공 조건, 금지 사항, 검증 명령이 들어갑니다.
173
75
 
174
- - `.tink/memory/`
175
- - 승인된 실수, 선호 설정, 작업 중 얻은 교훈
76
+ ### `/tink:verify` / `$tink:verify`
176
77
 
177
- 가장 중요한 원칙은 **승인(approval)** 입니다.
78
+ `contract.json`에 적힌 검증을 실제로 실행하고 증거를 남깁니다.
178
79
 
179
- Tink는:
80
+ 릴리스, 배포, 공개 PR처럼 "된 것 같다"가 아니라 "확인했다"가 필요한 작업에서 씁니다.
180
81
 
181
- - 하네스 생성
182
- - 메모리 저장
183
- - 정리 작업
184
- - 개선 제안
82
+ ### `/tink:frog` / `$tink:frog`
185
83
 
186
- 수행할 있지만, 실제 적용 전에는 항상 사용자 확인을 거칩니다.
84
+ 거의 쓰지 않거나 겹치거나 너무 무거운 하네스를 정리 후보로 제안합니다. 사용자 승인 없이는 삭제하지 않습니다.
187
85
 
188
- 실행 전에는 짧은 점검 단계를 수행하며, 중요한 변경이 있을 때만 별도 제안을 표시합니다.
86
+ ### `/tink:weave` / `$tink:weave`
189
87
 
190
- 위험이 낮은 작업은 기록된 가정을 바탕으로 계속 진행할 있습니다. 하지만:
88
+ 실제 실패, 반복 사용, 사용자 수정 내용을 바탕으로 하네스를 조금 정확하게 고칩니다. 필요한 경우 `.tink/rules/`의 rule graph나 opt-in hook guard 후보로 승격합니다.
191
89
 
192
- - 공개
193
- - 배포
194
- - 삭제
195
- - 대규모 수정
196
- - 되돌리기 어려운 변경
90
+ ### 기타
197
91
 
198
- 처럼 외부 영향이 작업은 반드시 명시적 승인이 필요합니다.
92
+ - `/tink:setup` / `$tink:setup`: 언어, 설치 범위, git 추적, hook 정책 설정
93
+ - `/tink:list` / `$tink:list`: 사용 가능한 하네스와 사용 신호 확인
94
+ - `/tink:update` / `$tink:update`: 설치 출처를 확인하고 안전한 업데이트 안내
199
95
 
200
- 또한:
96
+ ## 작동 방식
201
97
 
202
- - 하네스
203
- - 메모리 항목
204
- - `.claude/` 워크플로 파일
98
+ Tink는 직접 볼 수 있는 파일을 씁니다.
205
99
 
206
- 같은 재사용 가능한 자산을 저장할 때는 항상 별도의 승인을 다시 받습니다.
100
+ - `.tink/harnesses/`: 재사용 가능한 작업 하네스
101
+ - `.tink/rules/`: 계약 내용에 맞춰 필요한 하네스, 체크, guard 후보만 고르는 작은 rule graph
102
+ - `.tink/schemas/`: `contract.json` 같은 구조화 파일의 스키마
103
+ - `.tink/current/`: 현재 실행 상태
104
+ - `.tink/runs/`: 완료, 중단, 취소, 교체된 실행 기록
105
+ - `.tink/maintenance/`: 검증, friction, weave 신호 기록
106
+ - `.tink/memory/`: 승인된 실수, 선호, 교훈
207
107
 
208
- 현재 실행을 승인했다고 해서, 이후 설치나 영구 저장까지 자동으로 승인되는 것은 아닙니다.
108
+ Rule graph는 작게 유지합니다. Tink는 먼저 필수 규칙을 고르고, 작업 사실이나 keyword에 맞는 선택 규칙만 가져오며, phase별로 이미 읽은 rule id를 기록해 같은 안내를 반복하지 않습니다.
209
109
 
210
- ## Tink가 하지 않는
110
+ 설계 메모는 `docs/`에 둡니다. 기본 호환성 기준은 `docs/compatibility-policy.md`에 있으며, 새 작업은 Claude Code와 Codex, macOS와 Windows를 함께 고려해야 합니다. Repo Signal 동작은 `docs/repo-signals.md`에 정리되어 있고, 외부 context 안전 기준은 `docs/mcp-safe-profile.md`에 정리되어 있습니다.
211
111
 
212
- Tink는 다음을 목표로 하지 않습니다.
112
+ 중요한 원칙은 승인입니다. 현재 작업을 진행하는 승인과, 미래에도 재사용될 상태를 저장하는 승인은 별개입니다. 새 하네스, 메모리, rule graph, hook guard 저장은 항상 별도 승인이 필요합니다.
213
113
 
214
- - 코딩 에이전트
215
- - 워크플로 엔진
216
- - 멀티 에이전트 런타임
217
- - 프롬프트 라이브러리
218
- - Claude Code나 Codex 대체 도구
114
+ ## Tink가 아닌 것
219
115
 
220
- Tink는 Claude Code Codex 위에 얹는 작은 하네스 레이어입니다.
116
+ Tink는 코딩 에이전트, 워크플로 엔진, 멀티 에이전트 런타임, 프롬프트 라이브러리가 아닙니다. Claude Code Codex 위에 얹는 작은 하네스 레이어입니다.
221
117
 
222
118
  ## 라이선스
223
119
 
package/README.md CHANGED
@@ -6,17 +6,18 @@
6
6
  <strong>Tink</strong>
7
7
  </h1>
8
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>
9
+ <p>A small harness layer for Claude Code and Codex</p>
10
+
11
+ <p>
12
+ Tink helps Claude Code or Codex choose the right harness, keep run state visible, and improve the harness set as you work.
13
+ </p>
14
14
 
15
15
  <p>
16
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
17
  </p>
18
18
 
19
19
  <p>
20
+ <a href="https://www.npmjs.com/package/tink-harness"><img src="https://img.shields.io/npm/v/tink-harness?label=npm&color=cb3837" alt="npm version"></a>
20
21
  <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
22
  <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
23
  <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>
@@ -60,13 +61,21 @@ Claude Code plugin install:
60
61
  /tink:setup
61
62
  ```
62
63
 
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.
64
+ Standalone compatibility installer:
65
+
66
+ ```bash
67
+ npx tink-harness@latest install
68
+ ```
69
+
70
+ Standalone installer auto-detects `LANG` (English fallback). Pass `--lang=en|ko|zh` to override.
71
+
72
+ Codex skill install:
73
+
74
+ ```bash
75
+ npx tink-harness@latest install
76
+ ```
77
+
78
+ During install, select `Codex` when asked which agent surface to install. You can select both `Claude Code` and `Codex` in the same run. Then open Codex and use `$tink:cast <task>`.
70
79
 
71
80
  ## Update
72
81
 
@@ -94,27 +103,53 @@ If update does not find the latest version, uninstall and install again:
94
103
  /plugin install tink@tink-harness
95
104
  ```
96
105
 
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`
106
+ To update an existing standalone install (keeps user-modified files):
107
+
108
+ ```bash
109
+ npx tink-harness@latest update
110
+ ```
111
+
112
+ For Codex:
113
+
114
+ ```bash
115
+ npx tink-harness@latest update
116
+ ```
117
+
118
+ During update, select the installed agent surface you want to refresh.
119
+
120
+ ## What's new in 1.2.0
121
+
122
+ This release makes Tink work as one harness layer across Claude Code and Codex.
123
+
124
+ - Codex now installs focused `$tink:*` action skills instead of one broad visible `tink` skill, so the picker shows commands like `$tink:cast` and `$tink:verify` cleanly.
125
+ - Non-trivial runs now create context artifacts: `context-pack.md`, `context-map.json`, and `excluded-context.md`.
126
+ - Repo Signals help `/tink:cast` choose relevant tests, schemas, sync partners, and verification hints without adding a new `tink index` command.
127
+ - `/tink:verify` and `$tink:verify` share one portable Verify Runner model and write compact evidence to `.tink/current/verification.json`.
128
+ - External context now follows the MCP Safe Profile: include only the smallest useful source handle, mark confidence and sensitivity, exclude unsafe context visibly, and connect important claims to verification.
129
+
130
+ ## Commands
131
+
132
+ Tink keeps the command surface small.
133
+
134
+ Tink is plugin-first in Claude Code. Commands are namespaced under `tink`, so the public surface stays `/tink:*` and avoids generic command conflicts. In Codex, Tink installs matching `$tink:*` skills for autocomplete: `$tink:cast`, `$tink:verify`, `$tink:list`, `$tink:frog`, `$tink:weave`, `$tink:setup`, and `$tink:update`. Legacy `$tink cast` style prompts still work, but `$tink:*` is the preferred spelling.
135
+
136
+ ### `/tink:cast` / `$tink:cast`
110
137
 
111
138
  **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
139
 
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`
140
+ 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.
141
+
142
+ Use it when the task is more than a quick answer.
143
+
144
+ ### `/tink:verify` / `$tink:verify`
145
+
146
+ `verify` runs the checks promised in `.tink/current/contract.json`.
147
+
148
+ Tink now writes a small task contract for non-trivial runs: what kind of work this is, what must be true when it is done, what is forbidden, and which commands or manual checks prove it. `/tink:verify` uses that contract instead of relying on a vague "looks done" claim.
149
+
150
+ Use it before release, publish, deploy, public PR, or any task where evidence matters.
151
+
152
+ ### `/tink:frog` / `$tink:frog`
118
153
 
119
154
  **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
155
 
@@ -122,7 +157,7 @@ In Tink, `frog` looks for harnesses that are unused, overlapping, too broad, or
122
157
 
123
158
  Use it when the harness set starts to feel noisy.
124
159
 
125
- ### `/tink:weave`
160
+ ### `/tink:weave` / `$tink:weave`
126
161
 
127
162
  **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
163
 
@@ -132,20 +167,27 @@ Use it when a harness is useful but slightly wrong.
132
167
 
133
168
  ### Other commands
134
169
 
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.
170
+ - `/tink:setup` / `$tink:setup`: choose language, install scope, git tracking, and hook policy.
171
+ - `/tink:list` / `$tink:list`: inspect available harnesses and recent usage signals.
172
+ - `/tink:update` / `$tink:update`: detect install source and show the safe update command.
138
173
 
139
174
  ## How it works
140
175
 
141
176
  Tink uses files you can inspect:
142
177
 
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.
178
+ - `.tink/harnesses/`: reusable task harnesses
179
+ - `.tink/rules/`: a small rule graph that chooses only relevant harnesses, checks, and opt-in guard candidates
180
+ - `.tink/schemas/`: structured file schemas, including the current run contract
181
+ - `.tink/current/`: the current run state
182
+ - `.tink/runs/`: compact records from finished, blocked, canceled, or replaced runs
183
+ - `.tink/maintenance/`: verification, friction, and weave signals that help repeated failures become approved improvements
184
+ - `.tink/memory/`: approved mistakes, preferences, and lessons
185
+
186
+ The rule graph stays small on purpose. Tink loads matching mandatory rules first, retrieves only relevant optional rules by task facts or keywords, and records loaded rule ids by phase so the same guidance is not repeated in one run.
187
+
188
+ Design notes live in `docs/`. The compatibility baseline is `docs/compatibility-policy.md`: every new slice should consider Claude Code and Codex, plus macOS and Windows. Repo signal behavior is described in `docs/repo-signals.md`. External context safety is described in `docs/mcp-safe-profile.md`.
189
+
190
+ The important rule is approval.
149
191
 
150
192
  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
193
 
package/VERSIONING.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Versioning
2
2
 
3
- Current version: `0.1.5`
3
+ Current version: `1.2.0`
4
4
 
5
- Tink is pre-v1. Do not bump to `1.0.0` until the v1 release-hardening gates pass.
5
+ Tink follows semver from `1.0.0` onward.
6
6
 
7
7
  ## Source of truth
8
8
 
@@ -15,13 +15,13 @@ Keep these versions aligned for every versioned release:
15
15
 
16
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
17
 
18
- ## Pre-v1 bump rules
18
+ ## Bump rules
19
19
 
20
- Use semver, but keep everything under `1.0.0` for now.
20
+ Use semver.
21
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.
22
+ - Patch, for example `1.1.2`: docs, tests, installer polish, command wording, small template fixes, non-breaking maintenance structure. Prefer a patch release for each user-visible improvement instead of letting many small changes pile up in `[Unreleased]`.
23
+ - Minor, for example `1.1.0`: new command behavior, meaningful installer flow change, new persisted state shape, or anything existing users should deliberately notice — all backwards compatible.
24
+ - Major, for example `2.0.0`: breaking change to the command surface, plugin contract, persisted state shape, or installer flow that existing users must migrate for.
25
25
 
26
26
  ## Release checklist
27
27
 
@@ -67,7 +67,7 @@ Claude Code plugin users:
67
67
  Standalone compatibility installer users:
68
68
 
69
69
  ```bash
70
- npx github:dotoricode/tink-harness update
70
+ npx tink-harness@latest update
71
71
  ```
72
72
 
73
73
  `update` preserves user-modified files. The `--force` flag is reserved for emergency repair and is not the recommended path.