verify
Skill452 starsChanged 10 days agoApache-2.0View on GitHub
Review implementation ownership and verify kitcn packages, the CLI and its `kitcn init -t` scaffolds, prepared scenario apps, auth lanes, and the www docs and example app through their actual proof owners. Use before writing a plan's proof gates, before writing or changing any test, before claiming a fix works, before calling a failure pre-existing or unrelated, before closing any change with a browser-visible result, when choosing a scenario's proof path, and when a test is flaky, contaminated by another file or times out.
- Reads credentials
188 other projects use a version of this.
Adopted by
Most recently taken up by
- Doist/todoist-aitheir own version, first seen Nov 9, 2026
- pytorch/heliontheir own version, first seen Nov 8, 2026
- amir20/dozzletheir own version, first seen Nov 8, 2026
- Doist/todoist-clitheir own version, first seen Nov 8, 2026
- codewithmukesh/dotnet-claude-kittheir own version, first seen Nov 8, 2026
- pedrohcgs/claude-code-my-workflowtheir own version, first seen Nov 8, 2026
Used with
Projects with it also use instinct-export, instinct-import and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
TheKREATORSSkillinstinct-export
Export instincts from project/global scope to a file
Also in 3 projects that use this
TheKREATORSSkillinstinct-import
Import instincts from file or URL into project/global scope
Also in 3 projects that use this
AviadPSkillrisk-assess
Assess the risk and blast radius of a proposed code change before implementing it. Evaluates CI impact, framework-wide vs localized scope, rollback path, and identifies blindspots. Use when user says "what's the risk", "is this safe", "assess the impact", "risk assess", "blast radius", or before applying framework-wide or CI-affecting changes. Do NOT use for code quality review (use code-quality) or plan validation (use design-validator).
Also in 3 projects that use this
diego-tobalinaSkillbuild-fix
Fix build and compilation errors systematically. Run when build fails.
Also in 6 projects that use this
AaravChadhaSkillsecure
Security review with a confidence gate - a finding exists only with a concrete exploit scenario and a high/medium/low confidence rating; everything else goes to a worth-hardening list, never inflated. Sweeps five surfaces: auth gates, secrets hygiene, injection and unsafe sinks, unsafe deserialization/crypto/transport, and LLM tool-use trust boundaries. Reports only, never fixes. Use when the user asks for a security review or to check vulnerabilities, secrets, or auth.
Also in 3 projects that use this
ArvorCoSkillspecify
Create feature specification from natural language description. Use when starting a new feature or creating a spec. Triggers on: create spec, specify feature, new feature spec.
Also in 10 projects that use this
- +1 more from TheKREATORS
Other versions188 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 188
- react/react★ 252ksame name
- facebook/react★ 252ksame name
- garrytan/gstack★ 141ksame name
- oven-sh/bun★ 97ksame name
- anthropics/financial-services★ 41ksame name
- anthropics/financial-services-plugins★ 41ksame name
- Yeachan-Heo/oh-my-claude-sisyphus★ 41ksame name
- Yeachan-Heo/oh-my-claudecode★ 41ksame name
- anthropics/claude-quickstarts★ 19ksame name
- NVIDIA-NeMo/Speech★ 19ksame name
178 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository30 other files it gives its agents.
- AGENTS.mdAGENTS.md
- 4-ultraciteSkill
- agent-browser-issueSkill
- better-auth-best-practicesSkill
- changeset-doc-syncSkill
- changeset-resolveSkill
- changesetSkill
- chipsSkill
- cleanupSkill
- component-colocationSkill
- concave-paritySkill
- concaveSkill
- convex-release-auditSkill
- designSkill
- jotai-xSkill
- kitcnSkill
- next-dev-loopSkill
- nextjsSkill
- package-release-auditSkill
- plan-pageSkill
- react-querySkill
- redoSkill
- research-wikiSkill
- shadcn-paritySkill
- sync-convex-authSkill
- test-auditSkill
- toastSkill
- turborepoSkill
- video-transcriptsSkill
- walkthroughSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
21 rules. 0 are common, 13 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 167 edited versions we read keep these.
13
Distinctive
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 20
Before you choose proof, state the reported setup, input, expected result and any necessary follow-up.
- Distinctive: line 42
Keep the review proportional.
- Distinctive: line 47
Check that the proof observes the user invariant.
- Very specific: line 104
Read resolveScenarioProofPath in tooling/scenarios.ts for the key's proof path.
- Very specific: line 125
Run test:e2e only when an auth page or flow changed.
- Distinctive: line 128
If a scenario has no real browser auth page, do not invent one.
- Distinctive: line 141
Run from the current checkout.
- Distinctive: line 166
Library only: Use the package test and type scripts.
- Distinctive: line 168
Run one scenario dev process at a time per checkout.
- Distinctive: line 177
Run these read-only checks before driving and after anything surprising:
- Distinctive: line 189
When the process is healthy but the app state is wedged, reset to a known state or relaunch.
- Very specific: line 202
If not, debug the code. Reinstalling is never a substitute for fixing a real code error.
- Distinctive: line 218
Browser: Use the runtime's browsers in this order:
- Distinctive: line 232
When the in-app browser hits a known limit and native proof matters, switch to Chrome or computer use.
- Distinctive: line 240
Docs: Wait for the page heading and rendered body after navigation.
- Very specific: line 243
CLI: Run the command inside a prepared scenario project, never in fixtures/* or the example app.
- Very specific: line 249
Scaffolds: After any init -t template or scaffold change, run bun run fixtures:sync and then bun run fixtures:check, with no exceptions.
- Very specific: line 262
Keep command logs, the route and host, the input or action, the observed result, runtime errors and screenshots under the main checkout's …
- Very specific: line 284
Run it before a PR, after bun lint:fix.
- Distinctive: line 288
Stop only the processes you started, by their handle or a PID you verified.
- Very specific: line 289
Never kill by process name, and never stop another checkout's listener.
“Common” is measured: kept by at least 6 in 10 of the 167 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Verify
This is the driver skill for pstack's Bug fix playbook. It owns implementation
acceptance, proof selection, launch, doctor, driving and evidence for kitcn.
Its testing reference, .agents/rules/verify/references/testing.md, owns Bun
and React test design, suite contamination and flaky failures. Read that
reference in full before you write, change or debug a test.
Completion boundary
Before you choose proof, state the reported setup, input, expected result and any necessary follow-up. Keep them in the existing task plan or case.
Select the smallest proof owner that can observe each required result. A unit test can diagnose a scaffold, runtime or browser defect without proving it. A committed fixture snapshot proves generated output, not that the generated app runs. A scenario that reaches ready proves runtime startup, not a browser auth flow.
A follow-up from the reporter adds to the original acceptance. It never replaces it. A narrower green test cannot discard an original requirement.
Report local verification separately from publication. A green local proof says nothing about a published package until the packed artifact is checked.
Review the implementation
For a changed implementation, review the final diff, its owning path and the consumers that use it differently before you accept verification. Do this before an expensive final replay. An existing review of the same candidate counts.
- Keep the review proportional. A direct local correction needs a direct source check, not an architecture exercise.
- Each added effect, subscription, timer, cache, retry or fallback must earn its place through a current requirement and a correct lifetime. Remove the cause when you can, instead of compensating for it.
- Check that the proof observes the user invariant. A mock of the owner or an assertion on the new mechanism can hide the original design error.
- Scaffold output has one owner, the package scaffold source. A fix applied to
example/output, an example plugin file orfixtures/**first is in the wrong owner. Change the package template, then regenerate with the CLI (kitcn add ... --overwritefor plugins,bun run fixtures:syncfor fixtures).
Record the conclusion and its decisive source evidence in the task plan or handoff. A verified ownership defect keeps the work open even when tests pass. A clean design does not replace runtime proof, and passing runtime proof does not accept a deficient design.
Canonical inventory
Discover the inventory from these owners. Do not keep a second feature map or a
hand-maintained coverage count. pstack:maintain-verification-skill works on
this file and these owners.
| Surface | Inventory owner | Proof and driving recipe | ||
| Package behavior | packages/* sources and their *.test.ts, *.vitest.ts and *.test-d.ts files; convex/**/*.test.ts | bun run test runs bun test (root ./packages, preload tooling/test-setup.ts) and then vitest run (vitest.config.mts, the integration and solid projects). Run one file first with bun test <file> or bunx vitest run <file>. | ||
| Types | turbo typecheck across workspaces | bun typecheck. Typecheck is source-first, so do not build a package just to run types. | ||
| Package artifact and exports | packages/kitcn/package.json exports and build output | bun --cwd packages/kitcn build after any package change and for any artifact or export claim. bun run intent:pack lists what would publish. | ||
| CLI commands | packages/kitcn/src/cli/ | bun run test:cli runs cli.commands.ts with CI=1. A behavior claim about a command also runs that command in a prepared scenario project. | ||
kitcn init -t scaffolds | tooling/template.config.ts; committed output in fixtures/* | bun run fixtures:sync, then bun run fixtures:check. fixtures:check:full builds the package and checks the full scope. | ||
| Runtime scenarios | SCENARIO_KEYS and SCENARIO_DEFINITIONS in tooling/scenario.config.ts; resolveScenarioProofPath in tooling/scenarios.ts | The proof path for each key, as Scenario proof says. | ||
| Concave backend | test/concave/ | bun run test:concave. | ||
kitcn verify in a fresh app | test:verify in root package.json | bun run test:verify prepares create-convex-bare and runs bunx kitcn verify inside it. | ||
| www docs | www/content/docs/**, www/app/ | bun dev serves the docs app. Drive the route in the browser. | ||
| Example app | example/ (Next on port 3005 with a kitcn Convex backend) | The example launch and a browser drive. | ||
| Auth browser flows | tooling/auth-smoke.ts, tooling/auth-e2e.ts | `bun run test:auth -- <name | url>andbun run test:e2e -- <name | url>` against a running app. |
For each selected item, record its user entry, setup and action, expected effect and gotchas from the source and its existing proof. A file count is discovery only.
Scenario proof
Committed fixtures/* are sources only. Never run them in place. Each runnable
app is prepared into tmp/scenarios/<name>/project. fixtures:* commands own
the committed snapshot sync and check. scenario:* commands own the runnable
temporary apps.
bun run scenario:prepare -- <name>
bun run scenario:dev -- <name>
bun run scenario:check -- <name>
bun run scenario:test -- <name>
bun run test:runtimescenario:test -- <name> runs the key's whole proof path and stops what it
started. test:runtime runs scenario:test -- runtime, which is every key
whose proof path is not check, and is the default non-browser runtime gate.
test:auth and test:e2e assume the scenario already runs.
Read resolveScenarioProofPath in tooling/scenarios.ts for the key's proof
path. It returns one of four paths:
runtime. Prepare, runscenario:devuntil the ready URL answers, then stop.scenario:test -- <name>does all three.auth-demo(next-auth,start-auth). The runtime proof plustest:auth, whichscenario:testruns once the app is ready. This proves runtime and auth smoke only. Browser auth proof is the separatetest:e2elane. Prepare, startscenario:dev, then runbun run test:e2e -- <name>.auth-runtime(expo-auth,vite-auth). The runtime proof only. These apps have no/authpage or other browser auth page. Do not faketest:e2eor addtest:authhere unless the registry grows an auth proof lane for them.check(the bootstrap-heavy Convex keys inBOOTSTRAP_CHECK_SCENARIOS).bun run scenario:check -- <name>is the proof. Do not replace it with an ad-hocscenario:dev. Fresh kitcn lanes bootstrap duringscenario:preparethroughkitcn init -t <next|vite> --yes, then finish with an in-placekitcn init --yesafter plugin setup. The raw Convex auth adoption lanes ownconvex initpluskitcn add auth --preset convex --yes. They are not anext-authbrowser demo, so do not invent/authfor them.
Run test:e2e only when an auth page or flow changed. Default bun check never
depends on it.
If a scenario has no real browser auth page, do not invent one. Stop once the assigned proof path succeeds. Do not keep poking the app after that.
Re-run bun run scenario:prepare -- <name> once when any of these holds:
- package or scaffold source changed after the app was prepared;
- the app is missing expected local env or generated files.
Otherwise reuse the prepared app. If it still fails after one re-prepare, debug the cause. Do not loop on re-prepare.
Launch
Run from the current checkout. Read the relevant script first, and never reuse a port or path from another checkout. Start each long-running process in the background and keep its handle for cleanup.
- A fresh worktree needs its env files and dependencies first. Copy every
nested
.envand.env.localfrom the source checkout, includingexample/.env.localandexample/convex/.env, then runbun install.bun installalso regenerates the skills from.agents/rules. Before the first scenario or fixture run, runbun run build:pkg. Scenario prepare buildskitcnitself but packspackages/resend/distas it is, so without that build it fails withENOENTon that folder. - Pick the launch that matches the surface:
- Scenario.
bun run scenario:dev -- <name>afterscenario:prepare. It starts the app and its backend fromtmp/scenarios/<name>/project. It is ready when the URL in the project'sNEXT_PUBLIC_SITE_URLorVITE_SITE_URLanswers, orhttp://127.0.0.1:3210/_dashboardwhen the project has no site URL. The app's dev port starts at 3005 and moves up when that port is taken. - www docs.
bun devrunsnext devinwww. It is ready when Next prints its ready line and the route renders. - Example app.
bun --cwd example devrunsmprocs, a terminal UI an agent cannot drive. Start its two processes instead,bun --cwd example convex:devandbun --cwd example dev:app. The app is ready whenNEXT_PUBLIC_SITE_URL(port 3005) renders the route and the backend atNEXT_PUBLIC_CONVEX_URLanswers. - Library only. Use the package test and type scripts. No app launch is needed unless the claim depends on rendering or a running backend.
- Scenario.
- Run one scenario dev process at a time per checkout. Scenarios share the local Convex backend port, so two at once can drive the wrong backend.
Ready means the route renders current source. A process that listens is not proof. If a launch fails, capture its output and clean what you started before another attempt.
Doctor
Run these read-only checks before driving and after anything surprising:
- Bind the process to this checkout. On macOS,
lsof -nP -iTCP:<port> -sTCP:LISTENnames the listener andlsof -a -p <pid> -d cwd -Fnits cwd. A listener from another checkout is not yours to use or stop. - Request the route with
curl --fail --silent --show-error <url>, then open it in the browser. HTTP success proves reachability only. The browser must show the route without a build error or overlay. - For a scenario, read
tmp/scenarios/<name>/.kitcn-scenario/scenario.json. ItskitcnPackageSpecandstepsname what the app was prepared from. If package or scaffold source changed since, re-prepare once. - When the process is healthy but the app state is wedged, reset to a known state or relaunch. A failed drive always runs doctor and cleanup before another attempt.
Two failure shapes have a known local recovery. Run each recovery once, then rerun the exact failing command:
- Local env rot. Typecheck, build, dev or a test fails with missing-module
or package-resolution errors the diff does not explain, or with local React
runtime errors (
Invalid hook call, a null dispatcher inresolveDispatcher(), a package-localnode_modules/reactunderpackages/*, mixed.bunand.pnpmReact paths in one stack). Runbun installonce. If the failure changes or disappears, it was env rot. If not, debug the code. Reinstalling is never a substitute for fixing a real code error. If you seefailed to load config from .../vitest.config.mts, remove every**/node_modulesand install again. fixtures:syncEPIPE.bun run fixtures:syncdies with a Convex or esbuildEPIPE,The service was stoppedorTimed out waiting for local Convex bootstrap. Kill the stale esbuild and Convex workers this checkout's earlier runs left, found by cwd withlsof, once, then rerun the sync. If the workers stay in theUstate afterkill -9, the host needs a reboot. Ask the owner for it.
Drive
Drive the real user path. Prefer stable handles such as route paths, ARIA labels, visible text and CLI flags over coordinates.
Browser. Use the runtime's browsers in this order:
- The in-app browser first, for route navigation, DOM checks, forms, screenshots, responsive checks and rendered UI proof. In Claude Code that is the Browser pane. In Codex it is the Browser plugin.
- Chrome directly when the claim involves native browser, profile or OS behavior, such as downloads, print preview, file pickers, uploads, clipboard, permissions, dialogs, extension or profile state, or exact Chrome rendering. In Claude Code that is Claude in Chrome. In Codex it is the Chrome plugin. Browser proof alone does not close such a claim.
- Computer use only when native Chrome or OS UI must be inspected or operated and Chrome automation cannot read it, such as print preview, save and open dialogs or permission sheets.
When the in-app browser hits a known limit and native proof matters, switch to Chrome or computer use. Do not lower the claim or ask the owner to confirm. Do not substitute Puppeteer, standalone Playwright or raw Chrome DevTools for these browsers.
For a UI change, cover the route at each breakpoint it changes and every state
the design skill's Honest States list names that the change touches.
Docs. Wait for the page heading and rendered body after navigation. HTTP success and title metadata can arrive before the content.
CLI. Run the command inside a prepared scenario project, never in
fixtures/* or the example app. Use --yes for non-interactive runs and
--json when the claim is about output. Check the files the command wrote, its
stdout and its exit code. A dry run is a separate claim from a write run, so
observe the files for each.
Scaffolds. After any init -t template or scaffold change, run
bun run fixtures:sync and then bun run fixtures:check, with no exceptions.
The sync regenerates every file under fixtures/**, including each committed
fixture package.json. Never patch a fixture file by hand. Review the fixture
diff the sync produced as part of the proof.
Auth. Prepare and start the scenario, then run bun run test:auth -- <name>
for auth smoke or bun run test:e2e -- <name> for the browser auth lane. Pass a
URL instead of a name to drive another running app, such as the example app at
http://localhost:3005.
Evidence
Keep command logs, the route and host, the input or action, the observed
result, runtime errors and screenshots under the main checkout's
docs/plans/artifacts/<task-slug>/, written by absolute path. Git ignores that
folder, and removing a worktree would delete a copy kept inside it. Never
commit proof logs. Keep the concise conclusion and the proof references in the
task plan.
Each base, candidate and control run writes its own named log. Capture the action and the resulting state, plus follow-up input and side effects such as files written, rows inserted or emails sent when the claim needs them. Mock only a boundary production code already isolates, and say what the mock cannot prove. A test run that prints an uncaught error stack is not green even when the runner reports a pass.
A requested gate that fails keeps the work open until the same gate passes on the final bytes. Calling a failure unrelated does not close it. Only the same command failing the same way at the base commit, run in a clean detached worktree, makes it pre-existing.
The final repo gate is bun check. bun check --list names its steps: the
package build, intent validation, lint, typecheck, the Bun, Vitest, tooling,
CLI and Concave tests, fixtures:check, test:verify and test:runtime.
Run it before a PR, after bun lint:fix. bun check <step> reruns one step.
Cleanup
Stop only the processes you started, by their handle or a PID you verified.
Never kill by process name, and never stop another checkout's listener. Stop
spawned scenario dev processes once their proof succeeds or fails.
scenario:test and scenario:check stop what they start. Remove only this
run's temporary state. A prepared tmp/scenarios/<name> may stay for reuse.
Then confirm every cited evidence file still exists. Cleanup that deletes evidence invalidates the run.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

