Skip to content
Back to skills

Project New

ASecurity

Start a new product from zero with the Keelokit harness — intake interview, PRD, stack decision, monorepo skeleton with CI and staging from day 1, and the first backlog. Use when the user says "nuevo producto", "arrancar un proyecto", "kickstart", "quiero construir una app", "armá el proyecto", "new product", or when /keelokit finds no project and the user wants one. Resumes from the pending gate when .keelokit/state.toml exists.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 29, 2026
developmentgobashreactgitapidatabase

Works with

  • cli
  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 2 files and shows the line behind each finding

Scanned October 4, 2026

npx -y skills add leosimini/keelokit --skill project-new --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Project New?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Project New
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/leosimini-project-new/badge)](https://www.skillsdirectory.com/skills/leosimini-project-new)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: project-new
description: Start a new product from zero with the Keelokit harness — intake interview, PRD, stack decision, monorepo skeleton with CI and staging from day 1, and the first backlog. Use when the user says "nuevo producto", "arrancar un proyecto", "kickstart", "quiero construir una app", "armá el proyecto", "new product", or when /keelokit finds no project and the user wants one. Resumes from the pending gate when .keelokit/state.toml exists.
---

# Kickstart — five gates from idea to a working skeleton

| Gate | Output | Human |
|---|---|---|
| 1 intake | `docs/context/` | approves the context |
| 2 product | `docs/prd.md` | approves scope and metrics |
| 3 stack | `docs/stack.md` (apps chosen and why); `docs/decisions/` only for deviations | approves the apps and any deviation |
| 4 skeleton | generated monorepo, `pnpm verify` green, first commit | nothing (unless setup needs their accounts) |
| 5 backlog | `backlog/` with epics, stories, development waves | approves the order |

Rules for the whole run:
- Interview in the user's language; write files in English unless the user asks otherwise.
- The user may be a founder who has never run a software project, let alone agents. The first
  time a term of art comes up (PRD, stack, epic, story, development wave, worktree, invariant,
  gap, staging), explain it in one plain sentence. In Spanish, waves are **olas de desarrollo**.
- The dashboard (`/keelokit:project-dashboard`) is the user's view of the whole run: show it at the
  start, refresh it when a gate's output is ready and after each approval.
- **Never ask for an approval without showing what is being approved.** At each gate: refresh
  the dashboard, give its link and the section (`#stage-<gate>`), and summarise in the chat what
  the approval covers (the lists below). Then ask.
- After each approval, record it in `.keelokit/state.toml` under `[gates]` as
  `<gate> = "<YYYY-MM-DD>"` (`"<YYYY-MM-DD> auto"` when automatic mode approved it). That file
  holds the approvals, the run decisions (`[run]`) and the dashboard's settings (`[dashboard]`:
  `lang`, `url`), nothing else.
- Between gates report progress in one line and continue; stop only at the approvals above —
  and in automatic mode, only where a person is required (below).
- Resume: if `.keelokit/state.toml` exists, continue from the first gate without a date, and
  open the dashboard first so the user sees where the run stopped.

## 0. Where

Ask for the product's name and one sentence of what it is, and propose the folder
`~/Development/<slug>`, where the slug is the name as the template derives it: lowercase ASCII
(accents folded: "Peña S.A." → `pena-s-a`), anything else a dash, and `app-` in front when it
would start with a digit or be empty ("3D Store" → `app-3d-store`). Create it (empty) once the
user agrees. If it exists and is not empty, ask before using it.

Create `.keelokit/state.toml` with `[dashboard] lang = "<the user's language code>"`.

Then settle the two run decisions — **once per project**, with the multiple-choice tool and a
recommendation, explained in plain words:

1. **Run mode.** *Stage by stage* (recommended for a first project): Keelokit stops at the end of
   every stage for the user to review and approve it, and between stories. *Automatic*: it goes
   on alone and stops only where a person is required — the questions only the user can answer
   (the interview, blocking gaps), approving the PRD's scope and metrics or a stack deviation,
   accounts and credentials, and everything `.keelokit/harness/execution-protocol.md` reserves
   for the human (production, money, legal, deleting data, paid services). Every automatic
   approval is recorded and stays reviewable on the dashboard.
2. **How stories are built.** *One at a time* or *in parallel, up to N at once* (2–4); see Close
   for how to explain it.

Record them:
```toml
[run]
mode = "step"        # or "auto"
build = "serial"     # or "parallel"
parallel = 3         # only with build = "parallel"
decided = "<YYYY-MM-DD>"
```
These are fixed: no skill asks them again or changes them on its own. Only an explicit request
from the user changes one (update the value and `decided`, and say so in one line).

Open the dashboard: it shows the stages ahead and these decisions, so the user knows the whole
road before the first question.

**Automatic mode** approves, by itself, the gates no rule reserves for a person — context (only
with no blocking gap open), stack (only with no deviation from the house stack), skeleton and
backlog — records them as `"<date> auto"`, refreshes the dashboard, reports in one line and goes
on. The PRD is always the user's approval. After the backlog it continues straight into
`/keelokit:build-story` with the recorded build mode.

## 1. Intake

Run `/keelokit:plan-intake` in the new folder. When it finishes, refresh the dashboard and show in the
chat: the problem and users in two lines, the invariants (rules that must never break), and the
open gaps with who answers each, blocking first. Then ask for approval. Blocking gaps can stay
open only if the user explicitly accepts them.

## 2. Product (PRD)

Before writing it, say what a PRD is: the Product Requirements Document — what the first version
builds, what it deliberately leaves out, and which numbers will say it worked; what isn't in it
doesn't get built.

Write `docs/prd.md` from the context using `references/prd-template.md`. Every metric has a
number and a date; every scope line is either in or out. Anything the context doesn't support
becomes a gap in `docs/context/gaps.md`, not an assumption. Refresh the dashboard and show in the
chat the **scope** (every in and out line) and the **metrics** (metric, target, date). Then ask
for approval.

## 3. Stack

First, what kind of project this is, from the PRD: a product people use (web, mobile, an API
others call), or something developers use (a library, a CLI, a plugin, a template). The template
builds products. For a developer-facing kind it would only add apps, a database and hosting the
project doesn't need: say so, and instead start a minimal repo (`git init`, README, the context
and PRD already written) and bring the harness in with `/keelokit:project-adopt`, which writes
the profile and applies only the rules that fit.

For a product, the house stack is fixed (`${CLAUDE_PLUGIN_ROOT}/template/.keelokit/harness/stack.md`). Decide
only:
- **apps** — any of `api`, `web`, `mobile`, `site`, justified from the PRD's users and channels;
- **postgis** — only if the domain has geospatial queries.
If a requirement truly can't be met by the house stack, write `docs/decisions/0001-<title>.md`
(Status, Context, Decision, Consequences) and get approval. "Would be nicer" is not a reason.

Nothing more than the PRD needs: no API if nothing is stored or shared, no mobile app if the web
works on phones, no public site if there's nothing to say before sign-up. The skeleton writes
`.keelokit/profile.toml` from the apps; add `personal-data` and `payments` to its `traits` when
the context says so.

Write `docs/stack.md`: the apps chosen, one line each on why (citing the PRD's users and
channels), the apps left out and why, PostGIS yes/no, and any decision record. Refresh the
dashboard, show the same in the chat in plain words (what each app is for the user: "a web app
the receptionist opens on the phone", not "Vite + React"), and ask for approval.

## 4. Skeleton

1. Template source: `$KEELOKIT_TEMPLATE` if set (a fork: `gh:<you>/keelokit`), otherwise
   `gh:leosimini/keelokit`, at the plugin's version tag (`v` + `version` from
   `${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json`). If git can't reach it (offline), use
   `${CLAUDE_PLUGIN_ROOT}` and warn that the project can't `/keelokit:harness-upgrade` until its
   `.keelokit/answers.yml` `_src_path` points at a git source.
2. Generate into the product folder (existing `docs/` is kept):
   ```bash
   uvx copier==9.18.2 copy --defaults --vcs-ref v<version> --data project_name="<name>" \
     --data description="<one sentence>" --data 'apps=["api","web"]' --data postgis=false \
     "${KEELOKIT_TEMPLATE:-gh:leosimini/keelokit}" <folder>
   ```
   Copier derives the package slug from the name (as in step 0). Add
   `--data project_slug=<slug>` only for one the user chose, and only if it starts with a letter
   and has nothing but lowercase letters, digits and dashes: `--defaults` never asks again, so
   copier stops with a traceback on any other.
3. `git init -b main`, `pnpm install`, then `pnpm verify` and `pnpm mutation --all`. Fix until
   green — the fix belongs in the generated project only if it is product-specific; if the
   template itself is wrong, say so: it must be fixed in Keelokit.
4. First commit, of everything (`git add -A`: `pnpm-lock.yaml` included, or `pnpm verify` can't
   compare it with origin/main): `chore: skeleton from Keelokit v<version>`.
   With a `mobile` app, the template writes `[local]` in `.keelokit/profile.toml` and a
   `run:local` script: mention that `/keelokit:run-local` (or `pnpm run:local`) launches the app and
   its API on a phone or a simulator, and offer it once the skeleton is green.
5. Ask whether to create a private GitHub repo (`gh repo create <slug> --private --source . --push`).
6. Staging: the API deploys to Fly.io from CI. Offer `/keelokit:ship-setup` now: it writes the
   deploy guide, does what needs none of the user's credentials and verifies each step. The Fly
   account, logins, payment and third-party keys stay the user's; never type credentials yourself. Record the gate even if staging setup is deferred, and add a
   non-blocking gap "staging not configured" (owner: user).

## 5. Backlog

Run `/keelokit:plan-backlog`. Refresh the dashboard: it shows the stories by development wave and by
epic. In the chat, list the epics and, per wave, its stories (id and title), plus any story
waiting for a gap. Ask for approval of the epics and the wave order.

## Close

Report in five lines: what exists, `pnpm verify` status, open gaps by owner, the first ready
story, and what needs the user (accounts, approvals). Refresh the dashboard. Mention once that the project
carries a small "Built with Keelokit" credit (README badge, a line at the foot of the public site)
and that the dashboard's footer turns it down or off.

Then, in stage-by-stage mode, offer to start building with the recorded build mode; in
automatic mode, start. When explaining the build modes (at step 0), use plain words (the
dashboard's "How to build" section says the same):
- **One at a time** (`/keelokit:build-story`): one story is built, tested and lands before the next.
  Slower; the user follows every step and Claude usage is spread out. Recommend it for the first
  wave, for sensitive stories and for a first project with agents.
- **In parallel** (`/keelokit:build-story <N>`): N ready stories of the same wave at once, each in its
  own copy of the repo (a worktree) with its own agents. Faster, more Claude usage at the same
  time, several results to review together. Safe because stories in a wave never touch the same
  files.

Files in this skill

  • SKILL.md10.7 KB
  • references/prd-template.md796 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.