Packs for coding agents

Software, shipped as decisions.

Your agent is the new compiler. Decisions are the new source code.

A pack holds every decision a product needs, each with a test. Your coding agent builds the product in your language, in your own repo, without stopping to ask how anything should work. Then you change it however you like.

$ symbola pull spikinglabs/aura
Browse packs How to use a pack
WITHOUT A PACK ? ? ? ? ? ? it stops to ask, you answer, again WITH A PACK Build …/kausalflow/lightkone in TypeScript lightkone built in one go Now add reading lists for my lab. + reading lists
Without a pack your agent keeps stopping to ask. With one, a single message builds the app, and your own request comes next.

Why packs

Software isn't about the code anymore.

Every new product starts with the same groundwork: importing data, search, duplicates, deleting and restoring, the odd date format. None of it makes your product special, yet it takes the first weeks and is where many bugs hide. A coding agent can type the code quickly, but it still has to guess how each piece should behave.

A pack settles that groundwork in advance. Every behaviour is written down with a test, so your agent builds to a clear target, the tests tell it when it is done, and you start on the part that is actually yours.

{ Python } a startup { Go } a bank { TypeScript } your team the pack one pack

Skip the groundwork

The everyday features most products need, worked out case by case. Your time goes to what makes your product different.

Nothing left to guess

Each behaviour has a written answer and a test that checks it. The Lightkone pack, for example, settles 74 decisions with 390 tests.

Yours to keep and change

The result is plain code in your own repo, with no runtime and no lock-in. Change it however you like, or rebuild it in another language from the same pack.

Browse packs

Real products, shipped as decisions. The green dots show how much of each pack has a build that passes its tests.

5 packs

Family ✓ Every part builds
spikinglabs

Aura

A calm, serverless baby and child log for the phone: feeds, sleep, diapers, sick mode with a fever chart and doctor summary, paper documents kept page by page, and German vaccination and checkup reminders. The merge and backup rules, migrations, growth percentiles, schedules, reminders, AI redaction and calendar files specified exactly.

Free
Research ✓ Every part builds
kausalflow

Lightkone

A research-paper library you own, as a static web app: add, search, read and highlight papers, with BibTeX, PDF filing, sync and duplicate finding specified exactly.

Free
Data ✓ Every part builds
emptymalei

powerbi-cli

A command line tool for Power BI admins that saves workspaces, apps, reports, report users and workspace scans as JSON and Excel files: auth profiles for user and admin tokens, a versioned offline cache, file converters and batch scans from a YAML config, with every API call it makes written down.

Free
Productivity ✓ Every part builds
spikinglabs

Rondel

End-to-end encrypted retrospectives and team meetings with no accounts, as a static web app plus a tiny room server: the meeting model, recurring series, link keys and sealing, backups, the room protocol and meeting templates specified exactly.

Free
Research ✓ Every part builds
kausalflow

Homeostat

A Python package and command line that turn a declarative plant scenario into historian data with full ground truth: a process library of loops, reactors and faults, plans and plant families, and errors that say how to fix them.

Free
Publish your own pack Write down the decisions, release, and get listed here.
Search inside every pack: decisions, briefs and assumptions

How it works

From a pack to running code in three steps.

in → out briefdecisionsassumptionschecks every decision has a test
One

Pick a pack

A pack holds the product's brief, every decision it needs, and the tests that check each one. Nothing is left for your agent to guess.

A field left empty:guess, or ask? The pack decides:field-edge-cases no guessing, in any language
Two

Your agent builds it

Give pack.md to Claude Code or any coding agent and pick a language. Questions it would normally stop and ask you are already answered.

search-query kausalflow/lightkone 108 / 108 checks passed impl 66f0edf7…e9e2e PASSED done when every test passes
Three

The tests say when it's done

The pack's tests run as your agent works, so it knows what is still wrong and fixes it. When everything passes, the build is done and the code is yours.

Using a pack

Tell your AI which pack, and what you want different.

The simplest way

Paste the link

Copy a pack's page link into your coding agent and say how you want it: the language, and anything to add or leave out. The agent reads the pack, builds the product in your repo, and checks its own work as it goes.

Works with Claude Code, Codex, Cursor, Copilot, or any agent that can open a web page.

Build https://symbola.sh/packs/kausalflow/lightkone/ in Go. Add a dark theme and Zotero sync.
YouBuild symbola.sh/packs/kausalflow/lightkone/ in Go. Add a dark theme and Zotero sync.
AgentReading the lightkone pack: 75 decisions across 8 parts. I'll build it in Go, then add the dark theme and Zotero sync on top.
AgentDone. All 390 of the pack's tests pass, and your two additions are in their own folders.
In a chat assistant

Add the Symbola connector

Ask for a pack in plain words, read what it decides, and get the steps to build it.

  • ClaudeIn Claude's connector directory. How to add it
  • ChatGPTComing soon
Cursor, VS Code, Codex and more →
For the files

Use the command line

Download the pack into a folder, then point your agent at it.

$ uv tool install symbola
$ symbola pull kausalflow/lightkone
CLI guide →

One decision, end to end

A real rule from the kausalflow/lightkone pack, and how its test stops an agent from guessing wrong. The search data is simplified.

Decision · decided

Trashed papers appear only with is:trash, and then only trashed papers appear; an empty trashed field is not trashed.

search.trashdecided4 checks

Two reasonable builders could easily disagree here. Should a deleted paper still turn up in search? The pack settles it once, so nobody has to guess.

Example check

p1Bayesian priors for small samples
p2Causal graphs in practice
p3Causal notes, old draft in trash
SearchMust return
causalp2
is:trashp3

p3 matches "causal" too, but it is in the trash, so it must stay hidden.

Running the check

SearchExpectedBuild A, GoBuild B, Python
causalp2p2 ✓p2, p3 ✗
is:trashp3p3 ✓p3 ✓

Both builds look fine in a quick demo. Build B guessed that trashed papers still match a search. The check catches it, so Build B gets no passing result for this part until it is fixed.

The finished result

pack kausalflow/lightkone, version 2 component search-query build kausalflow/lightkone result 108 of 108 checks passed code sha256:66f0edf7…5e9e2e checked 2026-10-26, reproducible

This is Lightkone's own result for this part, shown on the pack page with the pack's other test results.

For publishers

Know how a product should work? Package it once, and every coding agent can build it.

Python Go TypeScript Rust Java Swift your pack ♥ by you

Write it once, built everywhere

People you will never meet build your pack in Python, Go, TypeScript and more. Every build follows your decisions, because your tests check each one.

Your agent writes most of it

From code you already have, alongside the code you are writing, or by asking you questions before there is any code. You settle the decisions; it writes the files.

Credit and support

Each pack page shows who published it, with your profile and support links such as GitHub Sponsors or Buy Me a Coffee. Paid packs are coming later.

See it working in the wild

Builds that pass your tests are listed on your pack page, so you can see who is using your pack and in which languages.

Three ways to start

You have Working software

Your agent reads the code and drafts the decisions. You check them.

symbola extract ./my-app --pack you/my-app How it works
You have Software you're building

Your agent records each decision as you make it, next to the code.

npx skills add kausalflow/symbola --skill symbola-pack How it works
You have An idea, no code yet

Your agent asks you multiple-choice questions and writes the pack from your answers.

npx skills add kausalflow/symbola --skill symbola-decide How it works

All three end the same way: have a fresh agent build the pack once (symbola replicate spec --builds 1), then symbola publish spec --evidence …. Packs published without a test build say so on their page.

Built for agents to read

Every page has a plain-text twin.