tink-harness 1.9.12 → 1.9.14

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tink",
3
3
  "description": "A small harness layer for Claude Code and Codex.",
4
- "version": "1.9.12",
4
+ "version": "1.9.14",
5
5
  "author": {
6
6
  "name": "dotori"
7
7
  }
package/CHANGELOG.md CHANGED
@@ -6,6 +6,27 @@ All notable changes to Tink are tracked here.
6
6
 
7
7
  No unreleased changes yet.
8
8
 
9
+ ## [1.9.14] - 2026-06-11
10
+
11
+ ### Changed
12
+
13
+ - `npx tink-harness update` now asks a single question (which agent surface to refresh) and handles everything else automatically: language is detected from `.tink/config.json`, components and scope use sensible defaults, and Tink-owned files always refresh while user-modified harness/memory/config files stay preserved.
14
+ - README (EN/KO) reorganized developer-first: a one-minute Quick start, a "see your harness health" section with dashboard screenshots (3D map + harness cards), and an updated one-question update description. The origin story and all install/command details are kept.
15
+
16
+ ### Added
17
+
18
+ - Dashboard screenshots committed under `.github/assets/` (`dashboard-map.png`, `dashboard-harnesses.png`).
19
+
20
+ ## [1.9.13] - 2026-06-11
21
+
22
+ ### Fixed
23
+
24
+ - `npx tink-harness update` now always refreshes `.tink/tools/` (the lifecycle generator and health-report renderer). Previously stale tools were preserved as "user-modified", so updated installs kept rendering the old dashboard. Run `update` again on affected machines to pick up the current tools.
25
+
26
+ ### Changed
27
+
28
+ - `/tink:update` docs and the update summary now list `.tink/tools/` in the always-updated category; added a regression test that a stale tool file is overwritten by `update`.
29
+
9
30
  ## [1.9.12] - 2026-06-11
10
31
 
11
32
  ### Changed
package/README.ko.md CHANGED
@@ -8,12 +8,62 @@ Claude Code와 Codex를 위한 작은 하네스 레이어입니다.
8
8
 
9
9
  Tink는 지금 작업에 맞는 하네스를 고르고, 실행 상태를 보이게 만들고, 실제 사용 중 생긴 실패와 피드백으로 하네스 세트를 개선합니다.
10
10
 
11
- **최신 패키지:** v1.9.12 — 로컬 건강 리포트가 탭형 대시보드로 바뀌었습니다. 3D 하네스 지도, 쉬운 말 건강 요약, Claude Code와 Codex 양쪽 복사-붙여넣기 명령이 포함된 다음 행동 제안을 제공합니다. 전체 변경 이력은 [CHANGELOG](CHANGELOG.md)를 확인하세요.
11
+ **최신 패키지:** v1.9.14 — 로컬 건강 리포트가 탭형 대시보드로 바뀌었습니다. 3D 하네스 지도, 쉬운 말 건강 요약, Claude Code와 Codex 양쪽 복사-붙여넣기 명령이 포함된 다음 행동 제안을 제공합니다. 전체 변경 이력은 [CHANGELOG](CHANGELOG.md)를 확인하세요.
12
12
 
13
13
  [English](README.md) · **한국어** · [변경 이력](CHANGELOG.md)
14
14
 
15
15
  ---
16
16
 
17
+ ## 빠른 시작
18
+
19
+ 1분이면 Tink를 직접 써볼 수 있습니다.
20
+
21
+ **Claude Code (플러그인):**
22
+
23
+ ```text
24
+ /plugin marketplace add dotoricode/tink-harness
25
+ /plugin install tink@tink-harness
26
+ /reload-plugins
27
+ /tink:setup
28
+ ```
29
+
30
+ **Claude Code 또는 Codex (스탠드얼론):**
31
+
32
+ ```bash
33
+ npx tink-harness@latest install
34
+ ```
35
+
36
+ 문서를 더 읽는 대신 실제 작업을 맡겨 보세요:
37
+
38
+ ```text
39
+ /tink:cast 인증 모듈 리팩터링 # Claude Code
40
+ $tink:cast 인증 모듈 리팩터링 # Codex
41
+ ```
42
+
43
+ `cast`는 작업에 맞는 하네스를 고르고(없으면 초안을 만들고), `.tink/current/`에 보이는 계획을 쓰고, 승인 후 첫 안전한 단계를 시작합니다. 끝난 run마다 간결한 기록이 남고 — 그 기록이 아래 대시보드가 됩니다.
44
+
45
+ ## 하네스 건강을 눈으로 확인
46
+
47
+ 몇 번의 run이 쌓이면, 읽기 전용 helper 두 개가 기록을 로컬 대시보드로 바꿔 줍니다:
48
+
49
+ ```bash
50
+ node .tink/tools/generate-harness-lifecycle-summary.mjs
51
+ node .tink/tools/render-harness-health-report.mjs
52
+ # .tink/maintenance/harness-health-report.html 열기
53
+ ```
54
+
55
+ 하네스와 그들이 쓰는 규칙·메모리, 그 연결을 보여주는 인터랙티브 3D 지도 — 무리마다 고유한 색을 갖고, 살아있는 관계 위로 신호가 흐릅니다:
56
+
57
+ ![Tink 하네스 지도 — 하네스·규칙·메모리·단계를 보여주는 인터랙티브 3D 뷰](.github/assets/dashboard-map.png)
58
+
59
+ 실제 사용량 순으로 정렬된 하네스 카드 — 쉬운 말 건강 요약, 주의 점수, 승인 이력, 그리고 Claude Code·Codex 양쪽 복사용 명령이 포함된 다음 행동 제안:
60
+
61
+ ![사용량 순 하네스 카드와 쉬운 말 건강 요약·히스토리](.github/assets/dashboard-harnesses.png)
62
+
63
+ 서버도, 텔레메트리도, 숨은 캐시도 없습니다 — 제안만 준비하는 정적 로컬 페이지입니다. 재사용되는 변경은 여전히 Tink의 승인 절차를 거칩니다.
64
+
65
+ ---
66
+
17
67
  ## 왜 만들었나
18
68
 
19
69
  새로운 AI 코딩 하네스와 워크플로는 계속 늘어납니다. 좋은 것도 많지만, 여러 개를 섞다 보면 환경이 무거워지고 매번 다시 정리해야 합니다.
@@ -62,6 +112,8 @@ Standalone / Codex:
62
112
  npx tink-harness@latest update
63
113
  ```
64
114
 
115
+ 업데이트는 질문 하나 — 어떤 agent surface를 갱신할지 — 만 묻고 나머지는 자동으로 처리합니다. Tink가 관리하는 파일(commands, skills, maintenance, 런타임 tools)은 항상 최신으로 덮어쓰고, 사용자가 수정한 하네스·메모리·설정은 보존합니다.
116
+
65
117
  `CODEX_HOME`을 지정하지 않으면 Windows에서는 `%USERPROFILE%\.codex`, macOS/Linux에서는 `~/.codex`에 Codex skill이 설치됩니다.
66
118
 
67
119
  ### 고급 옵션
package/README.md CHANGED
@@ -17,19 +17,69 @@
17
17
  </p>
18
18
 
19
19
  <p>
20
- <a href="https://github.com/dotoricode/tink-harness/releases/tag/v1.9.12"><img src="https://img.shields.io/github/v/release/dotoricode/tink-harness?label=release&color=2ea44f" alt="GitHub release"></a>
20
+ <a href="https://github.com/dotoricode/tink-harness/releases/tag/v1.9.14"><img src="https://img.shields.io/github/v/release/dotoricode/tink-harness?label=release&color=2ea44f" alt="GitHub release"></a>
21
21
  <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>
22
22
  <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>
23
23
  <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>
24
24
  <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>
25
25
  </p>
26
26
 
27
- <p><strong>Latest package:</strong> v1.9.12 - The local health report is now a tabbed dashboard with a 3D harness map, plain-language health summaries, and next-action suggestions with copy-paste commands for both Claude Code and Codex. See <a href="CHANGELOG.md">CHANGELOG</a> for release history.</p>
27
+ <p><strong>Latest package:</strong> v1.9.14 - The local health report is now a tabbed dashboard with a 3D harness map, plain-language health summaries, and next-action suggestions with copy-paste commands for both Claude Code and Codex. See <a href="CHANGELOG.md">CHANGELOG</a> for release history.</p>
28
28
 
29
29
  **English** · [한국어](README.ko.md) · [Changelog](CHANGELOG.md)
30
30
 
31
31
  ---
32
32
 
33
+ ## Quick start
34
+
35
+ Try Tink in about a minute.
36
+
37
+ **Claude Code (plugin):**
38
+
39
+ ```text
40
+ /plugin marketplace add dotoricode/tink-harness
41
+ /plugin install tink@tink-harness
42
+ /reload-plugins
43
+ /tink:setup
44
+ ```
45
+
46
+ **Claude Code or Codex (standalone):**
47
+
48
+ ```bash
49
+ npx tink-harness@latest install
50
+ ```
51
+
52
+ Then hand Tink a real task instead of reading more docs:
53
+
54
+ ```text
55
+ /tink:cast refactor the auth module # Claude Code
56
+ $tink:cast refactor the auth module # Codex
57
+ ```
58
+
59
+ `cast` picks (or drafts) the right harness, writes a visible plan into `.tink/current/`, and starts the first safe step after your approval. Every finished run leaves a compact record - and those records become the dashboard below.
60
+
61
+ ## See your harness health
62
+
63
+ After a few runs, two read-only helpers turn your records into a local dashboard:
64
+
65
+ ```bash
66
+ node .tink/tools/generate-harness-lifecycle-summary.mjs
67
+ node .tink/tools/render-harness-health-report.mjs
68
+ # then open .tink/maintenance/harness-health-report.html
69
+ ```
70
+
71
+ An interactive 3D map of your harnesses, the rules and memory they use, and how they connect - each cluster gets its own color, and neural pulses travel along live relationships:
72
+
73
+ ![Tink harness map - an interactive 3D view of harnesses, rules, memory, and stages](.github/assets/dashboard-map.png)
74
+
75
+ Harness cards sorted by real usage, with plain-language health summaries, an attention score, the approval history, and a suggested next action with copy-paste commands for both Claude Code and Codex:
76
+
77
+ ![Harness cards sorted by usage with plain-language health and history](.github/assets/dashboard-harnesses.png)
78
+
79
+ No server, no telemetry, no hidden cache - it is a static local page that only prepares suggestions. Anything reusable still goes through Tink's approval gates.
80
+
81
+ ---
82
+
33
83
  ## Why I made this
34
84
 
35
85
  New coding harnesses show up almost every day. Many of them are genuinely useful.
@@ -113,19 +163,13 @@ If update does not find the latest version, uninstall and install again:
113
163
  /plugin install tink@tink-harness
114
164
  ```
115
165
 
116
- To update an existing standalone install (keeps user-modified files):
117
-
118
- ```bash
119
- npx tink-harness@latest update
120
- ```
121
-
122
- For Codex:
166
+ To update an existing standalone install (Claude Code or Codex):
123
167
 
124
168
  ```bash
125
169
  npx tink-harness@latest update
126
170
  ```
127
171
 
128
- During update, select the installed agent surface you want to refresh.
172
+ Update asks one question - which agent surface to refresh - and handles the rest automatically. Tink-owned files (commands, skills, maintenance, runtime tools) are always brought to the latest version; your customized harnesses, memory, and config are preserved.
129
173
 
130
174
  If `CODEX_HOME` is not set, Codex skills default to `%USERPROFILE%\.codex` on Windows and `~/.codex` on macOS/Linux.
131
175
 
package/VERSIONING.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Versioning
2
2
 
3
- Current version: `1.9.12`
3
+ Current version: `1.9.14`
4
4
 
5
5
  Tink follows semver from `1.0.0` onward.
6
6
 
package/bin/install.js CHANGED
@@ -124,7 +124,7 @@ function argValue(name) {
124
124
  }
125
125
 
126
126
  function usage() {
127
- console.log(`Tink installer for Claude Code and Codex\n\nUsage:\n tink-harness [install] [--scope=repo|global] [--global] [--lang=en|ko|zh] [--yes] [--with-hook] [--clean-codex-picker] [--dry-run] [--force]\n tink-harness update [--scope=repo|global] [--global] [--lang=en|ko|zh] [--yes] [--clean-codex-picker] [--dry-run] [--force]\n\nIf the command is not installed yet, use:\n npx tink-harness@latest [install]\n npx tink-harness@latest update\n\nCommands:\n install Install Tink.\n update Update Tink to the latest templates. Keeps user-modified files.\n\nDefault interactive flow:\n 1. Select language\n 2. Show TINK wizard\n 3. Select Claude Code, Codex, or both\n 4. Select components\n 5. Select repo/global installation scope\n 6. Select Advanced options\n 7. Select git tracking policy for project state\n\nAdvanced options:\n --dry-run Preview only. Show what would be written or removed, but do not change files.\n --force Overwrite user-modified files. Use only when you want official templates to replace local edits.\n --clean-codex-picker Codex-only cleanup. Remove repo-local Claude Tink surfaces that show as Source Command Tink entries.\n\nEnvironment:\n TINK_INSTALL_SURFACES=claude|codex|all\n TINK_CLEAN_CODEX_PICKER=1\n\nScopes:\n repo Install shared .tink files into the current project.\n global Install shared .tink files into your home directory.\n`);
127
+ console.log(`Tink installer for Claude Code and Codex\n\nUsage:\n tink-harness [install] [--scope=repo|global] [--global] [--lang=en|ko|zh] [--yes] [--with-hook] [--clean-codex-picker] [--dry-run] [--force]\n tink-harness update [--scope=repo|global] [--global] [--lang=en|ko|zh] [--yes] [--clean-codex-picker] [--dry-run] [--force]\n\nIf the command is not installed yet, use:\n npx tink-harness@latest [install]\n npx tink-harness@latest update\n\nCommands:\n install Install Tink.\n update Update Tink to the latest templates. Asks only the agent surface; Tink-owned files always refresh, user-modified harness/memory/config files are kept.\n\nDefault interactive flow:\n 1. Select language\n 2. Show TINK wizard\n 3. Select Claude Code, Codex, or both\n 4. Select components\n 5. Select repo/global installation scope\n 6. Select Advanced options\n 7. Select git tracking policy for project state\n\nAdvanced options:\n --dry-run Preview only. Show what would be written or removed, but do not change files.\n --force Overwrite user-modified files. Use only when you want official templates to replace local edits.\n --clean-codex-picker Codex-only cleanup. Remove repo-local Claude Tink surfaces that show as Source Command Tink entries.\n\nEnvironment:\n TINK_INSTALL_SURFACES=claude|codex|all\n TINK_CLEAN_CODEX_PICKER=1\n\nScopes:\n repo Install shared .tink files into the current project.\n global Install shared .tink files into your home directory.\n`);
128
128
  }
129
129
 
130
130
  function normalizeSurfaces(surfaces) {
@@ -383,12 +383,22 @@ function shortList(items, emptyText = '- none') {
383
383
  return shown.join('\n');
384
384
  }
385
385
 
386
+ function detectInstalledLanguage() {
387
+ try {
388
+ const config = JSON.parse(fs.readFileSync(path.join(process.cwd(), '.tink/config.json'), 'utf8'));
389
+ return ['en', 'ko', 'zh'].includes(config.language) ? config.language : null;
390
+ } catch {
391
+ return null;
392
+ }
393
+ }
394
+
386
395
  function isAlwaysUpdatePath(src) {
387
396
  const rel = path.relative(root, src).replace(/\\/g, '/');
388
397
  return rel.startsWith('templates/claude/commands/') ||
389
398
  rel.startsWith('templates/claude/skills/') ||
390
399
  rel.startsWith('templates/codex/skills/') ||
391
- rel.startsWith('templates/tink/maintenance/');
400
+ rel.startsWith('templates/tink/maintenance/') ||
401
+ rel.startsWith('templates/tink/tools/');
392
402
  }
393
403
 
394
404
  function isGeneratedLegacyRuleGraph(src, dest) {
@@ -790,6 +800,27 @@ async function resolveChoices() {
790
800
  return { agent, scope, components, gitPolicy, hookScope, language };
791
801
  }
792
802
 
803
+ if (isUpdate) {
804
+ language = detectInstalledLanguage() || language;
805
+ const copy = COPY[language];
806
+ printBanner();
807
+ intro(pc.bgBlue(pc.white(copy.intro)));
808
+ log.message(`${copy.source}: ${source}`);
809
+ agent = handleCancel(await select({
810
+ message: language === 'ko'
811
+ ? '업데이트할 agent surface를 선택하세요 (나머지는 자동으로 최신화됩니다)'
812
+ : language === 'zh'
813
+ ? '选择要更新的 agent surface(其余将自动更新到最新)'
814
+ : 'Select agent surface to update (everything else refreshes automatically)',
815
+ options: SURFACE_OPTIONS[language],
816
+ initialValue: agent
817
+ }));
818
+ components = defaultComponentValues(agent, language);
819
+ scope = scope || 'repo';
820
+ if (components.includes('hook')) hookScope = scope;
821
+ return { agent, scope, components, gitPolicy, hookScope, language };
822
+ }
823
+
793
824
  language = handleCancel(await select({
794
825
  message: COPY[language].language,
795
826
  options: [
@@ -1,86 +1,86 @@
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@latest update
38
- ```
39
-
40
- The `update` subcommand:
41
- - **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.
42
- - **Preserves if modified**: harnesses, hooks, memory, and config (`.tink/harnesses/`, `.tink/hooks/`, `.tink/memory/`, `.tink/config.json`) — respects your `weave` customizations and local settings.
43
-
44
- ## Output format (source repo)
45
-
46
- If the source-repo guard triggers, print only this and stop — do not present plugin or npx commands:
47
-
48
- ```text
49
- ### 🧶 Tink 업데이트 안내
50
-
51
- 이 디렉토리는 tink-harness **소스 리포지토리**입니다. 일반 사용자 업데이트 대상이 아니에요.
52
-
53
- - 개발 변경 반영: `git pull` 후 일반적인 빌드/테스트 흐름을 사용하세요.
54
- - 사용자 환경에서 업데이트 흐름을 검증하려면 별도의 프로젝트 디렉토리에서 이 명령을 실행하세요.
55
- ```
56
-
57
- ## Output format
58
-
59
- ```text
60
- ### 🧶 Tink 업데이트 안내
61
-
62
- **설치 경로**: <plugin marketplace | npx standalone>
63
-
64
- **항상 업데이트됨**: commands, skills, maintenance (최신 버전으로 자동 반영)
65
-
66
- **사용자 수정 파일** (업데이트 시 보존):
67
- - <path1>
68
- - <path2>
69
- - (보존할 파일 없음)
70
-
71
- **업데이트 명령**:
72
- <command lines>
73
-
74
- ? 어떻게 할까요?
75
- 1. 위 명령 복사해서 직접 실행
76
- 2. 변경 사항 미리 보기 (`npx tink-harness update --dry-run`) ← npx standalone에서만 표시
77
- 3. 취소
78
- ```
79
-
80
- 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).
81
-
82
- ## Do not
83
- - Do not actually run the update command — show it for the user to run in their shell or Claude Code.
84
- - Do not modify `.tink/` files during diagnosis.
85
- - Do not bypass the user choice; always offer cancel.
86
- - 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.
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/`, `.tink/tools/` — 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@latest update
38
+ ```
39
+
40
+ The `update` subcommand asks only one question - which agent surface to refresh (Claude Code, Codex, or both). Everything else updates automatically:
41
+ - **Always overwrites**: commands, skills, maintenance, and runtime tools (`.claude/commands/tink/`, `.claude/skills/tink/`, `.tink/maintenance/`, `.tink/tools/`) — so you get the latest harness runner, report tools, and command behavior automatically.
42
+ - **Preserves if modified**: harnesses, hooks, memory, and config (`.tink/harnesses/`, `.tink/hooks/`, `.tink/memory/`, `.tink/config.json`) — respects your `weave` customizations and local settings.
43
+
44
+ ## Output format (source repo)
45
+
46
+ If the source-repo guard triggers, print only this and stop — do not present plugin or npx commands:
47
+
48
+ ```text
49
+ ### 🧶 Tink 업데이트 안내
50
+
51
+ 이 디렉토리는 tink-harness **소스 리포지토리**입니다. 일반 사용자 업데이트 대상이 아니에요.
52
+
53
+ - 개발 변경 반영: `git pull` 후 일반적인 빌드/테스트 흐름을 사용하세요.
54
+ - 사용자 환경에서 업데이트 흐름을 검증하려면 별도의 프로젝트 디렉토리에서 이 명령을 실행하세요.
55
+ ```
56
+
57
+ ## Output format
58
+
59
+ ```text
60
+ ### 🧶 Tink 업데이트 안내
61
+
62
+ **설치 경로**: <plugin marketplace | npx standalone>
63
+
64
+ **항상 업데이트됨**: commands, skills, maintenance, tools (최신 버전으로 자동 반영)
65
+
66
+ **사용자 수정 파일** (업데이트 시 보존):
67
+ - <path1>
68
+ - <path2>
69
+ - (보존할 파일 없음)
70
+
71
+ **업데이트 명령**:
72
+ <command lines>
73
+
74
+ ? 어떻게 할까요?
75
+ 1. 위 명령 복사해서 직접 실행
76
+ 2. 변경 사항 미리 보기 (`npx tink-harness update --dry-run`) ← npx standalone에서만 표시
77
+ 3. 취소
78
+ ```
79
+
80
+ 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).
81
+
82
+ ## Do not
83
+ - Do not actually run the update command — show it for the user to run in their shell or Claude Code.
84
+ - Do not modify `.tink/` files during diagnosis.
85
+ - Do not bypass the user choice; always offer cancel.
86
+ - 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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tink-harness",
3
- "version": "1.9.12",
3
+ "version": "1.9.14",
4
4
  "description": "Self-growing harnesses for Claude Code and Codex.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,86 +1,86 @@
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@latest update
38
- ```
39
-
40
- The `update` subcommand:
41
- - **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.
42
- - **Preserves if modified**: harnesses, hooks, memory, and config (`.tink/harnesses/`, `.tink/hooks/`, `.tink/memory/`, `.tink/config.json`) — respects your `weave` customizations and local settings.
43
-
44
- ## Output format (source repo)
45
-
46
- If the source-repo guard triggers, print only this and stop — do not present plugin or npx commands:
47
-
48
- ```text
49
- ### 🧶 Tink 업데이트 안내
50
-
51
- 이 디렉토리는 tink-harness **소스 리포지토리**입니다. 일반 사용자 업데이트 대상이 아니에요.
52
-
53
- - 개발 변경 반영: `git pull` 후 일반적인 빌드/테스트 흐름을 사용하세요.
54
- - 사용자 환경에서 업데이트 흐름을 검증하려면 별도의 프로젝트 디렉토리에서 이 명령을 실행하세요.
55
- ```
56
-
57
- ## Output format
58
-
59
- ```text
60
- ### 🧶 Tink 업데이트 안내
61
-
62
- **설치 경로**: <plugin marketplace | npx standalone>
63
-
64
- **항상 업데이트됨**: commands, skills, maintenance (최신 버전으로 자동 반영)
65
-
66
- **사용자 수정 파일** (업데이트 시 보존):
67
- - <path1>
68
- - <path2>
69
- - (보존할 파일 없음)
70
-
71
- **업데이트 명령**:
72
- <command lines>
73
-
74
- ? 어떻게 할까요?
75
- 1. 위 명령 복사해서 직접 실행
76
- 2. 변경 사항 미리 보기 (`npx tink-harness update --dry-run`) ← npx standalone에서만 표시
77
- 3. 취소
78
- ```
79
-
80
- 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).
81
-
82
- ## Do not
83
- - Do not actually run the update command — show it for the user to run in their shell or Claude Code.
84
- - Do not modify `.tink/` files during diagnosis.
85
- - Do not bypass the user choice; always offer cancel.
86
- - 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.
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/`, `.tink/tools/` — 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@latest update
38
+ ```
39
+
40
+ The `update` subcommand asks only one question - which agent surface to refresh (Claude Code, Codex, or both). Everything else updates automatically:
41
+ - **Always overwrites**: commands, skills, maintenance, and runtime tools (`.claude/commands/tink/`, `.claude/skills/tink/`, `.tink/maintenance/`, `.tink/tools/`) — so you get the latest harness runner, report tools, and command behavior automatically.
42
+ - **Preserves if modified**: harnesses, hooks, memory, and config (`.tink/harnesses/`, `.tink/hooks/`, `.tink/memory/`, `.tink/config.json`) — respects your `weave` customizations and local settings.
43
+
44
+ ## Output format (source repo)
45
+
46
+ If the source-repo guard triggers, print only this and stop — do not present plugin or npx commands:
47
+
48
+ ```text
49
+ ### 🧶 Tink 업데이트 안내
50
+
51
+ 이 디렉토리는 tink-harness **소스 리포지토리**입니다. 일반 사용자 업데이트 대상이 아니에요.
52
+
53
+ - 개발 변경 반영: `git pull` 후 일반적인 빌드/테스트 흐름을 사용하세요.
54
+ - 사용자 환경에서 업데이트 흐름을 검증하려면 별도의 프로젝트 디렉토리에서 이 명령을 실행하세요.
55
+ ```
56
+
57
+ ## Output format
58
+
59
+ ```text
60
+ ### 🧶 Tink 업데이트 안내
61
+
62
+ **설치 경로**: <plugin marketplace | npx standalone>
63
+
64
+ **항상 업데이트됨**: commands, skills, maintenance, tools (최신 버전으로 자동 반영)
65
+
66
+ **사용자 수정 파일** (업데이트 시 보존):
67
+ - <path1>
68
+ - <path2>
69
+ - (보존할 파일 없음)
70
+
71
+ **업데이트 명령**:
72
+ <command lines>
73
+
74
+ ? 어떻게 할까요?
75
+ 1. 위 명령 복사해서 직접 실행
76
+ 2. 변경 사항 미리 보기 (`npx tink-harness update --dry-run`) ← npx standalone에서만 표시
77
+ 3. 취소
78
+ ```
79
+
80
+ 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).
81
+
82
+ ## Do not
83
+ - Do not actually run the update command — show it for the user to run in their shell or Claude Code.
84
+ - Do not modify `.tink/` files during diagnosis.
85
+ - Do not bypass the user choice; always offer cancel.
86
+ - 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.