build
Skill4 starsChanged 53 days agoUnlicenseView on GitHub
Authoritative commands and conventions for building and QA-ing code in this repo (Node.js, Python, Rust/Anchor, Terraform, Bruno). Use for ANY code change — editing, building, upgrading, linting, testing, formatting — including one-off and ad-hoc work that is not part of a spec feature. This is the general reference and the default; it is not tied to the spec-driven workflow.
- Reads credentials
156 other projects use a version of this.
Adopted by
Most recently taken up by
- jskswamy/skillstheir own version, first seen Nov 8, 2026
- domengabrovsek/agent-configtheir own version, first seen Nov 8, 2026
- domengabrovsek/claudetheir own version, first seen Nov 8, 2026
- lilly-builds/senior-engineer-modetheir own version, first seen Nov 8, 2026
- endqwerty/endstacktheir own version, first seen Nov 8, 2026
- DnsQueen/orcinus-skillstheir own version, first seen Nov 8, 2026
Used with
Projects with it also use backprop, finances 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.
JuliusBrusseeSkillbackprop
Bug → spec protocol. When a bug is found or a test fails, trace the cause, decide whether a new §V invariant would catch recurrence, append to §B. This is the one non-obvious thing SDD does that plan-then-execute doesn't. Triggers on test failure, bug report, post-mortem, or explicit user ask.
Also in 4 projects that use this
GerardoRdz96Skillfinances
Use when Gera talks about his money — logging an expense ("I spent X on Y"), checking where he stands this pay-period, closing a period, planning debt payoff, onboarding his financial picture, or asking for budgeting/finance opinions. Servy's financial brain. Triggers — "I spent", "log this expense", "where am I this period", "close the period", "how's my budget", "debt plan", "should I pay off", "finances onboard", "/finances".
Also in 3 projects that use this
cpiprintSkillfavicon
Generate favicons from a source image
Also in 3 projects that use this
madeehahassanSkillGo-Live
Pre-launch checklist. Use before making any app public, sharing a link externally, or announcing a product launch. Adapts to Claude Code, claude.ai, and Cowork.
Also in 3 projects that use this
JuliusBrusseeSkilldeepen
Optional design-improvement pass for when you have spare usage to drain. Finds the shallowest modules in the code the spec touches, researches a deeper design, and proposes refactors that shrink interfaces and hide decisions — behavior held constant, tests green before and after. Proposes §I/§V/§T edits, never silent rewrites. Triggers when the user says "deepen this", "improve the design", "this module feels shallow", "pull complexity down", "use spare budget on the codebase", or invokes /ck:deepen. Leans on the codebase-design skill's deep-module vocabulary when present.
Also in 3 projects that use this
synaptiaiSkillgate
Create a BDSK review_gate artifact. Defines a checkpoint that controls whether generated output may proceed toward acceptance. Use when defining quality, security, or scope gates for execution plans.
Also in 5 projects that use this
Other versions156 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 156
- FalkorDB/FalkorDB★ 10ksame name
- microsoft/microsoft-ui-xaml★ 8.6ksame name
- NexaAI/nexa-sdk★ 8.5ksame name
- hathach/tinyusb★ 7.3ksame name
- parcadei/Continuous-Claude★ 3.9ksame name
- parcadei/Continuous-Claude-v2★ 3.9ksame name
- parcadei/Continuous-Claude-v3★ 3.9ksame name
- pytorch/TensorRT★ 3ksame name
- oxsecurity/megalinter★ 2.6ksame name
- iPlug2/iPlug2★ 2.4ksame name
146 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 repository6 other files it gives its agents.
- .claude/CLAUDE.mdCLAUDE.md
- grillingSkill
- new-adrSkill
- spec-buildSkill
- spec-ideateSkill
- spec-tasksSkill
The file
We split this skill into the rules it gives an agent
2 rules. 0 are common, 2 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 143 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 68
Prefer snake case for file and directory names.
- Distinctive: line 82
What to expose vs not: If it is reusable beyond the feature that introduced it — expose it.
“Common” is measured: kept by at least 6 in 10 of the 143 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
build
The single source of truth for how to build and verify code in this repo. Consult it before and while changing any
code. It is used directly for everyday work (e.g. "fix this lint error", "upgrade Node to v24") and is composed by the
spec-build skill during spec-driven, per-task delivery.
When to use
The default for any code change anywhere in the repo — editing, building, upgrading, linting, testing, formatting —
including one-off and ad-hoc work. This is the skill to reach for unless you are explicitly working through a planned
spec feature's task list (in which case use spec-build, which composes this skill).
Common commands
docker compose --profile blockchain up- runs the local infrastructure (this is normally up and running).docker compose --profile blockchain --profile api up- runs the local infrastructure including the APIs.fnmused for local Node.js, and version is specified in.node-version.node --run test- runs the Node.js unit tests.uvused for local Python; config in./pyproject.toml.uv run python -m unittest -vruns the Python unit tests.node --run apito run the local Node.js API.node --run api:bru:fastifyto run the Bruno integration tests against the running Fastify API.uv run python -m fragments.apito run the local Python API.node --run api:bru:fastapito run the Bruno integration tests against the running FastAPI API.solanaandanchorCLI commands are available locally.- Further
anchorCLI commands available once you change directory into./fragments/blockchain/solana/, e.g.:anchor test(orcargo test -p program-tests) runs the Rust unit tests.anchor buildto build all programs.
terraform login- one-time, authenticates against HCP Terraform.TF_CLOUD_ORGANIZATIONmust be set in the environment for any terraform command that contacts HCP (init, plan, apply, etc.) — thecloud {}block in code omitsorganizationso it can be supplied here.- Further
terraformCLI commands available once you change directory into a workspace root, e.g../fragments/terraform/ff_dev/: terraform fmt -check -recursive ./fragments/terraform- format check for all terraform code.
Conventions
- Node.js code is formatted and linted with Deno; config in
./deno.json. - Node.js code is written in TypeScript and uses
tscto build (see./tsconfig.json) the core fragments. - Node.js API is locally run with
tsxand uses./tsconfig.api.json. - Local Solana validator settings in
./solana-cli.local.yml(you do not have permission to read the referenced./solana.id.jsonkey file though). - Python code is type-checked with
mypy; config in./pyproject.toml. - Python code is linted with
pylint; config in./pyproject.toml. - Python code is formatted with
ruff; config in./pyproject.toml. - Solana program Rust code is linted with
clippyand formatted withcargo fmt. - Solana program tests can be run with
cargo test -p program-tests(uses LiteSVM). - Terraform code is formatted with
terraform fmtand validated withterraform validate. - Terraform state is stored remotely in HCP Terraform; each workspace root directory binds to one HCP workspace via the
cloudblock inmain.tf. ff_devuses local execution;ff_produses remote execution (configured in the HCP workspace UI, not in code).- Terraform AWS provider uses a
default_tagsblock so every taggable resource automatically getsProject/Environment/ManagedBytags. Don't duplicate these tags at the resource level. - Resource names should be derived from
local.name_prefix("${var.project}_${var.environment}") declared in each root module'slocals.tf. .terraform.lock.hclfiles are committed;.terraform/,*.tfstate*, and*.tfvarsare ignored.- Core fragments have access to environment variables that specify the locally running Solana program IDs - see
./solana_program_keys/solana_program_keys.env. - Production-grade code with a pragmatic understanding that this is for educational purposes. For example, I made a
trade-off by using ephemeral in-memory keypairs in the API interfaces that operate on the Solana programs, i.e. in
./fragments/apis/fastify/blockchain/solana_username.ts. Potentially come back to this if I end up with a CD workflow in AWS (e.g. use a secrets manager in the cloud instead) - Prefer snake case for file and directory names.
API surface
- Every capability a fragment exposes is surfaced on both APIs. The rule is about the capability, not where it
lives: whenever a fragment gains something a caller could reasonably want to do — a read, a write, a query, an action
against whatever the fragment integrates with — it gets a route on Fastify (
./fragments/apis/fastify/, registered inapp.ts) and on FastAPI (./fragments/apis/fastapi/,app.py), with the same path, status codes and JSON shape — bigints stringified, malformed input answered400by both rather than one framework's native422(see the comment onget_registration_by_index_routein./fragments/apis/fastapi/blockchain/solana_register.py). Each new route gets cases in the co-located route test file (e.g.solana_register.test.ts/test_solana_register.py) and a Bruno request under./fragments/apis/bruno/that runs against both environments (environments/fastify.bru,environments/fastapi.bru). Today that covers thesolana_*_interfacefragments and the datastore modules; a new kind of fragment is covered by the same rule. - What to expose vs not. If it is reusable beyond the feature that introduced it — expose it. Feature-specific
orchestration and runtime wiring — a Lambda handler, a consumer loop,
readConfig/createAwsClientsin./fragments/solana_register_sync/poller.ts— is a deployment surface, not a capability; don't expose it. When a capability first appears inside orchestration code (as the by-index read did in the poller), promote it into the fragment it belongs to, mirror it in the other language, and expose it:GET /solana/register/index/:index(getRegistrationAccountByIndex/get_registration_account_by_index) is the exemplar.
Testing conventions
Decided in ADR 013; the short version:
- The chain is real. Blockchain fragment tests (
*.test.ts,test_*.py) are integration tests against the local validator — assume it is running (docker compose --profile blockchain up). Never mockinitRpcClient/init_rpc_client, the@solana/kitorsolana-pyRPC clients, or thesolana_*_interfacefragments. A module that integrates with the chain is tested through the chain, against accounts the deployed program actually wrote. - AWS is mocked, at the SDK client boundary. Inject the clients (see
PollerClientsin./fragments/solana_register_sync/poller.ts) and double them withaws-sdk-client-mock(Node.js) or theboto3equivalent (Python), so tests assert the commands, condition expressions and envelopes the module actually sends. Do not mock one level higher (a wrapper or interface) — that hides exactly the parts worth asserting. - Be frugal with the shared validator. The runner executes files in parallel against one validator with slowed slots
(
--ticks-per-slot 256). Confine chain writes tobefore/setUpClassand keep them few; when bootstrapping a singleton PDA tolerate analready in useerror; use a generous confirmation window whose result is asserted, not ignored../fragments/solana_register_sync/poller.test.tsis the exemplar. - In the agent sandbox the validator is unreachable (loopback
listen()denied, Docker socket blocked). Run typecheck / lint / format yourself, then handnode --run test/uv run python -m unittest -vto the user and say so explicitly in the handback. Never report those tests as passing, and never work around it by mocking the chain.
See also
spec-build— drives spec-driven, per-task delivery and composes this skill for the commands and conventions above.spec-tasks— plans the API surface above into each task at task-split time, so routes are not retrofitted later.- The spec-driven workflow:
spec-ideate→spec-tasks→spec-build.
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.

