An AI-native monorepo, bootstrapped and kept current

Seconds to a repo. Then it’s all your logic.

keelstack renders an opinionated monorepo from a template: stack, tool versions, CI and agent config included. It keeps all of that current as the template moves. You and your agent start on the app.

~/my-repo · splice 0.1 preview
$ pnpm dlx @keelstackhq/splice new \
gh:keelstackhq/hull//template my-repo \
--piece preact-app:web --piece hono-worker:api
✓ base, preact-app, hono-worker rendered
✓ pnpm, Turborepo, TypeScript 7, Vite+ pinned
✓ CLAUDE.md, subagents, skills in place
✓ pnpm run ci · one job, ci-ok
→ your turn: write the app
1 binary
splice ships static. No Python, no Rust toolchain.
1 CI job
Turbo runs only the tasks a change affects.
1 line of YAML
Remote cache for CI. No account, no server.
1 pull request
per template update, opened by a bot.
01 · The split

hull owns the plumbing. Your app code stays yours.

keelstack handles
kept current for you
pnpm workspaceTurborepoTypeScript 7Vite+tool versionsconfigCI + ci-ok checkremote cacheCLAUDE.mdsubagentsskills/loop default
You write
never overwritten
The logic.
Routes, components, workers, domain code. Seed files are rendered once and stay yours from then on.
02 · Three tools

Template. Bootstrap. Cache.

01 · monorepo templatepre-0.1

hull

An opinionated, AI-native monorepo. Pick the pieces you need; hull owns structure, stack, tool versions and config.

pnpm, Turborepo, TypeScript 7, Vite+, Preact, Astro, Rust, Tauri, Hono on Cloudflare

hull on GitHub →
02 · bootstrap + updateunder construction

splice

Start a repo from versioned template pieces and keep it up to date. A Copier alternative in one static binary.

new · add · update · check · diff · explain

splice on GitHub →
03 · cached CInot released yet

hoard

A Turborepo (and Vite+) remote cache for GitHub Actions. The cache never fails your build: an error is a miss.

GitHub Actions cache by default, or your own Cloudflare R2 bucket

hoard on GitHub →
03 · Built for agents

Your agent opens the repo and gets to work.

hull is built for Claude Code. The context is lean, the conventions are written down, and every tool speaks machine-readable output, so agents spend tokens on your product.

CLAUDE.md
Lean by default. Subagents, skills and a /loop default ship with the template.
--json --yes
Every splice command takes both. No prompts, parseable results.
ci-ok
One job, one check to wait on. Turbo runs only affected tasks.
update bot
Template moves; you get one pull request to review.
04 · Stays current

The template moves. Your edits are merged, never lost.

owned files
Replaced
Files hull owns are swapped for the newer version.
shared files
3-way merged
Template changes and your changes land together.
seed files
Stay yours
Rendered once as a starting point, then left alone.
05 · Get started

Pick your pieces.

splice is not released yet, so today you render with hull’s dev renderer. Needs Node 24 and pnpm 12; run pnpm install once in a hull checkout.

base · always
node scripts/render.mjs new --template template --out ../my-repo \
  --piece base --piece preact-app:web --piece hono-worker:api --data scope=acme
cd ../my-repo && git init && pnpm install && pnpm run ci

In a hull checkout.