Files
dotfiles/.config/opencode/commands/init.md
2026-03-10 13:09:47 +00:00

5.6 KiB

description, permalink
description permalink
Initialize or update a project with scaffold, docs, and basic-memory notes — adapts to both new and existing projects. opencode-config/commands/init

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 — real instruction file containing shared project guidance
    • CLAUDE.md — symlink to AGENTS.md
    • .cursorrules — symlink to AGENTS.md
    • .github/copilot-instructions.md — symlink to ../AGENTS.md
    • docs/architecture.md — stub with title + purpose
    • .gitignore — 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
    • ensure AGENTS.md exists as the real instruction file
    • create missing symlinks:
      • ln -s AGENTS.md CLAUDE.md
      • ln -s AGENTS.md .cursorrules
      • ln -s ../AGENTS.md .github/copilot-instructions.md
    • if AGENTS.md is missing but .github/copilot-instructions.md exists as a real file, move its content into AGENTS.md, then recreate .github/copilot-instructions.md as a symlink
    • examples:
      • if README.md exists and only CLAUDE.md is missing, create CLAUDE.md as a symlink to 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 exists and captures project-specific workflow decisions from Step 2.
  • Verify CLAUDE.md, .cursorrules, and .github/copilot-instructions.md are symlinks to AGENTS.md.
  • Ensure stubs are explicitly marked for later completion.
  • Keep edits additive and non-destructive for existing projects.

Step 5 — Initialize or update basic-memory project notes (Lead)

Always create or update basic-memory project notes for this project.

  • Ensure a dedicated per-repo basic-memory project exists. Use list_memory_projects to check. If not found, create one with create_memory_project using a short kebab-case name (e.g., my-web-app) and the repo's root directory as project_path.
  • All subsequent note operations in this step must pass project="<repo-project-name>".
  • Use search_notes (with project) to check for existing project notes to avoid duplicates.
  • Use write_note (with project) to create or update a knowledge/overview note with:
    • Project name
    • Purpose and stack
    • Key files (README.md, AGENTS.md, docs/architecture.md when present)
    • Notable init/update decisions
  • Add WikiLink cross-references to related notes (e.g., [[decisions/...]]).

Step 6 — Git handling (delegate to coder)

Delegate git operations to coder based on discovered state.

  • If .git/ already exists:
    • skip git init
    • 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, 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).