---
name: init-workspace
user-invocable: true
version: 4.3.0
argument-hint: <target-dir>
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
license: MIT
description: >
  Adapt the workflow scaffold to a new repository or add only missing substrate
  blocks to an existing install. Every install, hook, and overwrite needs
  explicit consent. Triggers: "init-workspace", "set up agentic workflow",
  "upgrade workflow scaffold".
---

# Init Workspace

Turn an empty or existing repo into one that works with the agentic workflow:
copy the generic scaffold, then **tailor it to this project** instead of leaving
raw placeholders.

## Turn contract — verify before ending the turn

```
✓ Required user inputs were answered concretely (not defaulted). Consent for
  every install, hook, and overwrite is explicit; a consent gap runs the
  three-tier dispatch and stops with the dispatcher's `open-questions@1` block
  — against a scratch unit folder when no unit exists yet (§Consent).
✓ The adapted scaffold and repository-state ledger are written (or the merge/abort decision was asked) and remaining placeholders are listed
✓ Nothing was installed, registered (MCP) or overwritten — including the global
  Serena config — without an explicit yes
✓ Artifact language: explicit user instruction > the project's declared docs language > English. The CONVERSATION language never decides — a Spanish prompt still produces English PRs/issues/commits/SPECs unless one of the first two says otherwise
✓ The closing `→ Next:` block is printed as the ABSOLUTE last output
```

About to end the turn with any box unchecked? The turn is NOT done — complete
the missing box first (weak models drop end-of-document duties; this list is
first on purpose).

## When to use

- Setting up a repo to use these skills and you want the documentation substrate
  (`AGENTS.md` + `docs/` map + templates) adapted to the project, not just copied.
- Prefer this over a static `npx degit gtrabanco/agentic-workflow/template` when you
  want the gate commands, architecture, and doc domains filled in by interview.

## Consent — mandatory, never defaulted

Installing a tool, wiring a hook, or overwriting an existing file each need an
explicit yes; context never supplies one, and an ambiguous repository state
(partially scaffolding) is not a route to guess. A consent gap is an open
question: **(0) provenance** (search the repo's own docs and record where) →
**(1) research** (concrete options) → **(2) halt**: run `node
scripts/needs-input.mjs <unit-dir>`, paste the `open-questions@1` block verbatim,
stop with the questions carried in it. The dispatcher needs a unit folder, and
consent gaps usually precede any unit — so the run first writes a scratch one
(`SPEC.md` + `decisions.md` in a `mktemp` directory, deleted after the paste)
and runs the dispatcher against that. Grammar and exit codes:
`orchestration-envelope`'s `references/TURN_CONTRACT.md` §Open questions.
`[target-dir]` is optional — absent means the current directory, recorded.

## Step 0 — Discover the project (always first)

Inspect the target dir (`[target-dir]`, default cwd) before touching anything:

- An existing **agent guide** (`AGENTS.md`, or a legacy `CLAUDE.md`), `docs/`,
  `.github/`? If so, **do not clobber** — check first whether it's an
  **agentic-workflow scaffold** (marker: an agent guide present *and* either
  `docs/features/ROADMAP.md` or a `docs/workflow/` dir). If both markers are
  present, offer **upgrade** as the default action, alongside merge /
  adapt-in-place / abort — see **Upgrade mode** below. If an agent guide or
  `docs/` exists but the markers are absent (a foreign scaffold), stay in
  bootstrap and ask merge / adapt in place / abort as before.
- Detect the stack from manifests (`package.json`, `pyproject.toml`, `go.mod`,
  `Cargo.toml`, `Gemfile`, …) to *propose* gate commands and naming conventions.
- Note the git state (is it a repo, what's the default branch, and the **remote
  URL → forge**: github.com → GitHub/`gh`, gitlab → GitLab/`glab`, else ask).


## Progressive loading — bootstrap or upgrade, never both

The reference allowlist is exactly the six linked paths below. Never invent or
read another `references/` path. Step 0 selects exactly one route:

**Hard rule for an existing Claude Code, Cursor, Copilot, or OpenCode
scaffold:** LOAD exactly `references/UPGRADE.md`. A missing committed safety
adapter is upgrade work, not a missing vendor primitive. Do not load bootstrap
or portability unless the runtime platform has no named adapter at all.

- Bare/foreign repository: read
  [bootstrap discovery](references/BOOTSTRAP_DISCOVERY.md), complete its
  interview, then read [bootstrap write](references/BOOTSTRAP_WRITE.md).
  Both the discovery and write routes load
  [SERENA language servers](references/SERENA.md) for stack detection.
- Existing agentic-workflow scaffold: read [upgrade](references/UPGRADE.md)
  only. Its additive-only rule is absolute; do not replay bootstrap.
  The upgrade route loads [SERENA language servers](references/SERENA.md)
  for the additive provisioning step.
- Provisioning Engram on a host with no pi package: read
  [Engram provisioning](references/ENGRAM.md) — detect, ask, register or
  instruct, report. Loaded by the bootstrap write route only (the pi package
  provisions itself, feature 66).
- No named adapter exists for the detected runtime platform: add
  [portability](references/PORTABILITY.md) only for that fallback. Claude Code,
  Cursor, Copilot, and OpenCode are named supported adapters; a missing adapter
  file is repaired by upgrade and does not trigger portability.

All resources are one hop from this file. Existing files, hook consent,
installation consent, and residual reporting are fixed contracts. Missing
template/migration evidence is reported by the selected route, never filled by
guessing. An existing OpenCode scaffold with only its safety adapter missing
loads exactly upgrade and skips bootstrap plus portability.

## Guardrails

- **Never overwrite an existing agent guide (`AGENTS.md`, or a legacy
  `CLAUDE.md`) or `docs/` without explicit consent.**
- **One guide, one name.** `AGENTS.md` is the guide; a legacy `CLAUDE.md` is
  retired only in upgrade mode, only with an explicit yes, and only after any
  content unique to it is folded into `AGENTS.md` first. A user whose Claude
  Code release predates `AGENTS.md` support may keep it — that choice is
  reported as a residual, never treated as drift to repair.
- **Additive-only, never clobber (upgrade mode).** Upgrade mode only adds
  blocks the project lacks and fills raw placeholders — it never rewrites or
  deletes a block the project already tailored, even if the current template
  changed that block too. A genuine re-tailor is a separate, explicitly
  requested bootstrap adapt-in-place run, never something upgrade mode does
  on its own. **The urgency label seeding is additive-only the same way:**
  create a missing `urgent`/`fix-next` label, never touch one that already
  exists (name, color, or description a project already customized).
- **Serena convention — tool and config, one consent question.** `.serena/project.yml`
  is committed; `project.local.yml` and `cache` stay local. Never write
  `.serena/` config, install the tool, register an MCP server or touch the
  global `serena_config.yml` (`trusted_project_path_patterns`) without an
  explicit yes — [SERENA](references/SERENA.md) owns the single question and
  the fixed provisioning report. LSP never verifies documents — false positives
  happen when a file type's server is not listed (markdown/yaml/json are never
  auto-detected), a listed server that fails to start must be removed (one
  failure disables every server in the project), and LSP evidence stays
  TypeScript/JavaScript-only. Document verification is a script's job.
- **Engram provisioning is ask-first, never assumed (feature 66).** Detect the
  `engram` binary, ask before writing any host MCP config, write the absolute
  path with the exact `mcp --tools=agent` argv, and report exactly what was
  written. An existing `engram` declaration is never overwritten, and an absent
  binary is a recorded residual — the documented install route is
  `pi install npm:gentle-engram@latest`, never the CLI's own setup subcommand,
  which keeps serving whatever version ran it until it is re-run.
- **Retrieval index scaffold and git hooks are consent-gated (AC22).** The
  index surface — the committed `.agentic-workflow/index.json` config plus the
  three freshness hooks (`post-merge`, `post-checkout`, `post-rewrite`, all
  `index-sync.sh` installed into `.git/hooks/`) — is installed **only after an
  explicit yes** to the question "install the doc retrieval index scaffold and
  its git hooks?". Without consent: install nothing, record it as a residual
  (the entry point still runs and builds its index on first query — the hooks
  are only a freshness fast path), and never write `.git/hooks/` or the config
  on a later visit without a fresh yes. The hooks are best-effort by contract
  (`doc --sync --quiet`, always exit 0 — a fast path never breaks git).
- **Never redefine the urgency label vocabulary here.** `skills/triage-issue
  /SKILL.md` is the sole owner of the `urgent`/`fix-next` names, colors, and
  apply rules — this skill only seeds those two labels into the repo; it never
  invents a third label or changes what the two mean.
- Docs-only scaffolding; no app code, no dependencies installed unprompted.
- Architecture-agnostic: record the project's pattern, don't impose one.
- Honest placeholders over invented specifics; flag what's left to fill.
- Honor the project's **Workflow conventions** once present; on an existing repo,
  don't work on its default branch and never commit/push unless asked.

## Unit document conventions (the adaptive lane)

The adaptive lane (feature 61) replaces the fixed pipeline with a single-unit-
document model. Every NEW unit produces one `SPEC.md` under
`docs/features/<NN>-<slug>/` with 14 sections: Objective, Why, User outcome, Acceptance criteria, Impact,
Non-goals, Future cost, Applicable tests, Known pre-existing issues, Tasks,
Evidence, Progress log, Next, References.

Conventions written into the project's AGENTS.md:

- **Triage**: the lane conductor (`/unit-lane` / `workflow-status`) returns a
  deterministic ordered list of steps (research, design, plan, implement,
  tests, evidence, review, docs, release).
- **Guards**: `scripts/diff-guard.mjs` measures `git diff --stat` at boundaries;
  overflow → mandatory re-triage. Anti-gaming: "NEVER shrink a diff by deleting
  comments, blank lines, docs or tests."
- **Evidence rows**: one per AC — what was run, exit/digest, output (≤2 lines),
  verified-by. Verified, not claimed.
- **Progress log**: dated entries (`YYYY-MM-DD HH:MM`) per step taken.
- **Commit format**: `type(scope): description` (conventional commits).
- **Roadmap status**: `idea → defined → planned → in-progress → done`.

These are written by bootstrap (fresh) and upgrade mode (additive-only for pre-
lane installs). A pre-lane project gets only: the lane conventions section in
AGENTS.md, the unit doc template under `docs/features/_TEMPLATE/`, and the
docs-map row for the unit doc.

## Normalized Repository State

Seed `docs/workflow/REPOSITORY_STATE.md` from the template. Explain that
discovery freezes evidence before planning and only the resolver updates facts.

## Architectural invariants

Offer `docs/architecture/ARCHITECTURAL_INVARIANTS.md` as an optional project
contract for long-lived architectural rules. Its entries must name a stable ID,
repository evidence, and the authority that can change the rule. Do not infer a
rule from the implementation or a feature SPEC. A project without this document
remains compatible; record `n/a: no project invariants declared` in later
workflow artifacts rather than creating one silently.


## Portability

The scaffold is vendor-neutral; only hook activation differs. When the detected
agent has no named adapter, follow [portability](references/PORTABILITY.md) and
keep it as an explicit residual. A supported Claude Code, Cursor, Copilot, or
OpenCode adapter does not load this fallback.

## Relationship to other skills

- `npx degit gtrabanco/agentic-workflow/template` — the static copy this skill
  adapts. Use that when you want the raw scaffold and will fill it yourself.
- `docs/workflow/PORTABLE_PROMPT.md` — regenerates the **skills** adapted to a
  project (behavior). This skill adapts the **substrate** (docs). Complementary.
- After init: `discover-repository-state` → `workflow-status` (to see what's
  startable) → `/unit-lane` (the lane conductor); run `audit-docs` to confirm
  the scaffold is coherent.

## Done when

- A tailored `AGENTS.md` + `docs/` scaffold + `.github/` templates exist in the
  target, unused folders pruned, residual placeholders flagged, the platform's
  companion review skills are recorded (and offered), and the `urgent`/
  `fix-next` labels are seeded (scaffold) or additively reconciled (upgrade),
  and every accepted safety adapter is active and fixture-tested — or explicitly
  listed as a residual when its hook API/dependency was unavailable.
  The adaptive lane conventions (unit document, triage, catalog steps, guards,
  evidence, commit formats) are written into AGENTS.md.
- Serena is provisioned and reported: the one consent question was asked, the
  project config written (or skipped with its reason), the tool installed and its
  MCP server registered for the detected platform — or each refused/absent item
  recorded as a residual with its reason — and the fixed provisioning report
  states the health check per listed server. The run completes either way.
- **The closing `→ Next:` block is printed** (plus the offer to install the skills):

  ```
  → Next: /discover-repository-state — freeze repository evidence before planning
    · raw idea → /workflow-status → /unit-lane (the lane conductor)
    · next roadmap entry → /unit-lane (tridirection decides catalog steps)
    · confirm the scaffold is coherent → /audit-docs
  ```
