workkept whole, no diff chains↓versionslyrics, style, outline, whatever the craft needs↓scorea snapshot pinned to a version↓calendar slota day you pick, or the queue laid out↓shippedmarked out, link pasted in
A desktop workbench for content makers
From raw idea to shipped work. The work lives in one place, the release plan in another, and the decision about what deserves to ship lives in your head — kilna closes that loop.
kilna opens on what needs a decision — a slot this week the work is not ready for, overdue first — then the week as it stands, then the shortlist of scored work going nowhere yet. Already-released work never appears: the automation shows only what can still be done. Standing findings sit below — a stale score, a weak slot, a draft that stopped moving — each offering the profile action that answers it, and changing nothing until you press it.
Work with versions
Every draft is kept whole — no diff chains, no lost revisions. A song keeps lyrics and style separately; a chapter keeps text and outline. A saved version never changes: revising starts the next one from it, the arrows walk the history, and Changes shows what moved since the revision before.
One list, sliced the way you ask
Every work there is, in one table you shape: pick the columns, fold it into blocks by status or tier, and narrow it from the box — tier:clip status:draft tag:winter reads as a query, not a title. A slice you ask for every week gets a name and a chip above the table, and comes back with one click.
Scoring that means something
Rate a work along axes you define, weighted into a tier. Scores are snapshots tied to a version, so you can see that rewriting the second verse moved it from 62 to 78.
A calendar you can trust
A day holds what you put on it, and you are told what is already there before you add beside it. Every chip says whether that release could actually go out, a pinned day is left alone by the automation, and one click lays the whole queue out to your rhythm — as a preview you approve, never a booking you discover.
Shipping is a state, not an integration
Mark it out, paste the link. Plugins can automate it later; the loop closes without them.
Profiles, not a form builder
Music, Novel, Podcast and Blog ship as configuration, not code. Switch profile and the same screens speak about chapters and pull, or episodes and the cold open.
Nothing happens unnoticed
Every change is written down. History answers what happened to this, and when three weeks later, and the bell lights only for the things that need a look — like a release that lost its slot.
Your data stays yours
Local SQLite, media as plain files on disk, and a markdown export of everything. No account, no server, no lock-in — and the workspace remembers what it deleted, so an import never brings back what you threw away.
A song, a chapter, and a podcast episode differ in vocabulary and in how they’re judged — not in structure. So the schema is fixed and the craft is configuration:
kilna talks to Claude through your installed Claude Code CLI — your subscription, your session, your skills. Nothing is sent anywhere else, and there is no API key to configure. The core works without it: if the CLI isn’t installed, the panel says so and everything else carries on.
A question starts a run that belongs to its chat, not to the screen you asked from — leave, come back, it is still going, and a floating button reaches every chat from anywhere. Your profile’s actions run straight from a work’s card too, each in a chat of its own, telling you when they land — or from the catalogue against everything you have ticked, three at a time with the rest queued — and saying so on every screen when one stops to ask you something. An action can come back with a score along your axes, laid out for you to apply or ignore; the assistant proposes and never writes. Answers render as markdown, and one worth keeping becomes a version of the work with one click. See The assistant.