tink-harness 1.9.21 → 1.10.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/plugin.json +1 -1
- package/CHANGELOG.md +13 -2
- package/README.ko.md +27 -16
- package/README.md +28 -19
- package/VERSIONING.md +1 -1
- package/bin/install.js +144 -8
- package/commands/cast.md +81 -31
- package/commands/frog.md +9 -1
- package/commands/list.md +104 -104
- package/commands/setup.md +1 -1
- package/commands/update.md +1 -0
- package/commands/weave.md +32 -4
- package/package.json +1 -1
- package/templates/claude/commands/tink/cast.md +81 -31
- package/templates/claude/commands/tink/frog.md +9 -1
- package/templates/claude/commands/tink/list.md +104 -104
- package/templates/claude/commands/tink/setup.md +1 -1
- package/templates/claude/commands/tink/update.md +1 -0
- package/templates/claude/commands/tink/weave.md +32 -4
- package/templates/codex/skills/tink-core/RULES.md +7 -7
- package/templates/tink/harnesses/HARNESS.md +4 -5
- package/templates/tink/harnesses/index.json +0 -75
- package/templates/tink/rules/index.json +0 -28
- package/templates/tink/harnesses/bug-fix.md +0 -31
- package/templates/tink/harnesses/code-change.md +0 -30
- package/templates/tink/harnesses/docs.md +0 -30
- package/templates/tink/harnesses/research.md +0 -31
- package/templates/tink/harnesses/review.md +0 -31
|
@@ -42,7 +42,7 @@ Map prompt content to `AskUserQuestion` fields:
|
|
|
42
42
|
- `description`: explanatory text for the option
|
|
43
43
|
|
|
44
44
|
Label quality rules:
|
|
45
|
-
- Use short, common, readable labels only. Good Korean labels are `승인`, `조정`, `취소`, `요구사항 입력`, `기본
|
|
45
|
+
- Use short, common, readable labels only. Good Korean labels are `승인`, `조정`, `취소`, `요구사항 입력`, `기본 절차만 사용`, `새 하네스 초안 만들기`, `구조 점검`, `내용 점검`, `전체 점검`.
|
|
46
46
|
- Do not invent compressed Korean labels, transliterated fragments, or unclear summaries such as `콘데의달 지질`.
|
|
47
47
|
- If the idea is too specific for a clean 1-5 word label, put the detail in `description` and use a generic label such as `내용 점검` or `전체 점검`.
|
|
48
48
|
- Before calling `AskUserQuestion`, reread each Korean label. If it looks misspelled, unnatural, or semantically unclear, replace it with a plain fallback label.
|
|
@@ -282,11 +282,11 @@ Candidate limits:
|
|
|
282
282
|
- Add more only when each extra entry changes the first action, verification, or safety boundary.
|
|
283
283
|
- Do not load entire directories unless the directory itself is the artifact under review.
|
|
284
284
|
|
|
285
|
-
Also append a compact run record to `.tink/runs/YYYY-MM-DD-HHMM-<slug>.md` when the task completes, is canceled, is blocked, or is superseded. Do not store secrets, raw logs, full diffs, or one-off private context.
|
|
285
|
+
Also append a compact run record to `.tink/runs/YYYY-MM-DD-HHMM-<slug>.md` when the task completes, is canceled, is blocked, or is superseded. Do not store secrets, raw logs, full diffs, or one-off private context. If a run-only draft harness was used, record its name and its 2-4 domain rules compactly in the run record - `/tink:weave` treats drafts that repeat across runs as promotion candidates.
|
|
286
286
|
|
|
287
287
|
When appending a run record, also append a signal to `.tink/maintenance/weave-queue.json` if it exists:
|
|
288
288
|
```json
|
|
289
|
-
{ "id": "signal-<run_id>", "harness": "<primary_selected_harness>", "run": ".tink/runs/<slug>.md", "signal": "<outcome>", "auto": true, "timestamp": "<ISO>" }
|
|
289
|
+
{ "id": "signal-<run_id>", "harness": "<primary_selected_harness or base-run>", "run": ".tink/runs/<slug>.md", "signal": "<outcome>", "auto": true, "timestamp": "<ISO>" }
|
|
290
290
|
```
|
|
291
291
|
Use `check_failed` as the signal when any check in `checks.md` did not pass; otherwise use the run outcome (`completed`, `blocked`, `canceled`, or `superseded`). Do not create `.tink/maintenance/weave-queue.json` if it does not exist — only append when it is already present.
|
|
292
292
|
|
|
@@ -376,10 +376,10 @@ Lane 1 behavior:
|
|
|
376
376
|
- If the work changed files, append a compact run record on completion; pure Q&A needs no record.
|
|
377
377
|
- If the task turns out bigger mid-work, stop, say so in one line, and re-enter triage as Lane 2 or 3 with what was learned.
|
|
378
378
|
|
|
379
|
-
**Lane 2 — light
|
|
379
|
+
**Lane 2 — light run.** Small but multi-step work: roughly 2-3 files, no architecture or contract decisions, no ambiguity worth an interview. At most one obvious specialized harness fits - often none, and the base run is enough.
|
|
380
380
|
|
|
381
381
|
Lane 2 behavior:
|
|
382
|
-
- Announce the chosen harness in one line, create minimal run state (`steps.json` plus a short `plan.md`), and execute the first safe step in the same response.
|
|
382
|
+
- Announce the chosen harness or the base run in one line, create minimal run state (`steps.json` plus a short `plan.md`), and execute the first safe step in the same response.
|
|
383
383
|
- Do not ask an approval question for soft-gate work; state the working assumption inline (`범위가 다르면 말씀 주세요` / `Tell me if the scope is different`) and keep moving.
|
|
384
384
|
- Stitch runs silently and surfaces only hard gates.
|
|
385
385
|
|
|
@@ -408,6 +408,43 @@ Rule: while such a run is active, END every assistant response with a progress b
|
|
|
408
408
|
- On run completion, show the final 100% bar once with `✅` instead of `다음`.
|
|
409
409
|
- Never skip the block because a response feels small; if the response is blocked, the block shows where work stopped.
|
|
410
410
|
|
|
411
|
+
**Full progress view.** The compact block above is the every-response footer. At key moments, show the full map instead, so the user can plan how far to go today:
|
|
412
|
+
|
|
413
|
+
- right after the plan is first created or restructured,
|
|
414
|
+
- right after a goal/phase completes,
|
|
415
|
+
- on the first response after resuming a run, and
|
|
416
|
+
- whenever the user asks about progress or the plan.
|
|
417
|
+
|
|
418
|
+
```text
|
|
419
|
+
📊 전체 진행 상황
|
|
420
|
+
✅ Phase 0 nav graph ▓▓▓▓▓▓▓▓▓▓ 100%
|
|
421
|
+
▶ Phase 1 Section Index ░░░░░░░░░░ 0% ← 지금
|
|
422
|
+
Phase 2 Block Index ░░░░░░░░░░ 0%
|
|
423
|
+
Phase 3 query + aliases ░░░░░░░░░░ 0%
|
|
424
|
+
──────────────────────────────────────
|
|
425
|
+
전체 ▓▓▓░░░░░░░ 25% · 4개 중 1개 완료
|
|
426
|
+
|
|
427
|
+
▶ Phase 1 세부
|
|
428
|
+
✅ [1/4] build-block-index.mjs 작성
|
|
429
|
+
▶ [2/4] sections/*.jsonl 생성 ← 지금
|
|
430
|
+
[3/4] validate-index.mjs 기본 구조
|
|
431
|
+
[4/4] line range 검증
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
- One row per goal/phase with its own 10-cell bar; mark completed rows `✅`, the active row `▶` plus `← 지금`. Below the divider, the same overall bar as the compact block.
|
|
435
|
+
- The detail block lists the active phase's steps with `✅`/`▶`/blank markers - no mini bars; the markers carry the state.
|
|
436
|
+
- Keep alignment tolerant: pad with two or more spaces instead of strict columns, because mixed Korean/English widths break exact tables.
|
|
437
|
+
- The full view replaces the compact block in that response; the next response returns to the compact footer.
|
|
438
|
+
|
|
439
|
+
## Base run (no harness)
|
|
440
|
+
Generic task-type harnesses (`code-change`, `bug-fix`, `research`, `review`, `docs`) are retired from the default set. Generic work runs as a **base run**: the run state contract alone - `plan.md`, `checks.md`, `steps.json`, `contract.json` - already enforces scope, verification commands, and evidence for ordinary code, bug, research, review, and docs work.
|
|
441
|
+
|
|
442
|
+
- Select a harness only when its specialized procedure changes what would actually happen: visible-thinking overlays (`requirements-interview`, `plan-consensus`, `goal-checkpoint`, `delegation-brief`), risk gates (`ship`, `pre-publish-multi-agent-verify`, `pr-merge`), meta harnesses (`harness-curation`, `harness-synthesis`), `tink-feedback-apply`, or user-created and synthesized domain harnesses.
|
|
443
|
+
- Never force a loose-fit harness just to show a harness name. "No harness" is a valid and common selection.
|
|
444
|
+
- In user-facing output call this `기본 절차` (Korean) or `base run` (English), with one short explanation line such as `기본 절차로 진행합니다 - 별도 하네스 없이 실행 상태 계약(계획·검증·증거)만 사용`.
|
|
445
|
+
- The base run does not weaken anything: contract checks, Stitch, overlay rules, and the progress display still apply unchanged.
|
|
446
|
+
- If a legacy install still has the retired generic harnesses, do not select them; treat the task as a base run and let `/tink:update` or `/tink:frog` clean them up.
|
|
447
|
+
|
|
411
448
|
## Procedure
|
|
412
449
|
This is the Lane 3 full path from Quick triage. Lanes 1 and 2 intentionally skip most of it.
|
|
413
450
|
|
|
@@ -435,12 +472,19 @@ This is the Lane 3 full path from Quick triage. Lanes 1 and 2 intentionally skip
|
|
|
435
472
|
- docs
|
|
436
473
|
- ship/release
|
|
437
474
|
- new pattern not covered yet
|
|
475
|
+
|
|
476
|
+
These are task types, not harness names. Generic types (code change, bug fix, research, review, docs) default to the base run; a harness is added only when a specialized one genuinely fits.
|
|
438
477
|
6. Consider GJC-style visible-thinking overlays as normal Tink harnesses, not as new command surfaces:
|
|
439
478
|
- If the request is an ambiguous idea, early product concept, or underspecified implementation prompt, prefer `requirements-interview` before planning or coding. This is the default harness when Stitch is expected to trigger for goal ambiguity or missing acceptance criteria.
|
|
440
479
|
- If the request asks for a plan, architecture decision, large refactor, migration, or broad public contract change, consider `plan-consensus`.
|
|
441
480
|
- If the work naturally splits into multiple durable milestones, add `goal-checkpoint` and create `.tink/current/goals.json` after approval.
|
|
442
481
|
- If parallel review, independent verification, or handoff would reduce risk, add `delegation-brief` and create `.tink/current/delegation.md` after approval. This harness prepares briefs only; it never starts tmux, worktrees, workers, or external agents.
|
|
443
|
-
|
|
482
|
+
|
|
483
|
+
**Overlay selection is rule-bound, not taste.** After drafting the Goals list for the approval payload, re-check before presenting it:
|
|
484
|
+
- `goal-checkpoint` is REQUIRED (not optional) when ANY of these is true: the Goals list has 2+ goals; 2+ harnesses run sequentially; the plan is expected to need 4+ steps; or the work spans multiple components/directories. Create `goals.json` after approval.
|
|
485
|
+
- `plan-consensus` must be explicitly considered for any from-scratch implementation, reimplementation, migration, or public contract/API design. If skipped, record a one-line reason in the 오버레이 점검 line.
|
|
486
|
+
- The context budget and the "prefer 1-3 harnesses" guidance never justify dropping a REQUIRED overlay: overlays are cheap state files, not extra loaded context. A large task judged "fine with default harnesses" because the synthesis probe found a fit is a selection bug - the probe only answers whether a custom procedure is needed, not whether overlays are needed.
|
|
487
|
+
7. Pick the smallest effective set using the context budget policy below: the base run plus 0-3 specialized harnesses. When no specialized harness fits, select the base run alone - do not force a generic fit. Do not use a hard cap when several tiny harnesses add useful checks without crowding context. When the task is ambiguous (Stitch goal-ambiguity is expected to trigger), start with `requirements-interview` alone; add a second harness only after the user clarifies. Do not bundle 2+ harnesses for ambiguous tasks upfront.
|
|
444
488
|
|
|
445
489
|
After selecting, run a quick quality check using the index metadata for each chosen harness:
|
|
446
490
|
- If fewer than 2 words in `use_when` match the current task description (case-insensitive) → treat as a Stitch harness-mismatch signal
|
|
@@ -452,7 +496,7 @@ This is the Lane 3 full path from Quick triage. Lanes 1 and 2 intentionally skip
|
|
|
452
496
|
9. Add opt-in guard candidates to `notes.md` only as suggestions. Do not register enforcement hooks unless the user separately approves.
|
|
453
497
|
10. 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).
|
|
454
498
|
11. If the probe finds no fit, load `harness-synthesis` and draft a domain-specific harness for this run instead of forcing a bad fit.
|
|
455
|
-
12. If the probe finds a generic fit (2-3 yes), propose a run-only draft harness or domain rules alongside the
|
|
499
|
+
12. If the probe finds a generic fit (2-3 yes), propose a run-only draft harness or domain rules alongside the base run or selected harness. Do not save it by default.
|
|
456
500
|
13. If too many tools, skills, agents, or harnesses are available, load `harness-curation` and choose the smallest effective set before loading more context.
|
|
457
501
|
14. If lightweight signals show a recurring operating habit, use `harness-curation` (its habit calibration section) to make one advisory recommendation without loading a separate body.
|
|
458
502
|
15. If the user points to research, notes, examples, prior failures, or "what I learned today", synthesize from those inputs. Extract behavior-shaping rules and reusable procedure, not a summary.
|
|
@@ -471,17 +515,17 @@ This is the Lane 3 full path from Quick triage. Lanes 1 and 2 intentionally skip
|
|
|
471
515
|
|
|
472
516
|
|
|
473
517
|
## Synthesis probe
|
|
474
|
-
Run this short probe even when
|
|
518
|
+
Run this short probe even when the base run or an existing harness seems sufficient. It prevents broad defaults from hiding repeatable domain workflows.
|
|
475
519
|
|
|
476
520
|
Answer yes/no:
|
|
477
521
|
1. Is this likely to recur in this repo, product, customer segment, release process, or personal workflow?
|
|
478
522
|
2. Would a domain-specific rule change the first action, the order of steps, the stop condition, or the verification evidence?
|
|
479
|
-
3. Is the selected
|
|
523
|
+
3. Is the base run or selected harness only a loose or generic fit for this domain?
|
|
480
524
|
4. Did the user correction, prior run note, failed check, research source, or named project context expose a reusable rule?
|
|
481
525
|
5. Would a one-screen draft reduce future context or repeated explanation?
|
|
482
526
|
|
|
483
527
|
Decision:
|
|
484
|
-
- 0-1 yes:
|
|
528
|
+
- 0-1 yes: proceed with the base run or selected harness set as-is. Record why no draft is needed if relevant.
|
|
485
529
|
- 2-3 yes: propose a run-only draft harness. It applies to this run, is written into `.tink/current/plan.md` or `notes.md`, and is not saved by default.
|
|
486
530
|
- 4-5 yes: propose a run-only draft now and ask whether it should become a save candidate after the run. Saving still needs the approval payload.
|
|
487
531
|
|
|
@@ -490,7 +534,7 @@ Run-only draft format:
|
|
|
490
534
|
```text
|
|
491
535
|
임시 하네스 초안 (이번 작업 전용):
|
|
492
536
|
- name: <specific-lowercase-name>
|
|
493
|
-
- why not
|
|
537
|
+
- why base run is not enough: <one sentence>
|
|
494
538
|
- domain rules: <2-4 bullets that change execution>
|
|
495
539
|
- checks: <2-4 evidence checks>
|
|
496
540
|
- save policy: 이번 run에는 적용, 저장은 반복 근거와 별도 승인 후만
|
|
@@ -528,8 +572,10 @@ Use concise, selection-oriented wording. The recommendation must include the fir
|
|
|
528
572
|
|
|
529
573
|
User-facing approval wording:
|
|
530
574
|
- Do not show internal terms such as `Probe`, `probe`, `합성 프로브`, `generic fit`, `제너릭 fit`, or `Stitch`.
|
|
531
|
-
- Translate the synthesis probe result as `맞춤 절차 판단`.
|
|
532
|
-
- Translate `generic fit` as `기본
|
|
575
|
+
- Translate the synthesis probe result as `맞춤 절차 판단`. Its "sufficient" verdict must read `별도 맞춤 절차는 불필요` - never `기본 하네스로 충분`, which wrongly implies the whole harness SET was judged sufficient. The probe only decides whether a custom synthesized procedure is needed.
|
|
576
|
+
- Translate `generic fit` as `기본 절차는 큰 틀만 맞음` or `기본 절차만으로는 부족함`.
|
|
577
|
+
- When no harness is selected, show `**🛠️ 선택한 하네스**: 기본 절차(하네스 없음)` with one short phrase about what the base run provides. Do not invent a harness name to fill the line.
|
|
578
|
+
- Always include an `**오버레이 점검:**` line in the approval payload: one verdict per overlay harness that the rule-bound check makes relevant, e.g. `goal-checkpoint 선택(목표 3개·순차 2단계) · plan-consensus 제외(문서 보완은 기존 계약 범위)`. An omitted overlay without a reason is a selection bug.
|
|
533
579
|
- Translate visible Stitch output as `확인할 점`, not `Stitch 점검`.
|
|
534
580
|
- Explain what each selected harness does in one short phrase before asking for approval.
|
|
535
581
|
- Show a short `하네스 선택 과정` when more than one harness or a run-only draft is selected: candidate considered, selected harnesses, and why each was chosen.
|
|
@@ -537,7 +583,7 @@ User-facing approval wording:
|
|
|
537
583
|
|
|
538
584
|
Approval option counts (always exactly one applies):
|
|
539
585
|
- Default (no Stitch, no run-only draft): 4 options — 승인 / 조정 / 새 하네스 초안 만들기 / 취소
|
|
540
|
-
- Run-only draft offered: 4 options — 승인 / 조정 / 기본
|
|
586
|
+
- Run-only draft offered: 4 options — 승인 / 조정 / 기본 절차만 사용 / 취소
|
|
541
587
|
- Stitch soft gate: 4 options — 승인 / 요구사항 입력 / 이대로 진행 / 취소
|
|
542
588
|
- Stitch hard gate (or Save Gate): 3 options — 승인 / 요구사항 입력 / 취소. Never offer `이대로 진행` / `Continue as-is`.
|
|
543
589
|
|
|
@@ -547,16 +593,17 @@ Approval option counts (always exactly one applies):
|
|
|
547
593
|
**🎯 Goals**
|
|
548
594
|
- <goal>
|
|
549
595
|
|
|
550
|
-
**🛠️ 선택한 하네스**:
|
|
551
|
-
-
|
|
552
|
-
- `
|
|
596
|
+
**🛠️ 선택한 하네스**: 기본 절차 + `goal-checkpoint`
|
|
597
|
+
- 기본 절차: 별도 하네스 없이 실행 상태 계약(계획·검증·증거)으로 진행
|
|
598
|
+
- `goal-checkpoint`: 긴 작업을 목표 단위로 나눠 완료 증거를 남기는 하네스
|
|
553
599
|
|
|
554
600
|
**하네스 선택 과정**
|
|
555
|
-
- 후보: `
|
|
556
|
-
- 선택:
|
|
557
|
-
- 이유:
|
|
601
|
+
- 후보: 기본 절차, `goal-checkpoint`, `harness-synthesis`
|
|
602
|
+
- 선택: 기본 절차 + `goal-checkpoint`
|
|
603
|
+
- 이유: 일반 코드 변경이라 특화 하네스는 불필요하고, 목표가 2개 이상이라 goal-checkpoint가 필수입니다.
|
|
558
604
|
|
|
559
|
-
-
|
|
605
|
+
- **오버레이 점검:** <예: goal-checkpoint 선택(목표 2개) · plan-consensus 제외(범위 좁음)>
|
|
606
|
+
- **맞춤 절차 판단:** 별도 맞춤 절차는 불필요
|
|
560
607
|
- **첫 실행:** 관련 파일을 먼저 읽고 검증 명령 후보를 확정합니다.
|
|
561
608
|
|
|
562
609
|
? 진행할까요?
|
|
@@ -574,20 +621,22 @@ If a run-only draft or new harness is useful:
|
|
|
574
621
|
**🎯 Goals**
|
|
575
622
|
- <goal>
|
|
576
623
|
|
|
577
|
-
**🛠️ 선택한 하네스**:
|
|
578
|
-
-
|
|
624
|
+
**🛠️ 선택한 하네스**: 기본 절차 + 임시 초안
|
|
625
|
+
- 기본 절차: 실행 상태 계약으로 작업 큰 틀을 잡음
|
|
579
626
|
- `customer-interview-synthesis`: 이번 작업의 인터뷰 분석 순서를 보강하는 임시 초안
|
|
580
627
|
|
|
581
628
|
**하네스 선택 과정**
|
|
582
|
-
- 후보:
|
|
583
|
-
- 선택:
|
|
584
|
-
- 이유: 기본
|
|
629
|
+
- 후보: 기본 절차, `harness-synthesis`, `customer-interview-synthesis`
|
|
630
|
+
- 선택: 기본 절차 + `customer-interview-synthesis`
|
|
631
|
+
- 이유: 기본 절차는 큰 틀만 맞고, 인터뷰 원문 근거와 pain point 구분은 별도 절차가 필요합니다.
|
|
632
|
+
|
|
633
|
+
**오버레이 점검:** <상동 형식>
|
|
585
634
|
|
|
586
|
-
**맞춤 절차 판단:** 기본
|
|
635
|
+
**맞춤 절차 판단:** 기본 절차만으로는 부족함
|
|
587
636
|
|
|
588
637
|
**임시 하네스 초안** (이번 작업 전용):
|
|
589
638
|
- **name:** `customer-interview-synthesis`
|
|
590
|
-
- **why not
|
|
639
|
+
- **why base run is not enough:** 기본 절차보다 인터뷰 단위, 원문 근거, pain point 반복성이 중요합니다.
|
|
591
640
|
- **domain rules:**
|
|
592
641
|
- 인터뷰별 원문 근거를 먼저 분리
|
|
593
642
|
- 반복 pain point와 단발 의견을 구분
|
|
@@ -596,9 +645,9 @@ If a run-only draft or new harness is useful:
|
|
|
596
645
|
- **save policy:** 이번 run에는 적용, 저장은 반복 근거와 별도 승인 후만
|
|
597
646
|
|
|
598
647
|
? 진행할까요?
|
|
599
|
-
❯ 1. 승인 (권장) — 기본
|
|
648
|
+
❯ 1. 승인 (권장) — 기본 절차 + 임시 초안으로 `.tink/current/` 생성
|
|
600
649
|
2. 조정
|
|
601
|
-
3. 기본
|
|
650
|
+
3. 기본 절차만 사용
|
|
602
651
|
4. 취소
|
|
603
652
|
```
|
|
604
653
|
|
|
@@ -623,7 +672,8 @@ If Stitch triggers as a soft gate, merge it into the approval format. The user-f
|
|
|
623
672
|
- 선택: `<harness>`
|
|
624
673
|
- 이유: <why selected>
|
|
625
674
|
|
|
626
|
-
-
|
|
675
|
+
- **오버레이 점검:** <overlay별 선택/제외와 이유>
|
|
676
|
+
- **맞춤 절차 판단:** <별도 맞춤 절차는 불필요 | 기본 절차만으로는 부족함 | 새 맞춤 절차 필요>
|
|
627
677
|
- **이유:** ...
|
|
628
678
|
- **첫 실행:** ...
|
|
629
679
|
|
|
@@ -50,17 +50,25 @@ Use Korean field values when `.tink/config.json` language is `ko` or `auto` with
|
|
|
50
50
|
- weak: static index, git-only evidence, stale current notes, or model judgment
|
|
51
51
|
If a lifecycle summary is present, treat it as a health summary, not as authority. Use its `confidence`, `evidence_grade`, `evidence_handles`, and `safe_next_action` to explain the recommendation. A low-confidence or weak lifecycle entry must default to `keep`, `observe`, or `needs evidence`.
|
|
52
52
|
Sort lifecycle-backed candidates first by evidence strength, then by recommendation: `frog_candidate`, `merge_candidate`, `weave`, `observe`, `keep`.
|
|
53
|
+
4b. When invoked without a specific target, the health summary's judgment IS the default agenda - do not wait for the user to name harnesses:
|
|
54
|
+
- every harness whose lifecycle recommendation is `frog_candidate`, `merge_candidate`, or `weave` appears in the proposal with its evidence grade and reason;
|
|
55
|
+
- harnesses judged `keep` or `observe` are compressed into one line (`그 외 N개: 유지/관찰`);
|
|
56
|
+
- the same applies to overlap findings (겹침 점검): harnesses flagged as overlapping each other are proposed as one merge/retire group, not listed separately.
|
|
57
|
+
4c. Check for retired generic built-ins. `code-change`, `bug-fix`, `research`, `review`, and `docs` were retired from the default set - generic work now runs on the base run without a harness. If any of them remain in `.tink/harnesses/`:
|
|
58
|
+
- unmodified leftovers: recommend `npx tink-harness@latest update`, which removes them automatically; offer direct removal only as the fallback when update is not possible;
|
|
59
|
+
- user-modified leftovers (preserved by update): propose either narrowing them into a clearly-named user harness (specific `use_when`, `kind: "synthesized"`) or deleting them, with the user's modifications quoted as evidence.
|
|
53
60
|
5. Identify candidates:
|
|
54
61
|
- never used with strong evidence
|
|
55
62
|
- not used recently with strong evidence
|
|
56
63
|
- overlaps strongly with another harness
|
|
57
|
-
- too broad to guide behavior
|
|
64
|
+
- too broad to guide behavior (a generic-purpose harness is a retirement candidate by default policy: the default set is specialized-only)
|
|
58
65
|
- repeatedly ignored during `/tink:cast`
|
|
59
66
|
6. For each candidate, show evidence grade and recommendation:
|
|
60
67
|
- keep
|
|
61
68
|
- merge into another harness
|
|
62
69
|
- delete
|
|
63
70
|
- rewrite via `/tink:weave`
|
|
71
|
+
6a. If `.tink/memory/candidate/` exists, also review stale draft entries: a candidate with no supporting run, ledger, or friction evidence after 30+ days, or one superseded by an approved memory or harness change, should be proposed for a move to `.tink/memory/rejected/` with a one-line reason. Promotion of live candidates belongs to `/tink:weave`; frog only clears the stale ones. Apply the same approval rules as other operations.
|
|
64
72
|
6b. If `.tink/rules/index.json` exists, also inspect rule quality:
|
|
65
73
|
- keep: concrete `when`, `reason`, and useful `checks` or `include_paths`
|
|
66
74
|
- rewrite: too broad, unclear reason, or missing verification
|
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Inspect available Tink harnesses and recent usage signals.
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# /tink:list
|
|
6
|
-
|
|
7
|
-
List available Tink harnesses without loading every harness body.
|
|
8
|
-
|
|
9
|
-
## Procedure
|
|
10
|
-
1. Read `.tink/harnesses/index.json`.
|
|
11
|
-
2. Read only compact usage metadata from `.tink/runs/` (frontmatter `selected_harnesses` / `actually_loaded_harnesses` + dates), `.tink/maintenance/ledger.jsonl`, and `.tink/maintenance/weave-queue.json`. Do not load raw logs.
|
|
12
|
-
3. Treat `.tink/current/` as weak evidence unless it is clearly from the same active conversation. If context is uncertain, label it `stale current candidate`, not proof of usage.
|
|
13
|
-
4. Classify every harness into exactly one of three categories:
|
|
14
|
-
- **working** — directly performs tasks (e.g. `
|
|
15
|
-
- **meta** — manages other harnesses or Tink itself. Treat these names as meta regardless of `kind`: `harness-synthesis`, `harness-curation`, `tink-feedback-apply`.
|
|
16
|
-
- **custom (this repo)** — `kind: synthesized` in `index.json` (created in this repo, not part of the default set). If a synthesized harness also matches a meta name, prefer meta.
|
|
17
|
-
5. Compute the signal per harness:
|
|
18
|
-
- 🟢 **active** — appears in any `.tink/runs/*.md` frontmatter or `.tink/maintenance/ledger.jsonl` entry.
|
|
19
|
-
- ⚪ **unknown** — no run/ledger/memory evidence. Do not call it `quiet` or `candidate for purge` from the static index alone. Do not infer non-use from missing evidence.
|
|
20
|
-
6. Show all three categories every time, even when one is empty. For an empty category, render `_(아직 없음)_` (or the English equivalent if the project language is `en`) instead of an item list.
|
|
21
|
-
7. Do not output the `evidence` field. Usage is now compressed into `signal`.
|
|
22
|
-
|
|
23
|
-
## Output format
|
|
24
|
-
|
|
25
|
-
Always start with a header block that defines the fields and categories. Render each harness as a multi-line block — one field per line, never collapsed onto one line. Close with an assessment and command suggestions.
|
|
26
|
-
|
|
27
|
-
Use this exact skeleton (translate field labels and descriptions to the language in `.tink/config.json`):
|
|
28
|
-
|
|
29
|
-
````markdown
|
|
30
|
-
### 🧶 Tink 하네스 목록
|
|
31
|
-
|
|
32
|
-
> **필드 설명**
|
|
33
|
-
> - **purpose** — 이 하네스가 다루는 작업
|
|
34
|
-
> - **context** — Claude 컨텍스트 점유량
|
|
35
|
-
> · `tiny` 아주 짧음 · `small` 보통 체크리스트 · `large` 별도 승인 후 읽는 큰 하네스
|
|
36
|
-
> - **last used** — 가장 최근 실행 날짜 (없으면 `미사용`)
|
|
37
|
-
> - **signal** — 🟢 `active` 사용 기록 있음 · ⚪ `unknown` 아직 사용 기록 없음
|
|
38
|
-
>
|
|
39
|
-
> **카테고리 설명**
|
|
40
|
-
> - **작업 하네스** — 실제 작업을
|
|
41
|
-
> - **메타 하네스** — 다른 하네스나 Tink 자체를 관리 (선택·합성·피드백 반영)
|
|
42
|
-
> - **이 저장소 전용** — 이 프로젝트에서 직접 만들어 저장된 하네스
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
#### 🛠️ 작업 하네스
|
|
47
|
-
|
|
48
|
-
##### `<name>`
|
|
49
|
-
- **purpose**: <one short sentence>
|
|
50
|
-
- **context**: <tiny | small | large>
|
|
51
|
-
- **last used**: <YYYY-MM-DD | 미사용>
|
|
52
|
-
- **signal**: 🟢 active | ⚪ unknown
|
|
53
|
-
|
|
54
|
-
#### 🧭 메타 하네스
|
|
55
|
-
|
|
56
|
-
##### `<name>`
|
|
57
|
-
- **purpose**: …
|
|
58
|
-
- **context**: …
|
|
59
|
-
- **last used**: …
|
|
60
|
-
- **signal**: …
|
|
61
|
-
|
|
62
|
-
(또는 비어 있으면)
|
|
63
|
-
_(아직 없음)_
|
|
64
|
-
|
|
65
|
-
#### 🔧 이 저장소 전용
|
|
66
|
-
|
|
67
|
-
##### `<name>`
|
|
68
|
-
- **purpose**: …
|
|
69
|
-
- **context**: …
|
|
70
|
-
- **last used**: …
|
|
71
|
-
- **signal**: …
|
|
72
|
-
|
|
73
|
-
(또는 비어 있으면)
|
|
74
|
-
_(아직 없음)_
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
### 📊 평가
|
|
79
|
-
- **가장 활발**: …
|
|
80
|
-
- **한 번도 안 쓴 하네스**: …
|
|
81
|
-
- **균형/주의점**: 한두 문장 평가.
|
|
82
|
-
|
|
83
|
-
### 💡 다음에 쓸 수 있는 명령
|
|
84
|
-
- `/tink:cast <작업 설명>` — 적절한 하네스를 골라 작업 시작
|
|
85
|
-
- `/tink:weave` — 자주 쓰는 하네스에 누적된 개선 사항 반영 (해당될 때만)
|
|
86
|
-
- `/tink:frog` — 오래 사용 안 된 하네스 정리 후보 검토 (실제 삭제는 별도 승인)
|
|
87
|
-
- `/tink:setup` — 언어·범위·훅 정책 등 Tink 설정 점검
|
|
88
|
-
````
|
|
89
|
-
|
|
90
|
-
## Assessment & command-suggestion rules
|
|
91
|
-
- The 평가 section must mention at least: the most-used harness, every harness with an `unknown` signal, and any obvious imbalance (e.g. meta harnesses all untouched).
|
|
92
|
-
- Always include `/tink:cast` and `/tink:setup` as default next steps.
|
|
93
|
-
- Only suggest `/tink:weave` when at least one active harness has user-correction evidence, repeated runs of the same category, or items queued in `.tink/maintenance/weave-queue.json`.
|
|
94
|
-
- Only suggest `/tink:frog` when at least one harness has been `unknown` for the entire visible history AND there is no plausible upcoming use. Frame it as "정리 후보 검토", not "삭제".
|
|
95
|
-
|
|
96
|
-
## Output style
|
|
97
|
-
Use bullets, not tables. One field per line per harness. Never collapse a harness into a single line.
|
|
98
|
-
|
|
99
|
-
## Do not
|
|
100
|
-
- Do not read every harness body by default.
|
|
101
|
-
- Do not infer non-use from missing evidence.
|
|
102
|
-
- Do not remove anything. Use `/tink:frog` for removal candidates.
|
|
103
|
-
- Do not output the `evidence` field.
|
|
104
|
-
- Do not hide a category because it has zero items — render `_(아직 없음)_` instead.
|
|
1
|
+
---
|
|
2
|
+
description: Inspect available Tink harnesses and recent usage signals.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /tink:list
|
|
6
|
+
|
|
7
|
+
List available Tink harnesses without loading every harness body.
|
|
8
|
+
|
|
9
|
+
## Procedure
|
|
10
|
+
1. Read `.tink/harnesses/index.json`.
|
|
11
|
+
2. Read only compact usage metadata from `.tink/runs/` (frontmatter `selected_harnesses` / `actually_loaded_harnesses` + dates), `.tink/maintenance/ledger.jsonl`, and `.tink/maintenance/weave-queue.json`. Do not load raw logs.
|
|
12
|
+
3. Treat `.tink/current/` as weak evidence unless it is clearly from the same active conversation. If context is uncertain, label it `stale current candidate`, not proof of usage.
|
|
13
|
+
4. Classify every harness into exactly one of three categories:
|
|
14
|
+
- **working** — directly performs or gates tasks (e.g. `ship`, `pr-merge`, `requirements-interview`, `plan-consensus`, `goal-checkpoint`, `delegation-brief`). Generic work (code change, research, review, docs) runs on the base run without a harness, so it does not appear here.
|
|
15
|
+
- **meta** — manages other harnesses or Tink itself. Treat these names as meta regardless of `kind`: `harness-synthesis`, `harness-curation`, `tink-feedback-apply`.
|
|
16
|
+
- **custom (this repo)** — `kind: synthesized` in `index.json` (created in this repo, not part of the default set). If a synthesized harness also matches a meta name, prefer meta.
|
|
17
|
+
5. Compute the signal per harness:
|
|
18
|
+
- 🟢 **active** — appears in any `.tink/runs/*.md` frontmatter or `.tink/maintenance/ledger.jsonl` entry.
|
|
19
|
+
- ⚪ **unknown** — no run/ledger/memory evidence. Do not call it `quiet` or `candidate for purge` from the static index alone. Do not infer non-use from missing evidence.
|
|
20
|
+
6. Show all three categories every time, even when one is empty. For an empty category, render `_(아직 없음)_` (or the English equivalent if the project language is `en`) instead of an item list.
|
|
21
|
+
7. Do not output the `evidence` field. Usage is now compressed into `signal`.
|
|
22
|
+
|
|
23
|
+
## Output format
|
|
24
|
+
|
|
25
|
+
Always start with a header block that defines the fields and categories. Render each harness as a multi-line block — one field per line, never collapsed onto one line. Close with an assessment and command suggestions.
|
|
26
|
+
|
|
27
|
+
Use this exact skeleton (translate field labels and descriptions to the language in `.tink/config.json`):
|
|
28
|
+
|
|
29
|
+
````markdown
|
|
30
|
+
### 🧶 Tink 하네스 목록
|
|
31
|
+
|
|
32
|
+
> **필드 설명**
|
|
33
|
+
> - **purpose** — 이 하네스가 다루는 작업
|
|
34
|
+
> - **context** — Claude 컨텍스트 점유량
|
|
35
|
+
> · `tiny` 아주 짧음 · `small` 보통 체크리스트 · `large` 별도 승인 후 읽는 큰 하네스
|
|
36
|
+
> - **last used** — 가장 최근 실행 날짜 (없으면 `미사용`)
|
|
37
|
+
> - **signal** — 🟢 `active` 사용 기록 있음 · ⚪ `unknown` 아직 사용 기록 없음
|
|
38
|
+
>
|
|
39
|
+
> **카테고리 설명**
|
|
40
|
+
> - **작업 하네스** — 실제 작업을 수행하거나 안전판 역할 (출시·인터뷰·목표 관리 등). 일반 코드 변경·리뷰·문서는 하네스 없이 기본 절차로 진행됩니다.
|
|
41
|
+
> - **메타 하네스** — 다른 하네스나 Tink 자체를 관리 (선택·합성·피드백 반영)
|
|
42
|
+
> - **이 저장소 전용** — 이 프로젝트에서 직접 만들어 저장된 하네스
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
#### 🛠️ 작업 하네스
|
|
47
|
+
|
|
48
|
+
##### `<name>`
|
|
49
|
+
- **purpose**: <one short sentence>
|
|
50
|
+
- **context**: <tiny | small | large>
|
|
51
|
+
- **last used**: <YYYY-MM-DD | 미사용>
|
|
52
|
+
- **signal**: 🟢 active | ⚪ unknown
|
|
53
|
+
|
|
54
|
+
#### 🧭 메타 하네스
|
|
55
|
+
|
|
56
|
+
##### `<name>`
|
|
57
|
+
- **purpose**: …
|
|
58
|
+
- **context**: …
|
|
59
|
+
- **last used**: …
|
|
60
|
+
- **signal**: …
|
|
61
|
+
|
|
62
|
+
(또는 비어 있으면)
|
|
63
|
+
_(아직 없음)_
|
|
64
|
+
|
|
65
|
+
#### 🔧 이 저장소 전용
|
|
66
|
+
|
|
67
|
+
##### `<name>`
|
|
68
|
+
- **purpose**: …
|
|
69
|
+
- **context**: …
|
|
70
|
+
- **last used**: …
|
|
71
|
+
- **signal**: …
|
|
72
|
+
|
|
73
|
+
(또는 비어 있으면)
|
|
74
|
+
_(아직 없음)_
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### 📊 평가
|
|
79
|
+
- **가장 활발**: …
|
|
80
|
+
- **한 번도 안 쓴 하네스**: …
|
|
81
|
+
- **균형/주의점**: 한두 문장 평가.
|
|
82
|
+
|
|
83
|
+
### 💡 다음에 쓸 수 있는 명령
|
|
84
|
+
- `/tink:cast <작업 설명>` — 적절한 하네스를 골라 작업 시작
|
|
85
|
+
- `/tink:weave` — 자주 쓰는 하네스에 누적된 개선 사항 반영 (해당될 때만)
|
|
86
|
+
- `/tink:frog` — 오래 사용 안 된 하네스 정리 후보 검토 (실제 삭제는 별도 승인)
|
|
87
|
+
- `/tink:setup` — 언어·범위·훅 정책 등 Tink 설정 점검
|
|
88
|
+
````
|
|
89
|
+
|
|
90
|
+
## Assessment & command-suggestion rules
|
|
91
|
+
- The 평가 section must mention at least: the most-used harness, every harness with an `unknown` signal, and any obvious imbalance (e.g. meta harnesses all untouched).
|
|
92
|
+
- Always include `/tink:cast` and `/tink:setup` as default next steps.
|
|
93
|
+
- Only suggest `/tink:weave` when at least one active harness has user-correction evidence, repeated runs of the same category, or items queued in `.tink/maintenance/weave-queue.json`.
|
|
94
|
+
- Only suggest `/tink:frog` when at least one harness has been `unknown` for the entire visible history AND there is no plausible upcoming use. Frame it as "정리 후보 검토", not "삭제".
|
|
95
|
+
|
|
96
|
+
## Output style
|
|
97
|
+
Use bullets, not tables. One field per line per harness. Never collapse a harness into a single line.
|
|
98
|
+
|
|
99
|
+
## Do not
|
|
100
|
+
- Do not read every harness body by default.
|
|
101
|
+
- Do not infer non-use from missing evidence.
|
|
102
|
+
- Do not remove anything. Use `/tink:frog` for removal candidates.
|
|
103
|
+
- Do not output the `evidence` field.
|
|
104
|
+
- Do not hide a category because it has zero items — render `_(아직 없음)_` instead.
|
|
@@ -86,7 +86,7 @@ Use this wording in Korean:
|
|
|
86
86
|
Tink는 두 종류의 파일을 씁니다.
|
|
87
87
|
|
|
88
88
|
1. 재사용 하네스 (Reusable Harnesses): `.tink/harnesses/`
|
|
89
|
-
작업 방식 템플릿입니다. 예:
|
|
89
|
+
기능 특화 작업 방식 템플릿입니다. 예: ship, goal-checkpoint, plan-consensus.
|
|
90
90
|
팀이 같이 쓰면 유용하므로 보통 git에 커밋합니다.
|
|
91
91
|
|
|
92
92
|
2. 실행 상태 (Run State): `.tink/current/`, `.tink/runs/`, `.tink/cache/`
|
|
@@ -40,6 +40,7 @@ npx tink-harness@latest update
|
|
|
40
40
|
The `update` subcommand asks only one question - which agent surface to refresh (Claude Code, Codex, or both). Everything else updates automatically:
|
|
41
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
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
|
+
- **Reuses stored choices**: language, install scope, and git policy come from `.tink/config.json`. With `git_policy: "none"` (커밋 안 함) the updater never creates or edits `.gitignore`, and an existing whole-directory `.tink/` ignore line is left as-is.
|
|
43
44
|
|
|
44
45
|
## Output format (source repo)
|
|
45
46
|
|
|
@@ -28,7 +28,11 @@ Use Korean field values when `.tink/config.json` language is `ko` or `auto` with
|
|
|
28
28
|
If `.tink/maintenance/friction.jsonl` exists, read only compact recent entries and count repeated `check_failed`, `check_skipped`, `blocked`, gate denial, or rollback events. Repeated friction can justify a harness edit, rule graph update, or opt-in guard candidate.
|
|
29
29
|
If `.tink/tools/generate-harness-lifecycle-summary.mjs` exists, run `node .tink/tools/generate-harness-lifecycle-summary.mjs` from the repo root before ranking candidates. The generated `.tink/maintenance/harness-lifecycle.json` is a report, not approval or reusable memory.
|
|
30
30
|
If `.tink/maintenance/harness-lifecycle.json` or another summary following `.tink/schemas/harness-lifecycle.schema.json` exists, read it as a harness health summary. Prefer entries with recommendation `weave`, high or medium confidence, and concrete `evidence_handles`. Low-confidence entries should stay as observation unless the user explicitly asks to act on them.
|
|
31
|
-
|
|
31
|
+
1b. Scan promotion candidates (임시초안 승격) - weave promotes as well as improves:
|
|
32
|
+
- **Run-only draft harnesses**: read recent `.tink/runs/*.md` for recorded draft names and domain rules. If the same draft (same name, or clearly the same domain rules) appears in 2+ run records, propose promoting it into `.tink/harnesses/<name>.md` plus an `index.json` entry with `kind: "synthesized"`. Score it with the harness synthesis contract (specificity, actionability, verifiability, reuse likelihood, context cost) before proposing.
|
|
33
|
+
- **Candidate memory**: read `.tink/memory/candidate/` when it exists. If 2+ runs, ledger, or friction entries support one candidate, propose moving it to `.tink/memory/approved/` as one compact file, with evidence handles recorded under `.tink/memory/evidence/`. If the user declines, move it to `.tink/memory/rejected/` with a one-line reason so it is not proposed again.
|
|
34
|
+
- Every promotion is a reusable-state write: it always goes through the Save Gate approval payload and is appended to `.tink/maintenance/ledger.jsonl`. Without 2+ independent evidence handles, present the candidate as an observation, not a proposal.
|
|
35
|
+
2. Identify one or a few active harnesses to improve using real failures and evidence. When invoked without a specific target, the health summary's `weave` recommendations plus the promotion scan above form the default agenda:
|
|
32
36
|
- repeated mistakes
|
|
33
37
|
- user corrections
|
|
34
38
|
- failed checks
|
|
@@ -76,16 +80,16 @@ Use Korean field values when `.tink/config.json` language is `ko` or `auto` with
|
|
|
76
80
|
## Approval format
|
|
77
81
|
```text
|
|
78
82
|
Hone target:
|
|
79
|
-
-
|
|
83
|
+
- ship
|
|
80
84
|
|
|
81
85
|
Evidence:
|
|
82
|
-
- source: `.tink/runs/2026-05-22-
|
|
86
|
+
- source: `.tink/runs/2026-05-22-release-pipeline.md`
|
|
83
87
|
- classification: repeated
|
|
84
88
|
- observed failure: verification command was unclear in two runs
|
|
85
89
|
|
|
86
90
|
Approval payload:
|
|
87
91
|
- operation: weave
|
|
88
|
-
- destination files: `.tink/harnesses/
|
|
92
|
+
- destination files: `.tink/harnesses/ship.md`, `.tink/harnesses/index.json` if metadata changes, `.tink/rules/index.json` if routing changes
|
|
89
93
|
- context-cost delta: neutral or smaller
|
|
90
94
|
- ledger: append op ID to `.tink/maintenance/ledger.jsonl`
|
|
91
95
|
- rollback: revert this patch or rerun `/tink:weave` with the previous trigger
|
|
@@ -99,6 +103,30 @@ Proposed improvement:
|
|
|
99
103
|
3. 취소
|
|
100
104
|
```
|
|
101
105
|
|
|
106
|
+
Promotion proposal format (run-only draft → saved harness):
|
|
107
|
+
|
|
108
|
+
```text
|
|
109
|
+
승격 후보:
|
|
110
|
+
- `customer-interview-synthesis` (임시 초안, 2개 run에서 반복 사용)
|
|
111
|
+
|
|
112
|
+
Evidence:
|
|
113
|
+
- `.tink/runs/2026-06-01-1010-interview-analysis.md`
|
|
114
|
+
- `.tink/runs/2026-06-09-1430-interview-round2.md`
|
|
115
|
+
- classification: repeated
|
|
116
|
+
|
|
117
|
+
Approval payload:
|
|
118
|
+
- operation: harness-create (promotion)
|
|
119
|
+
- destination files: `.tink/harnesses/customer-interview-synthesis.md`, `.tink/harnesses/index.json`
|
|
120
|
+
- synthesis score: specificity 4 · actionability 4 · verifiability 3 · reuse 4 · context cost tiny
|
|
121
|
+
- ledger: append op ID to `.tink/maintenance/ledger.jsonl`
|
|
122
|
+
- rollback: delete the file and index entry, or rerun `/tink:frog`
|
|
123
|
+
|
|
124
|
+
? 진행할까요?
|
|
125
|
+
❯ 1. 승인 — 하네스로 승격 저장
|
|
126
|
+
2. 조정
|
|
127
|
+
3. 거절 — 다시 제안하지 않도록 기록
|
|
128
|
+
```
|
|
129
|
+
|
|
102
130
|
## Do not
|
|
103
131
|
- Do not rewrite a harness from scratch unless the user asks.
|
|
104
132
|
- Do not add broad principles that do not change behavior.
|
|
@@ -56,20 +56,20 @@ Codex `$tink:cast` must show a visible approval step for every non-trivial run.
|
|
|
56
56
|
|
|
57
57
|
When multiple harnesses or a run-only draft are selected, briefly explain each harness and include a short section labeled `하네스 선택 과정`: candidates considered, selected harnesses, and the reason each earns its place. Use natural Korean scope wording such as `완료 기준을 먼저 나누겠습니다` or `이번 점검은 두 범위로 보겠습니다`; avoid awkward phrasing like `"더 잘 동작하기"의 기준이 두 갈래입니다`.
|
|
58
58
|
|
|
59
|
-
Default Korean options are `승인`, `조정`, `취소`. If a run-only draft is proposed, use `승인`, `조정`, `기본
|
|
59
|
+
Default Korean options are `승인`, `조정`, `취소`. If a run-only draft is proposed, use `승인`, `조정`, `기본 절차만 사용`, `취소`. If a high-impact safety or quality branch is visible, use `승인`, `요구사항 입력`, `이대로 진행`, `취소`. For hard gates or reusable-state saves, use only `승인`, `요구사항 입력`, `취소`.
|
|
60
60
|
|
|
61
|
-
Option label quality rules: use short, common, readable labels only. Good Korean labels include `승인`, `조정`, `취소`, `요구사항 입력`, `기본
|
|
61
|
+
Option label quality rules: use short, common, readable labels only. Good Korean labels include `승인`, `조정`, `취소`, `요구사항 입력`, `기본 절차만 사용`, `새 하네스 초안 만들기`, `구조 점검`, `내용 점검`, and `전체 점검`. Do not invent compressed Korean labels, transliterated fragments, or unclear summaries such as `콘데의달 지질`. If the idea is too specific for a clean 1-5 word label, put the detail in `description` and use a generic label such as `내용 점검` or `전체 점검`. Before calling `request_user_input`, reread each Korean label; if it looks misspelled, unnatural, or semantically unclear, replace it with a plain fallback label.
|
|
62
62
|
|
|
63
|
-
When `request_user_input` is unavailable, write the same approval request as a normal assistant message and wait for the user's answer. Do not create run state, load harness bodies, edit files, run commands, or continue the task before the answer. A user's `$tink:cast` invocation means "prepare and ask for approval", not "start immediately". Exception - quick triage Lane 1: when the request is clearly simple and safe (a question, a read-only check, or one obvious localized edit with no hard-gate signals), start immediately with a one-line marker instead of asking; full preparation applies to non-trivial tasks. When an active plan has 3 or more steps, end every response with the Tink progress block (10-cell bar, current step, remaining steps).
|
|
63
|
+
When `request_user_input` is unavailable, write the same approval request as a normal assistant message and wait for the user's answer. Do not create run state, load harness bodies, edit files, run commands, or continue the task before the answer. A user's `$tink:cast` invocation means "prepare and ask for approval", not "start immediately". Exception - quick triage Lane 1: when the request is clearly simple and safe (a question, a read-only check, or one obvious localized edit with no hard-gate signals), start immediately with a one-line marker instead of asking; full preparation applies to non-trivial tasks. Overlay selection is rule-bound: goal-checkpoint is REQUIRED when the run has 2+ goals, 2+ sequential harnesses, 4+ expected steps, or spans multiple components; plan-consensus must be explicitly considered (with a recorded reason if skipped) for from-scratch implementations, reimplementations, migrations, or public contract design. The synthesis-probe verdict only covers custom procedures and must never be presented as the whole harness set being sufficient. When an active plan has 3 or more steps, end every response with the Tink progress block (10-cell bar, current step, remaining steps); right after creating or restructuring a plan, completing a goal/phase, or resuming a run, show the full progress map instead (one bar per phase with the active row marked, an overall bar, and the active phase's steps).
|
|
64
64
|
|
|
65
|
-
Use this compact approval request shape. Keep it short; do not expose internal terms such as Stitch, Probe, synthesis probe, generic fit, or hard gate in user-facing text. Translate them into plain wording such as `확인할 점`, `맞춤 절차 판단`,
|
|
65
|
+
Use this compact approval request shape. Keep it short; do not expose internal terms such as Stitch, Probe, synthesis probe, generic fit, or hard gate in user-facing text. Translate them into plain wording such as `확인할 점`, `맞춤 절차 판단`, `별도 맞춤 절차는 불필요`, or `기본 절차만으로는 부족함`. Never use `기본 하네스로 충분` - the probe verdict covers custom procedures only, not the whole harness set.
|
|
66
66
|
|
|
67
67
|
Korean:
|
|
68
68
|
|
|
69
69
|
```md
|
|
70
70
|
이 작업은 Tink run으로 잡고 진행하겠습니다.
|
|
71
71
|
|
|
72
|
-
- 선택 하네스:
|
|
72
|
+
- 선택 하네스: 기본 절차(하네스 없음)
|
|
73
73
|
- 범위: Codex 승인 UX 문구와 테스트만 수정
|
|
74
74
|
- 제외: release, publish, unrelated refactor
|
|
75
75
|
- 승인 후 첫 단계: Codex core rules에 승인 요청 형식 추가
|
|
@@ -84,7 +84,7 @@ English:
|
|
|
84
84
|
```md
|
|
85
85
|
I will handle this as a Tink run.
|
|
86
86
|
|
|
87
|
-
- selected harnesses:
|
|
87
|
+
- selected harnesses: base run (no harness)
|
|
88
88
|
- scope: update Codex approval UX text and tests only
|
|
89
89
|
- out of scope: release, publish, unrelated refactors
|
|
90
90
|
- first step after approval: add the approval request format to Codex core rules
|
|
@@ -98,7 +98,7 @@ If `request_user_input` is available, map this content into the prompt and use o
|
|
|
98
98
|
|
|
99
99
|
## Harness Procedure
|
|
100
100
|
|
|
101
|
-
For `$tink:cast`, classify the task as code change, bug fix, research, review, docs, ship/release, or new pattern. Ask for current-run approval using the Codex Approval Protocol, then load only selected harness bodies after approval. If
|
|
101
|
+
For `$tink:cast`, classify the task as code change, bug fix, research, review, docs, ship/release, or new pattern. These are task types, not harness names: generic types run as a base run (no harness - the run state contract alone provides scope, verification, and evidence), and a harness is selected only when a specialized one genuinely fits (overlays, ship/release gates, meta harnesses, or user/synthesized domain harnesses). Never force a loose-fit harness just to name one. Ask for current-run approval using the Codex Approval Protocol, then load only selected harness bodies after approval. If a repeatable domain procedure is missing, use `harness-synthesis` to draft a narrow run-only harness instead of forcing a generic fit.
|
|
102
102
|
|
|
103
103
|
Create run state before deeper work:
|
|
104
104
|
|