Your project,
your workflow,
your modules.
Scoping, specs, tickets, code, reviews — each one a Claude Code plugin. Replace the one that stops fitting, add the one nothing covered yet.
7slots 12modules shipped 3human touchpoints
Seven steps. Three of them are you.
One idea, from a sentence to a merged pull request. Three of its seven steps wait for a person; the other four run without one.
Brief
An idea, a problem. Nothing formatted.
HumanScoping
Challenged and split.→ issues + specs
AgentRefinement
Each role weighs in.→ Ready for dev
AgentSign-off
Only on doubt, risk or criticality.
HumanSprint
No tickets collide.→ To dev
AgentBuild
One worktree each.→ spec, code, PR
AgentMerge
You read it and test.→ Done
HumanHuman — 3 of 7 Agents — 4 of 7 Swap a module and this line changes shape.
You brief
You state the problem. The agents challenge it; you settle what blocks them.
You sign off
Only on designs that are doubtful, critical or risky. The rest just ships.
You merge
The final call stays yours, unless you delegate it in writing.
Slots
A slot is a question. A module is one answer. Below is this repo's real composition, read from .scrumia/config.yaml — nothing is faked in their place.
specs
Where do specs live, in what shape?
scrumia-specs
One directory per feature, files created only when they have something to say, acceptance criteria written first and turned into tests.
tracker
Where does state live — tickets, columns, PRs?
scrumia-github-project
GitHub Issues and Projects. Nothing stateful in the repo, and a hook that refuses the commit which tries.
team
Which standing roles, with what scope?
scrumia-teams
Manager, business, tech — plus a designer contributed by the design module. Each boundary is a line of refusal, and every role toggles by config.
discovery
How does an idea become scoped work?
scrumia-discovery
scrumia-discovery is installed here. An idea gets a scoping pass before it becomes a ticket: scrumia-brainstorm opens the question, scrumia-split cuts what comes out of it into issues.
implementation
How is code written, per app?
nothing installed
This product ships markdown. Its two code apps — a static site and a validation script — carry no implementation module, so the instruction is to follow the neighbouring code instead of inventing a doctrine.
design
Where does the design system live?
scrumia-design
Identity, tokens and components as files in the repo, synced one at a time with a Claude Design project. A value the tokens don't carry is a finding, not an exception — including on this page.
Compose your team
Six slots, six decisions — including the ones you leave empty on purpose. Same index as above, except here you answer it: the rows write your install commands and the .scrumia/config.yaml that scrumia-init verifies.
specs
Where do specs live, in what shape?
scrumia-specs
nothing installed
tracker
Where does state live — tickets, columns, PRs?
scrumia-github-project
yours to write
nothing installed
team
Which standing roles, with what scope?
scrumia-teams
nothing installed
discovery
How does an idea become scoped work?
scrumia-discovery
nothing installed
implementation
How is code written, per app?
scrumia-impl-rust
scrumia-impl-solidjs
scrumia-impl-reactjs
scrumia-kotlin
scrumia-kotlin-multiplatform-mobile
nothing installed
Empty: agents follow the neighbouring code — normal behaviour, not a gap. The cost arrives with the first file of a new stack, where there is no neighbour to follow.
design
Where does the design system live?
scrumia-design
nothing installed
Additions
Modules that fill no slot. Adding none is a complete composition.
not added — a key needs its source: local:, shared:, or owner/repo:
Install run these in Claude Code
# add the marketplace once /plugin marketplace add tibs245/scrumia # install your composition /plugin install scrumia-core@scrumia /plugin install scrumia-specs@scrumia /plugin install scrumia-github-project@scrumia /plugin install scrumia-teams@scrumia /plugin install scrumia-discovery@scrumia /plugin install scrumia-design@scrumia /plugin install scrumia-impl-rust@scrumia /plugin install scrumia-impl-solidjs@scrumia # then, inside the repo to set up /scrumia-core:scrumia-init
.scrumia/config.yaml commit it, then scrumia-init verifies it instead of asking again
# Generated by the composer — review, then commit project: name: your-project repo: you/your-repo # replace these two with yours modules: "tibs245/scrumia:scrumia-specs": {} "tibs245/scrumia:scrumia-github-project": {} "tibs245/scrumia:scrumia-teams": {} "tibs245/scrumia:scrumia-discovery": {} "tibs245/scrumia:scrumia-design": {} apps: - name: api path: apps/api type: backend modules: "tibs245/scrumia:scrumia-impl-rust": {} - name: web path: apps/web type: frontend modules: "tibs245/scrumia:scrumia-impl-solidjs": {}
Extends
A skill declares where it can be extended; any module answers, and nothing is stored — so nothing goes stale.
Declaresscrumia-github-project scrumia-ticket
Registerimplement
scrumia-designscrumia-specs
Declaresscrumia-teams scrumia-sprint
Registersprint
Contributesno contribution
- A skill opens a register without naming who will fill it.
- Any installed module can contribute to it without naming the skill back — here,
implementis answered byscrumia-design,scrumia-specs. - A register can carry no contribution at all, and that is a normal state, not a gap — here,
sprintcarries none yet.
Ask, and this project's own composition answers:
scrumia-extends implement
| Directive | What it says | From |
|---|---|---|
Design system first | Read the identity and the tokens before writing anything a user looks at; never inline a value | scrumia-design |
One test per acceptance criterion | Criteria carry stable identifiers and become the tests — that is what makes them acceptance criteria | scrumia-specs |
The spec is written first | Load the feature that owns the rule before writing code, and update it when the rule moves | scrumia-specs |
The table above is not read from anywhere: it was computed the moment you asked, so it cannot go stale. This is what can be added without replacing anything — see Slots for what can be replaced instead. Writing a contribution of your own is the reference's job, not this page's.
Modules
Twelve shipped. Each is a standard Claude Code plugin — install what you need.
Describes the active composition and writes it into CLAUDE.md. Fills no slot.
/plugin install scrumia-core@scrumia
Rule sections a project can own: index, guides, decisions — no rule without its why.
/plugin install scrumia-rules@scrumia
Per-feature specs, TDD-oriented. A file catalog instead of one document.
/plugin install scrumia-specs@scrumia
Issues, sub-issues, Projects columns, branches and PRs. Requires gh.
/plugin install scrumia-github-project@scrumia
Standing roles and sprint execution in dynamic workflows. Roles are configurable.
/plugin install scrumia-teams@scrumia
Challenges an idea until it can be split, then ships specs on a branch.
/plugin install scrumia-discovery@scrumia
Invalid states unrepresentable, typed errors per layer, one test per invariant — plus an audit skill for existing code.
/plugin install scrumia-impl-rust@scrumia
Fine-grained reactivity without React reflexes, behaviour-first component tests — plus an audit skill.
/plugin install scrumia-impl-solidjs@scrumia
Server Components by default, Actions for mutations, derived state during render, behaviour-first component tests — plus an audit skill.
/plugin install scrumia-impl-reactjs@scrumia
The cycle operationalized for an agent, the mock boundary, AC-to-test mapping. Reference, audit, refactor.
/plugin install scrumia-tdd@scrumia
The five principles, each with its limit. Audits violations and over-applications alike. Reference, audit, refactor.
/plugin install scrumia-solid-principles@scrumia
Query keys, options, mutations, testing — 9 guides, 13 decisions, ported from real monorepo use.
/plugin install scrumia-tanstack-query@scrumia
Declarative forms for React: a resolver, registered inputs, state through the library. Three refusals, one audit, scoped to scrumia-impl-reactjs.
/plugin install scrumia-rhf@scrumia
The compound component pattern, framework-agnostic: parts reach the parent through context (or its framework equivalent), sub-components travel with the parent, the public API is one symbol. React, Vue, Solid and Angular, in each framework's idiom.
claude plugin install scrumia-compound-design@scrumia
The schema is the source of truth, errors are field-targeted where a user reads them, and parsing happens at the trust boundary — not on values the compiler already proved. Pinned to Zod v4, with an audit skill and a boundary detector.
/plugin install scrumia-zod@scrumia
Identity, tokens and components in the repo, synced one at a time with Claude Design. Ships the designer role and an audit that reports drift and mutedness alike.
claude plugin install scrumia-design@scrumia
Semantic elements over ARIA roles, the element that matches the purpose, tests that query through the layer the user meets — three refusal rules, one audit skill.
claude plugin install scrumia-html-css@scrumia
Gradle the build tool, stated in Gradle's terms — Kotlin DSL over Groovy, version catalogs, the shape of convention plugins, lazy task configuration, the build and configuration caches, composite builds, pluginManagement. Eight rules, an audit skill that measures an existing Gradle project against them.
claude plugin install scrumia-gradle@scrumia
Material 3 the UI system, stated in Material 3's terms — Compose as the default toolkit, Views as an explicit choice, tokens and components pulled from Material 3 rather than reinvented per project. Eight rules, an audit skill that measures an existing Android or Kotlin Multiplatform Mobile surface against them.
claude plugin install scrumia-material3@scrumia
The Kotlin Multiplatform Mobile composition preset — six KMP-specific rule families (expect/actual across source sets, source-set layout, iOS/Android split, Cocoapods and Swift interop, target declaration, KMP-shaped Gradle wiring) and a single key that re-exports the six satellites a KMP project runs.
claude plugin install scrumia-kotlin-multiplatform-mobile@scrumia
HTTP server and client rules for a Ktor codebase — routing declared as a tree, content negotiation installed once, a long-lived HttpClient, named authentication providers, tests on the in-memory engine, configuration outside the code, and a stated choice between WebSockets and SSE. Nine rule families, an audit skill that measures a Ktor project against them.
claude plugin install scrumia-ktor@scrumia
Idiomatic Kotlin language rules — val/var, null-safety and platform types, coroutines and Flow, data/sealed/value classes, object vs companion vs top-level, and visibility. Six rule families, a reference skill, and an audit skill that measures a Kotlin codebase against the six.
claude plugin install scrumia-kotlin@scrumia
Effects as values, not exceptions — the typed-effect discipline that sits above Result, Either, IO/suspend, and effect.website without substituting for any of them. Six refusals, a reference skill, and ten guides spanning the discipline and the four approaches.
claude plugin install scrumia-effect@scrumia
The Functional Programming paradigm, language-neutral — purity, total functions, referential transparency, immutability by default, composition over inheritance, and effect discipline. A reference skill and a vocabulary check that enforces the rule fragments stay language-agnostic.
claude plugin install scrumia-functional-programming@scrumia
Install
Prerequisites: git, an authenticated gh CLI (for the GitHub tracker), and jq (for the guard hook). scrumia-init checks all three and says what degrades if one is missing.
# add the marketplace, install the kernel
/plugin marketplace add tibs245/scrumia
/plugin install scrumia-core@scrumia
# then, in the repo to set up
/scrumia-core:scrumia-init
Your composition
Here's what ScrumIA sees in this repository, read from .scrumia/config.yaml. Nothing is guessed: every slot is real, every module installed or empty on purpose.
ScrumIA composition — ScrumIA (tibs245/scrumia)
Modules this project declares
──────────────────────────────────────
tibs245/scrumia:scrumia-specs
root=features, strates=["business","app"]
tibs245/scrumia:scrumia-github-project
autonomy={"level":"guided","auto_merge":[]}, project=ScrumIA,
project_number=6, columns=["Backlog","Ready for dev","To dev","In
progress","In review","Done"],
board={"field_id":"PVTSSF_lAHOAD9HXc4Bfw4JzhaBcjo","options":{"Backlog":"7f19f379","Ready
for dev":"0b9c70dd","To dev":"9678ee59","In progress":"08535749","In
review":"3eb1c894","Done":"4daf8741"},"flow":{"ready":"Ready for
dev","in_progress":"In progress","in_review":"In review","done":"Done"}}
tibs245/scrumia:scrumia-teams
execution={"unlabeled":"sonnet","unrated_risk":"medium","labels":{"scope_prefix":"scope/","risk_prefix":"risk/"},"matrix":{"S":{"low":"sonnet","medium":"sonnet","high":"sonnet","critical":"opus"},"M":{"low":"sonnet","medium":"opus","high":"opus","critical":"opus"},"L":{"low":"opus","medium":"opus","high":"opus","critical":"opus"},"XL":{"low":"split_or_opus","medium":"split_or_opus","high":"split_or_opus","critical":"split_or_opus"}}},
escalation={"to_human":["disagreement between roles","missing business
rule","contract change consumed by another app"]},
sprint={"max_tickets":5}
tibs245/scrumia:scrumia-discovery
tibs245/scrumia:scrumia-design
root=design, remote=claude-design,
project_id=67f47e14-97d0-4e2b-8a10-abb2b2d5e51f
App Path Modules
─────────────────────
site site none
tools tools none
What each module contributes, and to which register: scrumia-extends --list.
Change any of this with /scrumia-core:scrumia-compose.
scrumia-init maps your apps, proposes a composition, offers the install command for each module it needs, and writes the composition into CLAUDE.md. Re-running it checks instead of overwriting.