Project Kit is a Codex skill and scaffold for developer-led software delivery.
It is designed for people who know how they want a system to be built, want Codex to implement inside that perimeter, and want reviewable artifacts instead of process theater.
This is not an Agile framework and it is not a vibe-coding starter. The model is:
architecture-firstfeature briefs instead of backlog theaterhuman-owned design context for UI worksmall implementation batchesmandatory review gates
Project Kit bootstraps a repository around three layers of context:
Durable contextWhat the software is, how it is shaped, and which constraints matter.Design contextHuman-owned mockups, annotations, flows, and canonical design sources for UI work.Execution contextSmall feature briefs and a review checklist that tell Codex what to implement next.
The default baseline is:
README.md
AGENTS.md
CONTRIBUTING.md
CHANGELOG.md
CODE_STYLE.md
package.json | composer.json | project.json
project-name.code-workspace
.project/
overview.md
architecture.md
constraints.md
decisions.md
review-checklist.md
features/
index.md
feature-name.md
design/
README.md
flows.md
sources.md
assets/
design/ is optional and should exist only for UI work.
- Humans own architecture, scope, UI/UX decisions, and acceptance.
- Codex helps with repository analysis, implementation, and controlled documentation updates.
- UI design is not delegated to AI. When design assets exist, Codex implements them rather than inventing a different interface.
- Every non-trivial batch should be small enough for human review.
- Stable constraints matter more than ceremonial process vocabulary.
Capture:
- the project goal;
- the system shape;
- trust boundaries;
- integrations;
- hard constraints;
- non-goals.
Those become:
.project/overview.md.project/architecture.md.project/constraints.md
Each feature gets its own file under .project/features/.
A feature brief should capture:
- goal;
- user-visible behavior;
- in scope;
- out of scope;
- modules involved;
- design references;
- acceptance criteria;
- test expectations;
- risks and review focus.
When a project has UI, keep the design context human-owned and explicit under .project/design/.
Use:
assets/for exported screens and annotated variants;flows.mdfor navigation, states, and multi-screen behavior;sources.mdfor Figma links or other canonical sources.
The default asset convention is:
screen-name.pngscreen-name.annotated.pngscreen-name.annotations.mdwhen numeric callouts need prose
Codex should work on one reviewable batch at a time, not on an entire application in a single prompt. Each batch should be understandable in diff form.
Use .project/review-checklist.md as the gate for every non-trivial change.
That review should cover:
- architecture alignment;
- feature alignment;
- security;
- test coverage where needed;
- design fidelity when UI is involved.
Project Kit is a normal Codex skill directory. You can install it under the root your Codex setup already uses:
$HOME/.codex/skills/project-kit$HOME/.agents/skills/project-kit.agents/skills/project-kitfor repo-scoped use
Example:
mkdir -p "$HOME/.codex/skills"
ln -s "/absolute/path/to/project-kit" "$HOME/.codex/skills/project-kit"Then use prompts like:
Use $project-kit to init a new TypeScript backend for a billing API with explicit constraints and review gates.
Use $project-kit to align this existing React repository and add design context for provided mockups.
Use the CLI when you want the baseline quickly and you are comfortable refining the generated docs yourself.
node ./bin/project-kit.js init --target /absolute/path/to/repo --meta ./project-config.sample.jsonFor UI-heavy projects, add --design-context to scaffold .project/design/.
After the repository is initialized or aligned, use the feature command instead of rerunning scaffold operations.
node ./bin/project-kit.js feature create --name "User authentication"
node ./bin/project-kit.js feature update --slug user-authentication --acceptance "Can sign in,Can sign out" --tests "Add auth controller tests"
node ./bin/project-kit.js feature listThis keeps the daily workflow narrow:
initandaligndefine the repository operating system;feature createstarts the next implementation brief;feature updaterefines acceptance, tests, design references, or review focus;feature listshows the current brief inventory.
This example simulates a UI project named acme-billing-web, from scaffold to the first reviewed pull request.
flowchart TD
A[Start with a target repository] --> B{New repo or existing repo?}
B -->|New repo| C[Prepare or generate project-config.json]
B -->|Existing repo| D[Prepare align metadata]
C --> E[Run project-kit init with design context and Git]
D --> F[Run project-kit align with the current repo metadata]
E --> G[Baseline created: README, AGENTS, CODE_STYLE, manifest, .project]
F --> G
G --> H{Does the project have UI work?}
H -->|Yes| I[Add mockups, design flows, and source links under .project/design]
H -->|No| J[Skip design context and continue with code-only delivery]
I --> K[Create the first feature brief]
J --> K
K --> L[Refine acceptance, tests, and review risks]
L --> M[Codex reads the durable context and implements one small batch]
M --> N[Run tests and update docs when durable context changed]
N --> O[Review the diff against .project/review-checklist.md]
O --> P{Batch accepted?}
P -->|No| Q[Refine the brief, constraints, or design notes and iterate]
Q --> M
P -->|Yes| R[Open a PR from a feature branch]
R --> S[Human review and merge]
S --> T[Create the next feature brief or prepare a release]
Example metadata for the simulated project:
{
"projectName": "acme-billing-web",
"description": "Billing portal for small teams with explicit architecture and review gates",
"originalPromptEnglish": "Build a browser-first billing portal for small teams with explicit architecture, durable feature briefs, and review gates.",
"primaryLanguage": "TypeScript",
"stack": ["TypeScript", "React"],
"features": ["User authentication", "Billing dashboard"],
"designContext": true,
"initGit": true
}Example command sequence:
node ./bin/project-kit.js init --target /tmp/acme-billing-web --meta ./project-config.json
node ./bin/project-kit.js feature create --name "User authentication"
node ./bin/project-kit.js feature update --slug user-authentication --acceptance "Can sign in,Can sign out" --tests "Add auth form tests,Add auth session tests" --risks "Auth boundary,Session handling"
node ./bin/project-kit.js feature listIf the repository already exists, replace init with align and keep the same feature brief and review loop.
init expects this metadata shape:
{
"projectName": "project-kit",
"description": "Architecture-first baseline for developer-led Codex work",
"originalPromptEnglish": "Create a disciplined Codex-ready baseline for a TypeScript and React project with feature briefs and review gates.",
"primaryLanguage": "TypeScript",
"stack": ["TypeScript", "React"],
"features": ["User authentication", "Usage reporting"],
"designContext": true,
"initGit": true
}Required fields:
projectNamedescriptionprimaryLanguagestack
Optional fields:
featuresoriginalPromptEnglishdesignContextinitGit
When init runs without an existing project-config.json, the resolved metadata is written to project-config.json in the target repository so future runs can restart from it.
When the config is derived from a free-form request, store the full request translated into English under originalPromptEnglish.
npm testThe test suite covers the public CLI, automatic project-config.json loading, feature brief scaffolding, design context generation, and alignment behavior on existing repositories.