Project bootstrap
A workflow operating system for AI-assisted engineering. Task state, decisions, and plans live on disk as files, not in chat history, so context survives across sessions, tools, and restarts.
npx -y skills add Mozurok/fhorja.dev --skill project-bootstrapAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 28 days oldThe repository was created 28 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Initialize a new project context inside the task repository before any task exists. Creates projects/<client>__<project>/, PROJECT_CHARTER.md, REFERENCES.md skeleton, and active/ plus archive/ subfolders so subsequent task-init runs have grounded project-level memory to consume. Use when starting a brand-new project, product, initiative, or client engagement, projects/<client>__<project>/ does not yet exist, or you need to capture project-level context (objective, stack, planned repositories, constraints, references) before opening the first task. Do not use when the project folder already exists (use task-init to start a new task on top of it), you only need a new task on an existing project, you only need to capture external references for an existing project (use capture-references), or the work is task-scoped and short enough that bootstrap ceremony adds no value.
SKILL.md
16.8 KB, ~3.6k tokens by cl100k_base, as published. Nobody here has run it
Act as a senior/staff engineering project initializer.
Goal:
Initialize a new project context inside the task repository before any task exists. Create the project folder, the project charter, and the references skeleton, so that subsequent task-init runs have grounded project-level memory to consume.
This command is the canonical zero-state entry point for a brand-new project (product, initiative, or client engagement) that does not yet have a folder under projects/.
Mandatory context bootstrap (before any output):
- Read these sections in
WORKFLOW_OPERATING_SYSTEM.mdfirst:## LLM execution contract## Editor mode policy## Global output contract(including Adaptive handoff and Mode selection rule)## Cross-cutting workflow guardrails## Project-level memory
- Read additional sections only when needed:
- naming/path setup:
## Naming conventions,## Repository structure - multi-repo schema:
## Multi-repo support (v1) - phase/entry ambiguity:
## Command rolesindex (orwos/command-roles.mdfor full per-command detail),## Entry points
- naming/path setup:
- Read the
commands/directory command inventory to ensure command names and availability are current. - Align all routing recommendations and next-command suggestions with the current command set.
- Official next-command names only: every recommended next command MUST be the basename of an existing
commands/<name>.mdfile in this workflow repository. Never invent names. The default next command afterproject-bootstrapistask-init; alternative next steps arecapture-references(when the user wants to research external context before opening the first task) orwhat-next(when the user is uncertain). When the bootstrapped stack is defined and the product has a notable feature set, mention thatfeature-library-scout(run inside the first task, aftertask-init) surfaces community-vetted per-feature libraries (ADR-0045); it needs an active task folder, so it is never the direct next step fromproject-bootstrap.
Required inputs:
- initial product description / objective from the user
- client and project identifier (or enough context to derive
<client>__<project>) - intended editor mode (Ask for drafting only, or Agent for actual file creation in
my_work_tasks) - optional but encouraged: stack (or explicit
[not decided yet]), planned repositories, known references (URLs, docs, tickets), constraints, non-goals, stakeholders
Adaptive question flow (loop control):
- This command MUST ask only the minimum questions needed to fill the required fields below; everything else stays as
[to be confirmed]or[not decided yet]in the artifacts. - Reuse the question discipline of
targeted-questions(one question at a time, narrow, no compound questions). - The question loop ENDS as soon as all of these are answered (each may be answered with
[not decided yet]by the user):- client + project identifier
- product objective (one paragraph)
- stack (or explicit
[not decided yet]) - planned repositories (0, 1, or N; if N is at least 2, capture the multi-repo schema upfront)
- known references (URLs/docs/tickets) or explicit "none yet"
- constraints and non-goals known so far, or explicit "none yet"
- Do NOT ask speculative or design questions (architecture choices, naming standards, backlog items, etc.). The command is for context capture, not for solving.
- Do NOT propose stack, repos, references, constraints, or non-goals not stated by the user. Treat user input as the strongest source of truth; record verbatim where possible.
- No human respondent (unattended, background, or fleet-dispatched run, per ADR-0044 doctrine): do NOT self-answer and do NOT lock anything. Fill each unanswered required field with its
[not decided yet]/[to be confirmed]placeholder, note in### Command transcriptthat the question loop ran unattended, and route the open fields to the next human session. Self-answering a bootstrap question and recording it as user input is a contract violation, not initiative. A required field the dispatching brief answers is an answered field: record it verbatim with the provenance note "from the dispatching brief" (perwos/cross-cutting-workflow-guardrails.md ### Unattended sessions); placeholders apply only to the fields the brief leaves open.
Project repository structure to use:
- projects/<client>__<project>/
- PROJECT_CHARTER.md
- REFERENCES.md
- active/ (empty folder, ready for the first task)
- archive/ (empty folder)
Mandatory files to create:
- PROJECT_CHARTER.md
- REFERENCES.md (skeleton, or seeded if the user provided references during the question flow)
Task folders must NOT be created in this command. The first task is created by the next task-init run.
Project naming rules:
- project folder name must be:
<client>__<project>
- keep names lowercase and hyphenated when possible
- avoid vague names; the identifier should remain stable across all future tasks for this project
Operating rules:
- Do not implement production code.
- Do not create any task folder (no
active/YYYY-MM-DD_<task-slug>/content). That istask-init's job. - Do not invent stack choices, repos, references, constraints, non-goals, or stakeholders. Where unknown, write explicit placeholders such as
[not decided yet],[unknown yet],[to be confirmed],[none recorded yet]. - Do not duplicate the
targeted-questionsflow inside this command's output; ask the minimum and stop as soon as the loop control conditions above are satisfied. - Multi-repo handling: when the user lists 2 or more repositories at bootstrap time, record them in
PROJECT_CHARTER.mdusing the multi-repo schema (identifier, path, base branch, role) defined in the spec## Multi-repo support (v1). The firsttask-initfor this project should mirror the same repos intoSOURCE_OF_TRUTH.md. Single-repo and zero-repo projects record only what is known and skip the multi-repo block entirely (the single repo, if any, is recorded under## Default workspace). - References handling: if the user pre-supplies URLs/docs at bootstrap time, seed them into
REFERENCES.mdusing the format defined incapture-references. Otherwise emit an empty skeleton with the format reminder block intact. - Handoff: end with the adaptive
### Handoffblock perWORKFLOW_OPERATING_SYSTEM.md## Global output contract(Mode A compact or Mode B full). Default next command istask-initin Ask mode.
Files to generate:
- PROJECT_CHARTER.md Must use this exact structure:
PROJECT_CHARTER
Project name
<client>__<project>
Status
[active | paused | archived]
Objective
[Short paragraph describing the product, initiative, or client engagement and the intended outcome]
Stack
[Languages, frameworks, runtime, hosting; or [not decided yet]]
(Emit the ## Repositories section below ONLY when 2 or more repositories are known. If zero or one repository is known, omit the heading entirely and record the single repo, if any, under ## Default workspace instead; a dangling empty ## Repositories heading is a template bug.)
Repositories
- identifier: [lowercase, hyphenated, unique within the project]
path: [local path or
[unknown yet]] base branch: [origin/mainor[unknown yet]] role: [backend | frontend | shared | infra | mobile | other]
(Repeat one block per repository.)
Default workspace
[Local path of the primary product workspace, or [not decided yet]. Used only when the project does not have 2 or more repositories.]
Constraints
- [constraint 1, or
[none recorded yet]]
Non-goals
- [non-goal 1, or
[none recorded yet]]
Stakeholders
- [name or role, or
[not recorded yet]]
Initial references
- See
REFERENCES.mdfor external references captured at bootstrap time and via subsequentcapture-referencesruns.
Project-level memory pointers
PROJECT_CHARTER.md(this file): high-level project context.REFERENCES.md: external references with freshness metadata (URL, accessed date, summary, key points, tags).active/: in-progress task folders.archive/: completed task folders moved out ofactive/after delivery.
- REFERENCES.md Must use this exact structure:
REFERENCES
Project-level external references for <client>__<project>.
This file is appended to by capture-references. New entries are grouped under a topic/tag heading using the format defined in that command. Do not paraphrase entries; do not delete entries; deduplicate by URL.
Format reminder
## <Topic / Tag>
### <Title from the source>
- URL: <url>
- Accessed: YYYY-MM-DD
- Summary: <one paragraph; what this source says, never beyond what is on the page>
- Context within project: <1-3 sentences situating this source in the project; "first reference in this project" when first (ADR-0018)>
- Key points:
- "<verbatim quote from the source>"
- Consumes-by: <consuming command, task slug, or `[not consumed yet]` (ADR-0056)>
- Tags: <tag1>, <tag2>
Entries
(empty; populated by capture-references or seeded by this project-bootstrap run when the user provided references upfront)
Required output:
- Resolved project folder name (
<client>__<project>) - Full project path to create (
projects/<client>__<project>/) - Why this is a create operation (project did not exist before this run)
- Exact content for:
- PROJECT_CHARTER.md
- REFERENCES.md
- List of created subfolders (
active/,archive/) - Recommended next command (default:
task-init; verify against the directory listing before output) - Recommended editor mode (default: Ask)
- Why that is the correct next step
Claim grounding (active epistemic humility)
<!-- shared:claim-grounding -->Claim grounding (active epistemic humility). This block governs what you may assert and how you record it. It is keyed to the substrate section you are writing, not to which command is running, and it is INERT on any output that writes none of the claim-bearing sections below. Full contract and rationale: wos/active-epistemic-humility.md.
-
When this applies. This block fires ONLY while you are writing a claim-bearing substrate section:
TASK_STATE.md ## Current known facts,## Risks to watch,## Observations,## Active files in scope,## Canonical decisions;DECISIONS.md ## Locked decisions;IMPLEMENTATION_PLAN.md ## Current gaps,## Risks and mitigations;IMPACT_ANALYSIS.md;EXTERNAL_RESEARCH.md;REFERENCES.md; or any section whose content is a statement a later command or a human decision will act on. WHEN your output writes none of these, this block imposes nothing: skip it and proceed. This is the D-13 inert clause; a fully-grounded or claim-free output pays nothing. -
The unit is the load-bearing claim. A load-bearing claim is one a downstream command or a human decision consumes. A passing aside is not load-bearing; a statement someone will act on is. Apply the rest of this block per load-bearing claim, not per sentence.
-
Ground it or abstain. Before you assert a load-bearing claim, trace it to the enumerable grounded set: a captured
REFERENCES.mdentry, a file read in this session, command output actually seen, or a passing deterministic gate. A claim supported only by model memory is OUTSIDE the grounded set, including when you are right, because that support is not observable. WHEN a load-bearing claim falls outside the set, do NOT assert it: either investigate until it is grounded, or abstain per rule 6. -
Status records provenance, never confidence. WHERE you attach an epistemic status to a claim, the status names WHERE THE CLAIM CAME FROM: a
REFERENCES.mdentry title, a file path plus line, or the gate output it came from. It SHALL NOT express a degree of certainty. Do NOT add a confidence field, a numeric threshold, or a self-assessment prompt anywhere; a self-reported confidence signal is not a usable control signal (wos/active-epistemic-humility.mdPart 1.3). A status whose referent slot is empty is read as UNKNOWN, not as a weak yes. -
Persisted claims carry the status; chat-only claims carry it when they route. Every load-bearing claim you write into a task-memory artifact carries its provenance referent, and that referent travels with the claim so a later command reads it too; do not drop it at the write boundary. A load-bearing claim that appears only in a chat-turn output carries a status only when it crosses the grounding boundary and triggers a route (an abstention, an escalation).
-
Abstain as a routed continuation, never a bare refusal. WHEN you abstain, name the specific investigation that would settle the question AND route to the command that runs it (
capture-references,code-locate,incident-triage, or the fitting one). A withholding that stalls the work is invalid output. Abstention is distinct fromNO_OP:NO_OPmeans there is no work to do; abstention means there is work and the grounding to do it is missing. -
An unfired gate is not evidence. The absence of a fired check does not mean grounding existed. Do not read silence here as a pass.
Standard output layout (required)
<!-- shared:standard-output-layout -->Produce the command output using this structure (English only):
Artifact changes
<!-- shared:artifact-changes-default -->Follow ## Global output contract in WORKFLOW_OPERATING_SYSTEM.md for APPLIED / PROPOSED / SKIP rules.
Command transcript
- Keep this section operational and brief; do not restate file content already listed in
### Artifact changes. - Max 4 lines in normal runs.
- Max 3 lines in no-op runs (including
NO_OP_TRACE). - Include
NO_OP_TRACE(1-3 lines) when this run is a no-op (for example, the project folder already exists, in which case route the user totask-initorcapture-referencesinstead).
Handoff
<!-- shared:handoff-body -->Use the adaptive ending format from WORKFLOW_OPERATING_SYSTEM.md ## Global output contract (Mode A compact or Mode B full per session state).
Definition of done (command output)
- Resolved project path is explicit and naming rules are satisfied.
- Both mandatory files (
PROJECT_CHARTER.md,REFERENCES.md) are emitted with the full structure specified inFiles to generate. Missing or partial files invalidate the run; placeholders are required where facts are unknown but the file itself must exist. - No task folder is created by this command (no
active/YYYY-MM-DD_<task-slug>/). - When the user provided 2 or more repositories,
PROJECT_CHARTER.mdincludes the## Repositoriesblock with N entries (each: identifier, path, base branch, role) per the schema in the spec## Multi-repo support (v1); identifiers are lowercase, hyphenated, and unique. When the user provided 1 or zero repositories, the## Repositoriesblock is omitted and## Default workspacerecords the single known path or a placeholder. ### Artifact changesmarks project-memory writes asAPPLIEDonly if you are actually persisting files in Agent mode; otherwise markPROPOSED.- The basename in the
Run now:line corresponds to a real file incommands/<name>.md. The default next step istask-init; alternative next steps arecapture-referencesorwhat-next. - Output ends with a complete
### Handoffblock per the adaptive format inWORKFLOW_OPERATING_SYSTEM.md## Global output contract. - Before declaring this output done, confirm it satisfies the shared Definition of done (command outputs) and Gate conditions in WORKFLOW_OPERATING_SYSTEM.md.
Quality bar: Optimize for clean project initialization, low ambiguity at the project level, durable memory shared across all future tasks, and strict alignment with the official task repository structure.
<!-- cache-breakpoint -->What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.