Files
dotfiles/.config/opencode/commands/init.md
2026-03-08 14:37:55 +00:00

107 lines
5.1 KiB
Markdown

---
description: Initialize or update a project with scaffold, docs, and knowledge graph — adapts to both new and existing projects.
---
You are initializing or updating a project. Follow these steps in order.
Project hint (may be empty):
$ARGUMENTS
## Step 1 — Explore current project state (delegate to `explorer`)
Delegate to the `explorer` subagent first, before any questions, to determine whether this is a new or existing project.
- Ask explorer to inspect the working tree for project-defining artifacts, including:
- source files and source directories
- `README.md`, `AGENTS.md`, `docs/`
- stack markers such as `package.json`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `composer.json`
- git markers such as `.git/`
- any similar files that strongly indicate an existing project
- Ask explorer to return:
- classification: `new_project` or `existing_project`
- inferred project name, purpose, and tech stack (with confidence)
- which required scaffold files already exist vs are missing
- whether `.git/` exists
## Step 2 — Clarify (Lead, one round max)
Use the `question` tool for at most one round, adapting to Step 1 findings.
- If explorer's classification confidence is low (e.g., directory has only a few ambiguous files), include the classification itself as a question to confirm.
- If classification is `existing_project`:
- confirm or correct explorer inferences (name, one-sentence purpose, stack)
- ask only for unknown or low-confidence fields
- do **not** ask whether to initialize git if `.git/` already exists
- do **not** ask for files/details that are already present and clear
- If classification is `new_project`:
- ask:
- project name and one-sentence purpose
- primary language / framework / tech stack
- whether to initialize a git repository
## Step 3 — Scaffold (delegate to `coder`)
Delegate to the `coder` subagent with explicit mode (`new_project` or `existing_project`) and the file existence map from Step 1.
- Required scaffold targets:
- `README.md` — title, purpose, tech stack, quick-start, project structure overview
- `AGENTS.md` — project-specific workflow notes (code style, test commands, linting, build commands, commit conventions); do **not** duplicate global `AGENTS.md` policies — only add project-specific details
- `docs/architecture.md` — stub with title + purpose
- `.gitignore` — must include `.megamemory/` entry; add stack-appropriate ignores (e.g., `node_modules/`, `__pycache__/`, `target/`)
- other stack-specific scaffold files if clearly implied (e.g., `package.json`, `pyproject.toml`)
- If `new_project`:
- create all required scaffold files/directories
- If `existing_project`:
- create or fill in only missing pieces
- **do not overwrite existing files**
- explicitly instruct coder to check existence before creating each target
- if `.gitignore` exists, instruct coder to append `.megamemory/` if not already present
- examples:
- if `README.md` exists and `AGENTS.md` is missing, create only `AGENTS.md`
- if `docs/` is missing, create it and add `docs/architecture.md`
## Step 4 — Documentation review (delegate to `librarian`)
Always delegate to the `librarian` subagent, for both new and existing projects.
- Ensure `README.md` is accurate and complete for the current project state.
- Ensure `AGENTS.md` captures project-specific workflow decisions from Step 2.
- Ensure stubs are explicitly marked for later completion.
- Keep edits additive and non-destructive for existing projects.
## Step 5 — Initialize or update knowledge graph (Lead)
Always update megamemory for this project.
- First call `megamemory:understand` to check whether a project root concept already exists.
- If an appropriate concept exists, call `megamemory:update_concept`.
- If none exists, call `megamemory:create_concept` with:
- Kind: `module`
- Name: `<project name>`
- Summary: purpose, stack, key files, and notable init/update decisions
- File refs: include whichever exist among `README.md`, `AGENTS.md`, `docs/architecture.md`
- Create links (`megamemory:link`) from this concept to related existing concepts when applicable. If no related concepts exist yet (brand new knowledge graph), skip linking.
## Step 6 — Git handling (delegate to `coder`)
Delegate git operations to `coder` based on discovered state.
- If `.git/` already exists:
- skip `git init`
- ensure `.megamemory/` is in `.gitignore` (if not already handled in Step 3)
- stage only newly created or modified files from this init/update flow
- create a commit
- If `.git/` does not exist:
- use Step 2 answer to decide whether to run `git init`
- if initialized, ensure `.megamemory/` is in `.gitignore`, then stage only newly created or modified files and create a commit
- Commit message should be concise and conventional, e.g.:
- `chore: initialize project scaffold` (new project)
- `chore: add missing project scaffolding` (existing project)
## Completion report
Summarize:
- Files created and files updated, with purpose.
- Decisions made and decisions deferred.
- What the user should fill in next (stubs, open questions, follow-up documentation).