tillerhand 3.48.1 → 3.49.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/agents/board-chair.md +1 -1
- package/.claude/agents/security-auditor.md +1 -1
- package/.claude/agents/test-writer.md +1 -1
- package/.claude/board/board-product.md +1 -1
- package/.claude/board/council.md +1 -1
- package/.claude/board/rules.md +6 -6
- package/.claude/commands/adopt.md +3 -3
- package/.claude/commands/ask-mode.md +4 -4
- package/.claude/commands/board.md +1 -1
- package/.claude/commands/build.md +1 -1
- package/.claude/commands/design.md +4 -4
- package/.claude/commands/findings-business.md +1 -1
- package/.claude/commands/findings-legal.md +1 -1
- package/.claude/commands/findings-perf.md +1 -1
- package/.claude/commands/findings-security.md +2 -2
- package/.claude/commands/findings-tech.md +1 -1
- package/.claude/commands/findings-ux.md +1 -1
- package/.claude/commands/fix-bug.md +2 -2
- package/.claude/commands/handoff.md +2 -2
- package/.claude/commands/kit-update.md +2 -2
- package/.claude/commands/qa.md +1 -1
- package/.claude/commands/release.md +2 -2
- package/.claude/commands/research.md +3 -3
- package/.claude/commands/retro.md +1 -1
- package/.claude/commands/rollback.md +3 -3
- package/.claude/commands/start.md +4 -4
- package/.claude/commands/tools.md +1 -1
- package/.claude/commands/user-feedback.md +1 -1
- package/.claude/findings/lenses/business.md +1 -1
- package/.claude/findings/protocol.md +2 -2
- package/.claude/hooks/budget.mjs +1 -1
- package/.claude/hooks/checkpoint.mjs +2 -2
- package/.claude/hooks/commit-gate.mjs +14 -15
- package/.claude/hooks/council.mjs +37 -52
- package/.claude/hooks/dashboard-data.mjs +34 -42
- package/.claude/hooks/dashboard.mjs +18 -20
- package/.claude/hooks/destructive-guard.mjs +2 -2
- package/.claude/hooks/flow.mjs +1 -1
- package/.claude/hooks/freeze-guard.mjs +2 -2
- package/.claude/hooks/gate.mjs +18 -11
- package/.claude/hooks/labels.mjs +92 -152
- package/.claude/hooks/lang.mjs +25 -9
- package/.claude/hooks/messages.mjs +496 -494
- package/.claude/hooks/notify.mjs +1 -1
- package/.claude/hooks/prefs.mjs +10 -18
- package/.claude/hooks/preview.mjs +1 -1
- package/.claude/hooks/progress.mjs +7 -9
- package/.claude/hooks/qa-report.mjs +1 -3
- package/.claude/hooks/session-start.mjs +2 -3
- package/.claude/hooks/status-read.mjs +5 -5
- package/.claude/hooks/statusline.mjs +4 -4
- package/.claude/hooks/tools.mjs +3 -7
- package/.claude/hooks/usage.mjs +2 -2
- package/.claude/i18n/tr.json +495 -0
- package/.claude/security-patterns.json +1 -1
- package/.claude/skills/logo-design/SKILL.md +2 -2
- package/.claude/skills/motion-video/SKILL.md +1 -1
- package/.claude/skills/source-research/SKILL.md +1 -1
- package/.claude/skills/ui-motion/SKILL.md +1 -1
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +1 -1
- package/README.md +2 -2
- package/README.tr.md +2 -2
- package/docs/architecture/overview.md +1 -1
- package/docs/decisions/log.md +1 -1
- package/docs/legal/privacy-kvkk.md +35 -35
- package/docs/operations/deploy-setup.md +1 -1
- package/docs/operations/feature-flags.md +1 -1
- package/docs/product/glossary.md +3 -3
- package/docs/product/launch.md +1 -1
- package/docs/product/prd.md +2 -2
- package/docs/product/roadmap.md +1 -1
- package/docs/product/specs/_template.md +1 -1
- package/docs/product/unit-economics.md +1 -1
- package/docs/quality/test-plan.md +5 -5
- package/docs/workflow/decision-protocol.md +1 -2
- package/docs/workflow/mcp-catalog.md +1 -1
- package/docs/workflow/skills.md +2 -2
- package/docs/workflow/usage-limits.md +1 -1
- package/kit/CHANGELOG.md +28 -0
- package/kit/VERSION +1 -1
- package/kit/guide.html +56 -56
- package/kit/guide.tr.html +10 -10
- package/kit/kit.mjs +7 -42
- package/kit/templates/addons/ai/.env.example.append +3 -3
- package/kit/templates/addons/tr/docs/legal/turkiye.md +55 -55
- package/kit/templates/addons/tr/types/backend/.env.example.append +2 -2
- package/kit/templates/addons/tr/types/backend/app/shared/payments.py +1 -1
- package/kit/templates/addons/tr/types/backend/tests/security/test_payment_webhook.py +3 -3
- package/kit/templates/addons/tr/types/web-saas/.env.example.append +2 -2
- package/kit/templates/addons/tr/types/web-saas/.github/workflows/payment-webhook.yml +3 -3
- package/kit/templates/addons/tr/types/web-saas/src/lib/payments/webhook-signature.ts +1 -1
- package/kit/templates/addons/tr/types/web-saas/tests/security/payment-webhook.mjs +4 -4
- package/kit/templates/backend/.github/dependabot.yml +1 -1
- package/kit/templates/backend/.github/workflows/live-monitoring.yml +1 -1
- package/kit/templates/backend/docs/architecture/stack.md +3 -3
- package/kit/templates/mobile/.github/dependabot.yml +1 -1
- package/kit/templates/mobile/.github/workflows/ci.yml +2 -2
- package/kit/templates/mobile/docs/architecture/stack.md +4 -4
- package/kit/templates/mobile/docs/architecture/structure.md +1 -1
- package/kit/templates/mobile/docs/design/design-guide.md +1 -1
- package/kit/templates/web-saas/.github/dependabot.yml +1 -1
- package/kit/templates/web-saas/.github/workflows/ci.yml +2 -2
- package/kit/templates/web-saas/.github/workflows/live-monitoring.yml +1 -1
- package/kit/templates/web-saas/docs/architecture/stack.md +4 -4
- package/kit/templates/web-saas/docs/design/design-guide.md +1 -1
- package/kit/tools/antigravity/.agents/hooks.json +5 -5
- package/package.json +1 -1
package/kit/guide.html
CHANGED
|
@@ -344,10 +344,10 @@ footer .container { display: flex; flex-wrap: wrap; gap: 16px; justify-content:
|
|
|
344
344
|
<div class="container">
|
|
345
345
|
<a class="brand" href="#top"><svg class="mark"><use href="#mark"/></svg>TillerHand</a>
|
|
346
346
|
<nav class="nav-links" aria-label="Main menu">
|
|
347
|
-
<a href="#
|
|
348
|
-
<a href="#
|
|
349
|
-
<a href="#
|
|
350
|
-
<a href="#
|
|
347
|
+
<a href="#how">How it works</a>
|
|
348
|
+
<a href="#screens">Screens</a>
|
|
349
|
+
<a href="#measurement">Results</a>
|
|
350
|
+
<a href="#guide">Guide</a>
|
|
351
351
|
<a class="btn ghost small" href="https://github.com/burakdogrul/TillerHand">GitHub</a>
|
|
352
352
|
</nav>
|
|
353
353
|
<div class="lang" role="group" aria-label="Language"><span aria-current="true">English</span><a href="guide.tr.html" hreflang="tr" lang="tr">Türkçe</a></div>
|
|
@@ -361,7 +361,7 @@ footer .container { display: flex; flex-wrap: wrap; gap: 16px; justify-content:
|
|
|
361
361
|
<section class="hero">
|
|
362
362
|
<div class="container">
|
|
363
363
|
<div>
|
|
364
|
-
<span class="pill"><b>v3.
|
|
364
|
+
<span class="pill"><b>v3.49.0</b> Starter kit for Claude Code · MIT</span>
|
|
365
365
|
<h1>The AI builds.<br><em>You steer.</em></h1>
|
|
366
366
|
<p class="sub">TillerHand takes a product from idea to production and maintenance with Claude Code. At every important decision the AI gives you the options, its recommendation and the cost of each option. An expert board reviews the work, and guardrails stop mistakes before they happen.</p>
|
|
367
367
|
<div class="setup">
|
|
@@ -377,7 +377,7 @@ footer .container { display: flex; flex-wrap: wrap; gap: 16px; justify-content:
|
|
|
377
377
|
</div>
|
|
378
378
|
<p class="next" aria-live="polite">Run it in the project folder. Then open a new session in the same folder and type <code>/start your idea</code>.</p>
|
|
379
379
|
</div>
|
|
380
|
-
<p class="hero-note">One command is enough; the plugin and git routes are in <a href="#
|
|
380
|
+
<p class="hero-note">One command is enough; the plugin and git routes are in <a href="#getting-started">Setup</a> · Also works in Codex and Antigravity · No coding knowledge needed</p>
|
|
381
381
|
</div>
|
|
382
382
|
<div class="window demo" aria-label="Example: a decision question the AI asks you">
|
|
383
383
|
<div class="bar"><i></i><i></i><i></i><span>Claude Code · /start</span></div>
|
|
@@ -422,7 +422,7 @@ footer .container { display: flex; flex-wrap: wrap; gap: 16px; justify-content:
|
|
|
422
422
|
</section>
|
|
423
423
|
|
|
424
424
|
<!-- ============ CYCLE ============ -->
|
|
425
|
-
<section class="band" id="
|
|
425
|
+
<section class="band" id="how">
|
|
426
426
|
<div class="container">
|
|
427
427
|
<p class="kicker">How it works</p>
|
|
428
428
|
<h2>The same cycle for every task. You sit in the middle.</h2>
|
|
@@ -472,7 +472,7 @@ footer .container { display: flex; flex-wrap: wrap; gap: 16px; justify-content:
|
|
|
472
472
|
</section>
|
|
473
473
|
|
|
474
474
|
<!-- ============ SCREENS ============ -->
|
|
475
|
-
<section class="band soft" id="
|
|
475
|
+
<section class="band soft" id="screens">
|
|
476
476
|
<div class="container">
|
|
477
477
|
<p class="kicker">At work</p>
|
|
478
478
|
<h2>This is what a day with TillerHand looks like.</h2>
|
|
@@ -540,7 +540,7 @@ Next: G-013 password reset · pending decision: email service</pre>
|
|
|
540
540
|
</section>
|
|
541
541
|
|
|
542
542
|
<!-- ============ RESULTS ============ -->
|
|
543
|
-
<section class="band" id="
|
|
543
|
+
<section class="band" id="measurement">
|
|
544
544
|
<div class="container">
|
|
545
545
|
<p class="kicker">Results</p>
|
|
546
546
|
<h2>The difference is in the tests that catch bugs.</h2>
|
|
@@ -563,7 +563,7 @@ Next: G-013 password reset · pending decision: email service</pre>
|
|
|
563
563
|
</section>
|
|
564
564
|
|
|
565
565
|
<!-- ============ GUIDE ============ -->
|
|
566
|
-
<div class="band soft" style="padding:72px 0 0" id="
|
|
566
|
+
<div class="band soft" style="padding:72px 0 0" id="guide">
|
|
567
567
|
<div class="container">
|
|
568
568
|
<p class="kicker">Guide</p>
|
|
569
569
|
<h2>The full guide</h2>
|
|
@@ -574,36 +574,36 @@ Next: G-013 password reset · pending decision: email service</pre>
|
|
|
574
574
|
<div class="container docs">
|
|
575
575
|
<nav class="side" aria-label="Guide contents">
|
|
576
576
|
<p>Start</p>
|
|
577
|
-
<a href="#
|
|
578
|
-
<a href="#
|
|
577
|
+
<a href="#getting-started">Setup</a>
|
|
578
|
+
<a href="#new-to-this">If you're new</a>
|
|
579
579
|
<a href="#adopt">Existing project</a>
|
|
580
|
-
<a href="#
|
|
580
|
+
<a href="#daily">Every day</a>
|
|
581
581
|
<p>How it works</p>
|
|
582
|
-
<a href="#
|
|
583
|
-
<a href="#
|
|
582
|
+
<a href="#protocol">Decision protocol</a>
|
|
583
|
+
<a href="#wizard">The /start wizard</a>
|
|
584
584
|
<a href="#design">Design flow</a>
|
|
585
|
-
<a href="#
|
|
586
|
-
<a href="#
|
|
585
|
+
<a href="#phases">Four stages</a>
|
|
586
|
+
<a href="#board">Expert board</a>
|
|
587
587
|
<p>Quality and security</p>
|
|
588
|
-
<a href="#
|
|
589
|
-
<a href="#
|
|
590
|
-
<a href="#
|
|
588
|
+
<a href="#checks">Guardrail layers</a>
|
|
589
|
+
<a href="#findings">Findings reports</a>
|
|
590
|
+
<a href="#structure">Project structure</a>
|
|
591
591
|
<p>Tracking</p>
|
|
592
|
-
<a href="#
|
|
593
|
-
<a href="#
|
|
592
|
+
<a href="#report">Reports and dashboard</a>
|
|
593
|
+
<a href="#limits">Limit awareness</a>
|
|
594
594
|
<p>Tools</p>
|
|
595
|
-
<a href="#
|
|
596
|
-
<a href="#
|
|
597
|
-
<a href="#
|
|
595
|
+
<a href="#capabilities">Capability packs</a>
|
|
596
|
+
<a href="#skills">Which skill for which job</a>
|
|
597
|
+
<a href="#tools">Codex and Antigravity</a>
|
|
598
598
|
<p>Reference</p>
|
|
599
|
-
<a href="#
|
|
599
|
+
<a href="#commands">Commands</a>
|
|
600
600
|
<a href="#kit">Updates and maintenance</a>
|
|
601
|
-
<a href="#
|
|
601
|
+
<a href="#rules">Golden rules</a>
|
|
602
602
|
</nav>
|
|
603
603
|
|
|
604
604
|
<div class="doc">
|
|
605
605
|
|
|
606
|
-
<section id="
|
|
606
|
+
<section id="getting-started">
|
|
607
607
|
<p class="path">Before you start</p>
|
|
608
608
|
<h2>Setup</h2>
|
|
609
609
|
<p class="lead">Pick your path first: are you starting a new idea in an empty folder, or do you already have code? The install is the same for both; what changes is the command you type after it.</p>
|
|
@@ -617,7 +617,7 @@ Next: G-013 password reset · pending decision: email service</pre>
|
|
|
617
617
|
<li>Phase 0: CI and the first deploy</li>
|
|
618
618
|
<li>Every day <code>/build</code>: the next task</li>
|
|
619
619
|
</ol>
|
|
620
|
-
<a class="go" href="#
|
|
620
|
+
<a class="go" href="#wizard">The /start wizard →</a>
|
|
621
621
|
</article>
|
|
622
622
|
<article class="route">
|
|
623
623
|
<h3>I already have code</h3>
|
|
@@ -657,14 +657,14 @@ node vibe-kit/kit/kit.mjs init</pre>
|
|
|
657
657
|
<div class="note"><b>Recommended: the code map.</b> If <a href="https://github.com/DeusData/codebase-memory-mcp">codebase-memory-mcp</a> is connected, the AI queries the code instead of reading it file by file; as the project grows this saves a lot of tokens. <code>/start</code> asks whether you want it; you do the install in your own terminal.</div>
|
|
658
658
|
</section>
|
|
659
659
|
|
|
660
|
-
<section id="
|
|
660
|
+
<section id="new-to-this">
|
|
661
661
|
<p class="path">Without coding</p>
|
|
662
662
|
<h2>If you're new: step by step</h2>
|
|
663
663
|
<p class="lead">You don't need to know how to code. Claude does the git, terminal and install work and asks you at every important step. You describe what you want and make the choices.</p>
|
|
664
664
|
<ol>
|
|
665
665
|
<li><b>Accounts (once):</b> a <a href="https://github.com">GitHub</a> account (free) and a Claude <b>Pro</b> or <b>Max</b> subscription.</li>
|
|
666
666
|
<li><b>Programs (once):</b> the <a href="https://claude.com/download">Claude desktop app</a>, <a href="https://nodejs.org">Node.js</a> (LTS version), <a href="https://git-scm.com/downloads">Git</a>. You can also install <a href="https://desktop.github.com">GitHub Desktop</a> if you like.</li>
|
|
667
|
-
<li><b>Project:</b> Create a folder for your project and select it in the <b>Code</b> tab of the Claude desktop app. Tell Claude "run <code>npx tillerhand init</code> in this folder". If you've <a href="#
|
|
667
|
+
<li><b>Project:</b> Create a folder for your project and select it in the <b>Code</b> tab of the Claude desktop app. Tell Claude "run <code>npx tillerhand init</code> in this folder". If you've <a href="#getting-started">installed the TillerHand plugin once</a>, <code>/tillerhand:init</code> works too.</li>
|
|
668
668
|
<li><b>Open:</b> Open a <b>new session</b> in the same folder; the kit's commands and guardrails load in the new session. If it offers to install the plugins, accept.</li>
|
|
669
669
|
<li><b>Start:</b> Type <code>/start your idea</code> (or <a href="#adopt"><code>/adopt</code></a> if you already have code). <b>The first option of every question is the recommended one</b>; if you're unsure, pick it. If you're on Pro, suggested answers for the first questions: profile <b>Light</b>, planning depth <b>Quick</b> (~25-35% of your 5-hour limit), dashboard <b>Yes</b>, narrator mode <b>Yes</b>.</li>
|
|
670
670
|
</ol>
|
|
@@ -714,7 +714,7 @@ npx tillerhand init
|
|
|
714
714
|
</div>
|
|
715
715
|
</section>
|
|
716
716
|
|
|
717
|
-
<section id="
|
|
717
|
+
<section id="daily">
|
|
718
718
|
<p class="path">Routine</p>
|
|
719
719
|
<h2>Every day</h2>
|
|
720
720
|
<div class="table-wrap"><table>
|
|
@@ -729,7 +729,7 @@ npx tillerhand init
|
|
|
729
729
|
</table></div>
|
|
730
730
|
</section>
|
|
731
731
|
|
|
732
|
-
<section id="
|
|
732
|
+
<section id="protocol">
|
|
733
733
|
<p class="path">docs/workflow/decision-protocol.md</p>
|
|
734
734
|
<h2>You make the decisions</h2>
|
|
735
735
|
<p class="lead">Every choice about product, tech, design, content, data, security and cost is a decision point. The AI prepares the options, puts its recommendation first, and writes when each option is better and what it costs. Your answer is saved to <code>docs/decisions/log.md</code>, then applied, and never asked again.</p>
|
|
@@ -757,19 +757,19 @@ npx tillerhand init
|
|
|
757
757
|
<div class="table-wrap"><table>
|
|
758
758
|
<thead><tr><th>Topic</th><th>Example decisions</th></tr></thead>
|
|
759
759
|
<tbody>
|
|
760
|
-
<tr><td class="f">
|
|
761
|
-
<tr><td class="f">
|
|
760
|
+
<tr><td class="f">product</td><td>MVP scope, priority, user flow, price</td></tr>
|
|
761
|
+
<tr><td class="f">tech</td><td>Language, framework, database, auth, hosting, adding a library, API style</td></tr>
|
|
762
762
|
<tr><td class="f">design</td><td>Style direction, color, typeface, layout, component style, animation, dark theme</td></tr>
|
|
763
|
-
<tr><td class="f">
|
|
764
|
-
<tr><td class="f">
|
|
763
|
+
<tr><td class="f">content</td><td>Copy, tone of voice, formal/informal address, headline and CTA alternatives</td></tr>
|
|
764
|
+
<tr><td class="f">data</td><td>Data model, delete behavior, retention period</td></tr>
|
|
765
765
|
<tr><td class="f">security</td><td>Roles, session length, rate limits, personal data</td></tr>
|
|
766
|
-
<tr><td class="f">
|
|
766
|
+
<tr><td class="f">cost</td><td>Paid service, plan tier, AI model, spending limit</td></tr>
|
|
767
767
|
</tbody>
|
|
768
768
|
</table></div>
|
|
769
769
|
<div class="note">For hard-to-reverse decisions (database, auth, payment, data model; a "one-way door") the board's opinion, and if needed the council's, is taken first. Whatever the question mode, approval is always asked for: data deletion, deploys to prod, anything that spends money, irreversible commands. Implementation details such as file and variable names are not asked, only reported.</div>
|
|
770
770
|
</section>
|
|
771
771
|
|
|
772
|
-
<section id="
|
|
772
|
+
<section id="wizard">
|
|
773
773
|
<p class="path">.claude/commands/start.md</p>
|
|
774
774
|
<h2>/start: the nine-step wizard</h2>
|
|
775
775
|
<p class="lead">It makes all the basic decisions of the project without writing application code. Decisions are written to the log the moment they are made and show up on the dashboard. If it stops halfway, it continues from the step it reached.</p>
|
|
@@ -817,7 +817,7 @@ npx tillerhand init
|
|
|
817
817
|
<div class="note"><b>Inspiration brand (optional):</b> The DESIGN.md of a product you like (awesome-design-md) is downloaded and its principles are distilled with Impeccable. The logo, name and exact palette are not taken; there is no brand imitation.</div>
|
|
818
818
|
</section>
|
|
819
819
|
|
|
820
|
-
<section id="
|
|
820
|
+
<section id="phases">
|
|
821
821
|
<p class="path">After /start</p>
|
|
822
822
|
<h2>Four stages</h2>
|
|
823
823
|
<p class="lead">Every stage has an exit gate: you don't move on to the next one until the items at the gate are complete.</p>
|
|
@@ -868,7 +868,7 @@ npx tillerhand init
|
|
|
868
868
|
</div>
|
|
869
869
|
</section>
|
|
870
870
|
|
|
871
|
-
<section id="
|
|
871
|
+
<section id="board">
|
|
872
872
|
<p class="path">.claude/agents/board-* · docs/workflow/board.md</p>
|
|
873
873
|
<h2>Expert board</h2>
|
|
874
874
|
<p class="lead">Expert agents are created in your project for the product type you choose and tailored to the stack. They review the work continuously, recommend decisions and keep you informed. They are advisors; they stop the work only on a critical finding. The decision is always yours.</p>
|
|
@@ -891,7 +891,7 @@ npx tillerhand init
|
|
|
891
891
|
<p>Karpathy's <a href="https://github.com/karpathy/llm-council">llm-council</a> structure, adapted to the board. Heavy meetings and decisions that are expensive to reverse go through three stages:</p>
|
|
892
892
|
<div class="tiles">
|
|
893
893
|
<article class="tile"><h3>1 · First opinions</h3><p>Members (or advisors on different models) work in parallel without knowing about each other. Opinions are labeled A, B, C; findings A1, A2…</p></article>
|
|
894
|
-
<article class="tile"><h3>2 · Anonymous cross-vote</h3><p>Each member reads the others' opinions without knowing who wrote them, votes each finding
|
|
894
|
+
<article class="tile"><h3>2 · Anonymous cross-vote</h3><p>Each member reads the others' opinions without knowing who wrote them, votes each finding AGREE · OVERSTATED · DISAGREE, writes what is missing, and ranks the opinions.</p></article>
|
|
895
895
|
<article class="tile"><h3>Count (code)</h3><p><code>council.mjs</code> computes the average rank, the finding votes and the consensus percentage in code; the model can't change the numbers.</p></article>
|
|
896
896
|
<article class="tile"><h3>3 · Chair</h3><p>board-chair (opus) reads the minutes, writes the decision, drops refuted findings with a reason, and keeps the minority opinion. It can't drop a disputed critical finding; it asks you.</p></article>
|
|
897
897
|
</div>
|
|
@@ -910,7 +910,7 @@ npx tillerhand init
|
|
|
910
910
|
<div class="note">When a REJECT comes, the task is not counted as done. You get three options: fix it (recommended), accept the risk and record the reason, or roll the task back. If members disagree, the two opinions are shown side by side and the decision is asked from you.</div>
|
|
911
911
|
</section>
|
|
912
912
|
|
|
913
|
-
<section id="
|
|
913
|
+
<section id="checks">
|
|
914
914
|
<p class="path">Rules are written, checks are automatic</p>
|
|
915
915
|
<h2>Guardrail layers</h2>
|
|
916
916
|
<p class="lead">Decisions are made in Claude Code's permission layer (allow · ask · block); the AI can't bypass them. In Codex and Antigravity the same scripts run through that tool's hooks.</p>
|
|
@@ -966,7 +966,7 @@ npx tillerhand init
|
|
|
966
966
|
</table></div>
|
|
967
967
|
</section>
|
|
968
968
|
|
|
969
|
-
<section id="
|
|
969
|
+
<section id="findings">
|
|
970
970
|
<p class="path">/findings-* · docs/findings/</p>
|
|
971
971
|
<h2>Findings reports</h2>
|
|
972
972
|
<p class="lead">Scans the project through an expert's eyes and ranks the most important findings, at most 20, with evidence, a 0-100 severity score and a technical fix. Each report gives a health score for its area and is compared with the previous one (new / continuing / worse / resolved).</p>
|
|
@@ -985,7 +985,7 @@ npx tillerhand init
|
|
|
985
985
|
<div class="note">Severity score = impact (40) + likelihood (25) + spread (20) + urgency (15). Levels: Critical ≥80 · High 60-79 · Medium 40-59 · Low <40. Health = 100 − penalty (critical 15 · high 8 · medium 4 · low 1). At the end of the report are the fix plan, the relevant board member's opinion, and the question of which findings go into the roadmap.</div>
|
|
986
986
|
</section>
|
|
987
987
|
|
|
988
|
-
<section id="
|
|
988
|
+
<section id="structure">
|
|
989
989
|
<p class="path">.claude/structure.json · docs/architecture/structure.md</p>
|
|
990
990
|
<h2>The project structure is protected</h2>
|
|
991
991
|
<p class="lead">The code is organized by feature: everything that belongs to a feature lives under <code>features/<feature>/</code>. If a new file is about to be written outside the structure map, you are asked; clutter files are blocked. Trial work goes to <code>sandbox/</code>, outdated docs to <code>docs/archive/</code>.</p>
|
|
@@ -1010,7 +1010,7 @@ AGENTS.md · CLAUDE.md · README.md · CHANGELOG.md</pre>
|
|
|
1010
1010
|
<div class="note"><code>AGENTS.md</code> holds the shared rules (read by Claude Code, Codex and Antigravity); <code>CLAUDE.md</code> imports it and carries the Claude Code-specific additions. The structure is protected in four places: the hook at write time, CI on every PR, the board's Architect, and <code>/findings-tech</code>. Changing the map is a technical decision; you are asked and it is recorded as an ADR.</div>
|
|
1011
1011
|
</section>
|
|
1012
1012
|
|
|
1013
|
-
<section id="
|
|
1013
|
+
<section id="report">
|
|
1014
1014
|
<p class="path">Where are we, at every moment</p>
|
|
1015
1015
|
<h2>Reports and dashboard</h2>
|
|
1016
1016
|
<div class="grid2">
|
|
@@ -1042,7 +1042,7 @@ Next: G-013 password reset · pending decision: email service</pre>
|
|
|
1042
1042
|
</div>
|
|
1043
1043
|
</section>
|
|
1044
1044
|
|
|
1045
|
-
<section id="
|
|
1045
|
+
<section id="limits">
|
|
1046
1046
|
<p class="path">docs/workflow/usage-limits.md</p>
|
|
1047
1047
|
<h2>Limit awareness</h2>
|
|
1048
1048
|
<p class="lead">Before work starts, the 5-hour and weekly limits are read: on the desktop with the <code>get_usage</code> tool, in the terminal and IDE from what Claude Code sends to the status line. The limit is only a reason to warn: work doesn't stop, and continues until you say "stop".</p>
|
|
@@ -1068,7 +1068,7 @@ Next: G-013 password reset · pending decision: email service</pre>
|
|
|
1068
1068
|
<div class="note">Task costs are written to <code>docs/workflow/cost-log.md</code>; estimates settle on real data over time. At session start only the summary rules and <code>docs/workflow/progress.md</code> are loaded (about 1,700 tokens). If the code map is connected, the code is queried without reading the files. The main session's context is kept small too: independent questions are asked in one round, gate and subagent reports come back short, and <code>/clear</code> is suggested once a task is done and committed.</div>
|
|
1069
1069
|
</section>
|
|
1070
1070
|
|
|
1071
|
-
<section id="
|
|
1071
|
+
<section id="capabilities">
|
|
1072
1072
|
<p class="path">.claude/skills · MCP</p>
|
|
1073
1073
|
<h2>Capability packs</h2>
|
|
1074
1074
|
<p class="lead">The core jobs rely on the kit's own skills, not on tools installed from outside; outside tools are turned on only where they make a difference and according to the project type.</p>
|
|
@@ -1090,13 +1090,13 @@ Next: G-013 password reset · pending decision: email service</pre>
|
|
|
1090
1090
|
<article class="tile"><h3>Mobile testing and services</h3><p class="stack">Maestro · Expo MCP · service catalog</p><ul><li>Acceptance tests on a device or simulator</li><li>EAS build, TestFlight crash logs</li><li>GitHub, Stripe, PostHog, Figma: once the service is chosen</li></ul></article>
|
|
1091
1091
|
<article class="tile"><h3>Measurement and cost</h3><p class="stack">Playwright CLI · Chrome DevTools MCP · ccusage</p><ul><li>Console, network and screenshots through the CLI; performance traces through MCP</li><li>Tokens and cost per project on the dashboard</li></ul></article>
|
|
1092
1092
|
<article class="tile"><h3>Rollback</h3><p class="stack">/rollback · checkpoint.mjs</p><ul><li>A working point is saved while tests are green</li><li>Going back is a new commit; history is not deleted</li><li>Unfinished work is stashed, .env is not touched</li></ul></article>
|
|
1093
|
-
<article class="tile"><h3>In your language</h3><p class="stack">.kit.json → lang</p><ul><li><code>/start</code> and <code>/adopt</code> ask the language first: Turkish / English / Other</li><li>Questions, answers, documents, the dashboard and the status line come in that language; change it with <code>/language</code></li></ul></article>
|
|
1093
|
+
<article class="tile"><h3>In your language</h3><p class="stack">.kit.json → lang</p><ul><li><code>/start</code> and <code>/adopt</code> ask the language first: Turkish / English / Other</li><li>Questions, answers, documents, the dashboard and the status line come in that language; change it with <code>/language</code></li><li>Other: the AI translates the hook texts once; saving the translation asks your approval</li><li>Labels and keys in project files (<code>**Active phase:**</code>, <code>APPROVE</code>) stay English: the tools read them</li></ul></article>
|
|
1094
1094
|
<article class="tile"><h3>Narrator mode</h3><p class="stack">output style: narrator</p><ul><li>After every step: what I did, why, how you can see it</li><li>At the end of a task, at most 2 comprehension questions; the answers go on the dashboard</li></ul></article>
|
|
1095
1095
|
<article class="tile"><h3>Spend alarm</h3><p class="stack">spend-alarms.md · dashboard</p><ul><li>The provider's cap and a 50%/80% warning</li><li>In code: a per-user quota, a daily budget, automatic shutdown</li><li>/release and /maintain check it</li></ul></article>
|
|
1096
1096
|
</div>
|
|
1097
1097
|
</section>
|
|
1098
1098
|
|
|
1099
|
-
<section id="
|
|
1099
|
+
<section id="skills">
|
|
1100
1100
|
<p class="path">docs/workflow/skills.md</p>
|
|
1101
1101
|
<h2>Which skill for which job</h2>
|
|
1102
1102
|
<div class="table-wrap"><table>
|
|
@@ -1134,7 +1134,7 @@ Next: G-013 password reset · pending decision: email service</pre>
|
|
|
1134
1134
|
<div class="note"><b>Deliberately left out:</b> superpowers, gstack, spec-kit, BMAD, GSD and OpenSpec would replace the kit's question, plan and board flow; their good ideas were worked into the kit's own rules. claude-mem and Serena do the same job as the kit's progress file and code map.</div>
|
|
1135
1135
|
</section>
|
|
1136
1136
|
|
|
1137
|
-
<section id="
|
|
1137
|
+
<section id="tools">
|
|
1138
1138
|
<p class="path">With another tool</p>
|
|
1139
1139
|
<h2>Codex and Antigravity</h2>
|
|
1140
1140
|
<p class="lead">TillerHand was written for Claude Code. The rules, commands and guardrails also work in OpenAI Codex and Google Antigravity. The board runs on a single model; the question UI, the status line and the commit gate are not available in these tools.</p>
|
|
@@ -1157,7 +1157,7 @@ Next: G-013 password reset · pending decision: email service</pre>
|
|
|
1157
1157
|
<div class="note">The commands have a single source (<code>.claude/commands/</code>); the copies under <code>.agents/skills/</code> are generated by <code>init</code>, <code>install</code> and <code>update</code>. Codex runs the project's hooks only when you trust the folder and approve them with <code>/hooks</code>; do this in the first session. On first use, try writing a secret to see the guardrails work.</div>
|
|
1158
1158
|
</section>
|
|
1159
1159
|
|
|
1160
|
-
<section id="
|
|
1160
|
+
<section id="commands">
|
|
1161
1161
|
<p class="path">.claude/commands</p>
|
|
1162
1162
|
<h2>Commands</h2>
|
|
1163
1163
|
<div class="table-wrap"><table>
|
|
@@ -1184,7 +1184,7 @@ Next: G-013 password reset · pending decision: email service</pre>
|
|
|
1184
1184
|
<tr><td class="f">/retro</td><td>Writes the lessons into the project; kit suggestions go to a branch in the TillerHand repo</td></tr>
|
|
1185
1185
|
<tr><td class="f">/research [topic]</td><td>Articles, similar projects on GitHub and competing products; a difference table; chosen features go into the PRD</td></tr>
|
|
1186
1186
|
<tr><td class="f">/handoff [take]</td><td>Hands the project to another person or account, or takes it over; continues from the same place</td></tr>
|
|
1187
|
-
<tr><td class="f">/tools [
|
|
1187
|
+
<tr><td class="f">/tools [on|off|measure|commands]</td><td>Shows, turns on or turns off context packs; measures the skill load; makes the command list light or full</td></tr>
|
|
1188
1188
|
<tr><td class="f">/kit-update</td><td>Brings the project to TillerHand's latest version; asks about conflicts; adds a tool with <code>--tool</code> and an add-on with <code>--addons</code></td></tr>
|
|
1189
1189
|
<tr><td class="f">/language [language]</td><td>Changes the conversation language (Turkish, English or another language); refreshes the translation of the hook messages and the dashboard</td></tr>
|
|
1190
1190
|
</tbody>
|
|
@@ -1211,10 +1211,10 @@ Next: G-013 password reset · pending decision: email service</pre>
|
|
|
1211
1211
|
<tr><td>A file newly added to the kit</td><td>Added if the project doesn't have it. If you deleted it on purpose before, it is not brought back.</td></tr>
|
|
1212
1212
|
</tbody>
|
|
1213
1213
|
</table></div>
|
|
1214
|
-
<div class="note"><b>Evaluation:</b> <code>node kit/eval/run.mjs</code> runs the same task with and without the kit and scores it with hidden acceptance and adversarial tests. The latest measurement is above, in <a href="#
|
|
1214
|
+
<div class="note"><b>Evaluation:</b> <code>node kit/eval/run.mjs</code> runs the same task with and without the kit and scores it with hidden acceptance and adversarial tests. The latest measurement is above, in <a href="#measurement">Results</a>.</div>
|
|
1215
1215
|
</section>
|
|
1216
1216
|
|
|
1217
|
-
<section id="
|
|
1217
|
+
<section id="rules">
|
|
1218
1218
|
<p class="path">In every project</p>
|
|
1219
1219
|
<h2>Golden rules</h2>
|
|
1220
1220
|
<ol class="rules">
|
|
@@ -1241,7 +1241,7 @@ Next: G-013 password reset · pending decision: email service</pre>
|
|
|
1241
1241
|
<footer>
|
|
1242
1242
|
<div class="container">
|
|
1243
1243
|
<a class="brand" href="#top" style="font-size:16px"><svg class="mark" style="width:22px;height:22px"><use href="#mark"/></svg>TillerHand</a>
|
|
1244
|
-
<span>Version 3.
|
|
1244
|
+
<span>Version 3.49.0 · <a href="https://github.com/burakdogrul/TillerHand">GitHub</a> · <a href="https://github.com/burakdogrul/TillerHand/blob/main/LICENSE">MIT license</a> · The KVKK section is a checklist, not legal advice.</span>
|
|
1245
1245
|
</div>
|
|
1246
1246
|
</footer>
|
|
1247
1247
|
|
package/kit/guide.tr.html
CHANGED
|
@@ -361,7 +361,7 @@ footer .container { display: flex; flex-wrap: wrap; gap: 16px; justify-content:
|
|
|
361
361
|
<section class="hero">
|
|
362
362
|
<div class="container">
|
|
363
363
|
<div>
|
|
364
|
-
<span class="pill"><b>v3.
|
|
364
|
+
<span class="pill"><b>v3.49.0</b> Claude Code için başlangıç kiti · MIT</span>
|
|
365
365
|
<h1>Kodu AI yazar.<br><em>Dümen sende.</em></h1>
|
|
366
366
|
<p class="sub">TillerHand, Claude Code ile bir ürünü fikirden canlıya ve bakıma kadar götürür. Her önemli kararda AI sana seçenekleri, önerisini ve her seçeneğin bedelini sunar. Bir uzman kurulu işi denetler, korumalar hatayı daha olmadan durdurur.</p>
|
|
367
367
|
<div class="setup">
|
|
@@ -760,13 +760,13 @@ npx tillerhand init
|
|
|
760
760
|
<div class="table-wrap"><table>
|
|
761
761
|
<thead><tr><th>Konu</th><th>Örnek kararlar</th></tr></thead>
|
|
762
762
|
<tbody>
|
|
763
|
-
<tr><td class="f">
|
|
764
|
-
<tr><td class="f">
|
|
763
|
+
<tr><td class="f">product</td><td>MVP kapsamı, öncelik, kullanıcı akışı, fiyat</td></tr>
|
|
764
|
+
<tr><td class="f">tech</td><td>Dil, framework, veritabanı, auth, hosting, kütüphane ekleme, API stili</td></tr>
|
|
765
765
|
<tr><td class="f">design</td><td>Stil yönü, renk, yazı tipi, düzen, bileşen stili, animasyon, koyu tema</td></tr>
|
|
766
|
-
<tr><td class="f">
|
|
767
|
-
<tr><td class="f">
|
|
766
|
+
<tr><td class="f">content</td><td>Metinler, ses tonu, sen/siz, başlık ve CTA alternatifleri</td></tr>
|
|
767
|
+
<tr><td class="f">data</td><td>Veri modeli, silme davranışı, saklama süresi</td></tr>
|
|
768
768
|
<tr><td class="f">security</td><td>Roller, oturum süresi, hız sınırları, kişisel veri</td></tr>
|
|
769
|
-
<tr><td class="f">
|
|
769
|
+
<tr><td class="f">cost</td><td>Ücretli servis, plan seviyesi, AI modeli, harcama limiti</td></tr>
|
|
770
770
|
</tbody>
|
|
771
771
|
</table></div>
|
|
772
772
|
<div class="note">Geri dönüşü zor kararlarda (veritabanı, auth, ödeme, veri modeli; "tek yönlü kapı") önce kurulun ve gerekirse konseyin görüşü alınır. Soru modundan bağımsız olarak her zaman onay istenir: veri silme, prod'a deploy, para harcatan işlem, geri dönülemez komutlar. Dosya ve değişken adı gibi uygulama ayrıntıları sorulmaz, raporlanır.</div>
|
|
@@ -894,7 +894,7 @@ npx tillerhand init
|
|
|
894
894
|
<p>Karpathy'nin <a href="https://github.com/karpathy/llm-council">llm-council</a> yapısı kurula uyarlandı. Ağır toplantılar ve geri dönüşü pahalı kararlar üç aşamadan geçer:</p>
|
|
895
895
|
<div class="tiles">
|
|
896
896
|
<article class="tile"><h3>1 · İlk görüşler</h3><p>Üyeler (veya farklı modellerdeki danışmanlar) birbirinden habersiz, paralel çalışır. Görüşler A, B, C diye etiketlenir; bulgular A1, A2…</p></article>
|
|
897
|
-
<article class="tile"><h3>2 · Anonim çapraz oy</h3><p>Her üye diğerlerinin görüşünü kimin yazdığını bilmeden okur, her bulguya
|
|
897
|
+
<article class="tile"><h3>2 · Anonim çapraz oy</h3><p>Her üye diğerlerinin görüşünü kimin yazdığını bilmeden okur, her bulguya AGREE · OVERSTATED · DISAGREE (doğru · abartılı · yanlış) oyu verir, eksik olanı yazar ve görüşleri sıralar.</p></article>
|
|
898
898
|
<article class="tile"><h3>Sayım (kod)</h3><p><code>council.mjs</code> ortalama sırayı, bulgu oylarını ve uzlaşma yüzdesini kodla hesaplar; model sayıyı değiştiremez.</p></article>
|
|
899
899
|
<article class="tile"><h3>3 · Başkan</h3><p>board-chair (opus) tutanağı okur, kararı yazar, çürütülen bulguları gerekçesiyle eler, azınlık görüşünü korur. Tartışmalı kritik bulguyu eleyemez; sana sorar.</p></article>
|
|
900
900
|
</div>
|
|
@@ -1094,7 +1094,7 @@ Sıradaki: G-013 şifre sıfırlama · bekleyen karar: e-posta servisi</pre>
|
|
|
1094
1094
|
<article class="tile"><h3>Mobil test ve servisler</h3><p class="stack">Maestro · Expo MCP · servis kataloğu</p><ul><li>Kabul testleri cihazda veya simülatörde</li><li>EAS build, TestFlight çökme kayıtları</li><li>GitHub, Stripe, PostHog, Figma: servis seçilince</li></ul></article>
|
|
1095
1095
|
<article class="tile"><h3>Ölçüm ve maliyet</h3><p class="stack">Playwright CLI · Chrome DevTools MCP · ccusage</p><ul><li>Konsol, ağ, ekran görüntüsü CLI ile; performans izi MCP ile</li><li>Proje başına token ve maliyet panoda</li></ul></article>
|
|
1096
1096
|
<article class="tile"><h3>Geri alma</h3><p class="stack">/rollback · checkpoint.mjs</p><ul><li>Testler yeşilken çalışan nokta kaydedilir</li><li>Geri dönüş yeni bir commit'tir, geçmiş silinmez</li><li>Yarım iş saklanır, .env'e dokunulmaz</li></ul></article>
|
|
1097
|
-
<article class="tile"><h3>Senin dilinde</h3><p class="stack">.kit.json → lang</p><ul><li><code>/start</code> ve <code>/adopt</code> ilk iş dili sorar: Turkish / English / Other</li><li>Sorular, cevaplar, belgeler, pano ve durum çubuğu o dilde; <code>/language</code> ile değişir</li></ul></article>
|
|
1097
|
+
<article class="tile"><h3>Senin dilinde</h3><p class="stack">.kit.json → lang</p><ul><li><code>/start</code> ve <code>/adopt</code> ilk iş dili sorar: Turkish / English / Other</li><li>Sorular, cevaplar, belgeler, pano ve durum çubuğu o dilde; <code>/language</code> ile değişir</li><li>Other: AI hook metinlerini bir kez çevirir; çeviriyi kaydetmek senin onayını ister</li><li>Proje dosyalarındaki etiket ve anahtarlar (<code>**Active phase:**</code>, <code>APPROVE</code>) İngilizce kalır: araçlar onları okur</li></ul></article>
|
|
1098
1098
|
<article class="tile"><h3>Anlatıcı mod</h3><p class="stack">output style: narrator</p><ul><li>Her adımdan sonra: ne yaptım, neden, nasıl görürsün</li><li>Görev sonunda en fazla 2 anlama sorusu; cevaplar panoda</li></ul></article>
|
|
1099
1099
|
<article class="tile"><h3>Harcama alarmı</h3><p class="stack">spend-alarms.md · pano</p><ul><li>Sağlayıcı tavanı ve %50/%80 uyarısı</li><li>Kodda kullanıcı kotası, günlük bütçe, otomatik kapatma</li><li>/release ve /maintain kontrol eder</li></ul></article>
|
|
1100
1100
|
</div>
|
|
@@ -1188,7 +1188,7 @@ Sıradaki: G-013 şifre sıfırlama · bekleyen karar: e-posta servisi</pre>
|
|
|
1188
1188
|
<tr><td class="f">/retro</td><td>Dersleri projeye yazar; kite önerileri TillerHand reposunda bir dala</td></tr>
|
|
1189
1189
|
<tr><td class="f">/research [konu]</td><td>Makaleler, GitHub'daki benzer projeler ve rakip ürünler; fark tablosu; seçilen özellikler PRD'ye</td></tr>
|
|
1190
1190
|
<tr><td class="f">/handoff [take]</td><td>Projeyi başka kişiye veya hesaba devreder ya da devralır; aynı yerden devam</td></tr>
|
|
1191
|
-
<tr><td class="f">/tools [
|
|
1191
|
+
<tr><td class="f">/tools [on|off|measure|commands]</td><td>Bağlam paketlerini gösterir, açar veya kapatır; skill yükünü ölçer; komut listesini hafif veya tam yapar</td></tr>
|
|
1192
1192
|
<tr><td class="f">/kit-update</td><td>Projeyi TillerHand'in son sürümüne çeker; çakışmaları sorar; <code>--tool</code> ile araç, <code>--addons</code> ile ek ekler</td></tr>
|
|
1193
1193
|
<tr><td class="f">/language [dil]</td><td>Konuşma dilini değiştirir (Türkçe, İngilizce ya da başka bir dil); hook metinlerinin çevirisini ve panoyu yeniler</td></tr>
|
|
1194
1194
|
</tbody>
|
|
@@ -1245,7 +1245,7 @@ Sıradaki: G-013 şifre sıfırlama · bekleyen karar: e-posta servisi</pre>
|
|
|
1245
1245
|
<footer>
|
|
1246
1246
|
<div class="container">
|
|
1247
1247
|
<a class="brand" href="#top" style="font-size:16px"><svg class="mark" style="width:22px;height:22px"><use href="#mark"/></svg>TillerHand</a>
|
|
1248
|
-
<span>Sürüm 3.
|
|
1248
|
+
<span>Sürüm 3.49.0 · <a href="https://github.com/burakdogrul/TillerHand">GitHub</a> · <a href="https://github.com/burakdogrul/TillerHand/blob/main/LICENSE">MIT lisansı</a> · KVKK bölümü kontrol listesidir, hukuki görüş değildir.</span>
|
|
1249
1249
|
</div>
|
|
1250
1250
|
</footer>
|
|
1251
1251
|
|
package/kit/kit.mjs
CHANGED
|
@@ -45,6 +45,7 @@ const PERSONAL = /(^|\/)(\.env(\.(?!example(\.|$))[^/]*)?|secrets\/.*|\.claude\/
|
|
|
45
45
|
// The rest belong to the project (CLAUDE.md, PRD, stack, settings.json...); the update only adds them if missing.
|
|
46
46
|
const KIT_OWNED = [
|
|
47
47
|
/^\.claude\/(commands|agents|hooks|board|findings|skills)\//,
|
|
48
|
+
/^\.claude\/i18n\/tr\.json$/,
|
|
48
49
|
/^docs\/(security\/checklist|operations\/(release-checklist|maintenance|deploy-setup)|legal\/(privacy-kvkk|turkiye)|workflow\/(decision-protocol|skills|usage-limits|models))\.md$/,
|
|
49
50
|
];
|
|
50
51
|
const isKitOwned = (rel) => KIT_OWNED.some((re) => re.test(rel));
|
|
@@ -112,18 +113,16 @@ export function merge(a, b) {
|
|
|
112
113
|
return b;
|
|
113
114
|
}
|
|
114
115
|
|
|
115
|
-
// Rules
|
|
116
|
-
// the user wrote is never removed.
|
|
116
|
+
// Rules older kits added that match nothing now or were too broad. Exact spelling only, so a rule the user wrote is never removed.
|
|
117
117
|
const OLD_RULES = {
|
|
118
|
-
allow: [
|
|
119
|
-
'Bash(node .claude/hooks/tools.mjs --gerekli:*)', 'Bash(node .claude/hooks/tools.mjs --olc)', 'Bash(node .claude/hooks/tools.mjs --kapat:*)',
|
|
118
|
+
allow: [
|
|
120
119
|
// 3.19.1: in the project folder the CLI loads a repo's .playwright/cli.config.json (it can run a program); asked, not allowed
|
|
121
120
|
...['open', 'snapshot', 'console', 'requests', 'screenshot'].map((c) => `Bash(npx -y @playwright/cli@0.1.22 ${c}:*)`),
|
|
122
121
|
// 3.28.0: --plan-end + --plan-save widened or dropped the scope shield unasked; both are asked now
|
|
123
122
|
'Bash(node .claude/hooks/freeze-guard.mjs --plan-save:*)', 'Bash(node .claude/hooks/freeze-guard.mjs --plan-end)',
|
|
124
123
|
// 3.10.0 allowed every tools.mjs flag; --enable and --commands are asked since 3.10.1, the broad rule skipped that
|
|
125
124
|
'Bash(node .claude/hooks/tools.mjs:*)'],
|
|
126
|
-
ask: [
|
|
125
|
+
ask: [],
|
|
127
126
|
};
|
|
128
127
|
|
|
129
128
|
// settings.json belongs to the project and is not replaced on update, but the kit's permission rules must reach it:
|
|
@@ -153,11 +152,6 @@ export function migrateSettings(projectSettings, kitSettings) {
|
|
|
153
152
|
s.skillOverrides = { ...kitSettings.skillOverrides };
|
|
154
153
|
added.push(`skillOverrides: ${Object.keys(s.skillOverrides).length} commands are listed by name only (in the Full profile: node .claude/hooks/tools.mjs --commands full)`);
|
|
155
154
|
}
|
|
156
|
-
for (const groups of Object.values(isObject(s.hooks) ? s.hooks : {})) {
|
|
157
|
-
for (const h of (Array.isArray(groups) ? groups : []).flatMap((g) => (Array.isArray(g?.hooks) ? g.hooks : []))) {
|
|
158
|
-
if (typeof h?.command === 'string') h.command = h.command.replace(/(dashboard\.mjs"?)\s+--sessiz\b/, '$1 --quiet');
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
155
|
return { settings: s, added, removed };
|
|
162
156
|
}
|
|
163
157
|
|
|
@@ -383,9 +377,9 @@ function install({ type, addons, keepKit, project, tool }) {
|
|
|
383
377
|
copy(path.join(KIT, 'project', 'README.md'), path.join(ROOT, 'README.md'));
|
|
384
378
|
for (const rel of KIT_ONLY) fs.rmSync(path.join(ROOT, rel), { force: true });
|
|
385
379
|
|
|
386
|
-
const
|
|
380
|
+
const tracked = new Set([...listFiles(ROOT, COMMON_EXCLUDE), ...copies.keys()]);
|
|
387
381
|
const files = {};
|
|
388
|
-
for (const rel of [...
|
|
382
|
+
for (const rel of [...tracked].sort()) if (fs.existsSync(path.join(ROOT, rel))) files[rel] = hash(path.join(ROOT, rel));
|
|
389
383
|
installTools(ROOT, tools, files, []);
|
|
390
384
|
const today = new Date().toISOString().slice(0, 10);
|
|
391
385
|
const lang = readLang(ROOT); // chosen by /start before install (.claude/state/lang.json); null if not
|
|
@@ -400,34 +394,6 @@ function install({ type, addons, keepKit, project, tool }) {
|
|
|
400
394
|
}
|
|
401
395
|
}
|
|
402
396
|
|
|
403
|
-
// Kit files that got a new name (3.48: English). An unchanged old copy goes away and the new one is copied as usual;
|
|
404
|
-
// one the user changed stays where it is (reported), so nothing they wrote is lost.
|
|
405
|
-
const RENAMED = { '.claude/output-styles/anlatici.md': '.claude/output-styles/narrator.md' };
|
|
406
|
-
const RENAMED_STYLES = { anlatici: 'narrator' };
|
|
407
|
-
function renameKitFiles(project, record, report) {
|
|
408
|
-
for (const [from, to] of Object.entries(RENAMED)) {
|
|
409
|
-
const old = path.join(project, from);
|
|
410
|
-
if (!fs.existsSync(old)) { delete record[from]; continue; }
|
|
411
|
-
if (record[from] === hash(old)) { fs.rmSync(old); delete record[from]; report.updated.push(`${from} -> ${to}`); continue; }
|
|
412
|
-
// Changed by the user: theirs from now on (no longer tracked, so it is not reported again), and their style setting stays
|
|
413
|
-
if (from in record) report.conflicts.push(`${from} (renamed to ${to} in the kit; yours was changed, so it stays and keeps working)`);
|
|
414
|
-
delete record[from];
|
|
415
|
-
delete RENAMED_STYLES[path.basename(from, '.md')];
|
|
416
|
-
}
|
|
417
|
-
// The setting that picks the style by name: personal (settings.local.json) or for the team (settings.json)
|
|
418
|
-
for (const name of ['settings.local.json', 'settings.json']) {
|
|
419
|
-
const file = path.join(project, '.claude', name);
|
|
420
|
-
try {
|
|
421
|
-
const s = JSON.parse(read(file));
|
|
422
|
-
if (Object.hasOwn(RENAMED_STYLES, s.outputStyle)) {
|
|
423
|
-
s.outputStyle = RENAMED_STYLES[s.outputStyle];
|
|
424
|
-
fs.writeFileSync(file, JSON.stringify(s, null, 2) + '\n');
|
|
425
|
-
report.updated.push(`.claude/${name} (outputStyle: ${s.outputStyle})`);
|
|
426
|
-
}
|
|
427
|
-
} catch { /* no such settings, or not JSON: leave it */ }
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
|
|
431
397
|
function update({ project, addons: newAddons, tool }) {
|
|
432
398
|
project = path.resolve(project);
|
|
433
399
|
const recordPath = path.join(project, '.kit.json');
|
|
@@ -441,7 +407,6 @@ function update({ project, addons: newAddons, tool }) {
|
|
|
441
407
|
|
|
442
408
|
const { copies, patches } = layers(ROOT, layerNames(j.type, allAddons));
|
|
443
409
|
const report = { added: [], updated: [], conflicts: [], removed: [] };
|
|
444
|
-
renameKitFiles(project, record, report);
|
|
445
410
|
const addedAddons = newAddons.filter((e) => !oldAddons.includes(e)).map((e) => `addons/${e}`);
|
|
446
411
|
const fromAddedAddon = (source) => addedAddons.some((a) => source.startsWith(path.join(TEMPLATES, a) + path.sep));
|
|
447
412
|
|
|
@@ -458,7 +423,7 @@ function update({ project, addons: newAddons, tool }) {
|
|
|
458
423
|
try {
|
|
459
424
|
local = JSON.parse(read(target));
|
|
460
425
|
migrated = migrateSettings(local, JSON.parse(read(source)));
|
|
461
|
-
} catch (e) { report.conflicts.push(`${rel} (
|
|
426
|
+
} catch (e) { report.conflicts.push(`${rel} (permissions not added: ${e.message})`); continue; }
|
|
462
427
|
if (JSON.stringify(migrated.settings) !== JSON.stringify(local)) {
|
|
463
428
|
fs.writeFileSync(target, JSON.stringify(migrated.settings, null, 2) + '\n');
|
|
464
429
|
const notes = [migrated.added.length && `added: ${migrated.added.join(' · ')}`, migrated.removed.length && `removed old lines: ${migrated.removed.join(' · ')}`].filter(Boolean);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# AI add-on: the kit appends these lines to the end of the project's .env.example file
|
|
2
2
|
ANTHROPIC_API_KEY= # server only
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
AI_MODEL_DEFAULT= # current model id from the provider docs
|
|
4
|
+
AI_MODEL_FAST= # small/cheap model for simple jobs
|
|
5
|
+
AI_USER_DAILY_LIMIT=50 # daily request limit per user
|