|
|
@@ -0,0 +1,246 @@
|
|
|
+---
|
|
|
+description: Start a new session - reads context and scaffolds .bonfire/ if needed
|
|
|
+allowed-tools: Bash(git:*), Bash(gh:*), Bash(mkdir:*), Read, Write, Glob, AskUserQuestion, mcp__linear__*
|
|
|
+model: haiku
|
|
|
+---
|
|
|
+
|
|
|
+# Start Session
|
|
|
+
|
|
|
+## Step 1: Find Git Root
|
|
|
+
|
|
|
+Run `git rev-parse --show-toplevel` to locate the repository root. All session files live at `<git-root>/.bonfire/`.
|
|
|
+
|
|
|
+## Step 2: Check for Bonfire Directory
|
|
|
+
|
|
|
+Check if `<git-root>/.bonfire/index.md` exists.
|
|
|
+
|
|
|
+**If .bonfire/ does NOT exist**, scaffold it:
|
|
|
+
|
|
|
+1. Tell the user: "No bonfire directory found. Let me set that up for you."
|
|
|
+
|
|
|
+2. Use AskUserQuestion to ask setup questions (4 questions, one round):
|
|
|
+
|
|
|
+ 1. "Where should specs be saved?" (Header: "Specs")
|
|
|
+ - .bonfire/specs/ (Recommended) - Keep with session context
|
|
|
+ - specs/ - Project root level
|
|
|
+
|
|
|
+ 2. "Where should docs be saved?" (Header: "Docs")
|
|
|
+ - .bonfire/docs/ (Recommended) - Keep with session context
|
|
|
+ - docs/ - Project root level
|
|
|
+
|
|
|
+ 3. "How should `.bonfire/` be handled in git?" (Header: "Git")
|
|
|
+ - ignore-all (Recommended) - Keep sessions private/local
|
|
|
+ - hybrid - Commit docs/specs, keep notes private
|
|
|
+ - commit-all - Share everything with team
|
|
|
+
|
|
|
+ 4. "Enable Linear MCP integration?" (Header: "Linear")
|
|
|
+ - No (Recommended) - Skip Linear integration
|
|
|
+ - Yes - Fetch/create Linear issues (requires Linear MCP)
|
|
|
+
|
|
|
+3. Create the directory structure based on user choices:
|
|
|
+
|
|
|
+ **Always create in .bonfire/**:
|
|
|
+ ```
|
|
|
+ .bonfire/
|
|
|
+ ├── index.md
|
|
|
+ ├── config.json
|
|
|
+ ├── archive/
|
|
|
+ ├── scripts/
|
|
|
+ └── .gitignore
|
|
|
+ ```
|
|
|
+
|
|
|
+ **If specsLocation is `.bonfire/specs/`**: create `.bonfire/specs/`
|
|
|
+ **If specsLocation is `specs/`**: create `<git-root>/specs/`
|
|
|
+
|
|
|
+ **If docsLocation is `.bonfire/docs/`**: create `.bonfire/docs/`
|
|
|
+ **If docsLocation is `docs/`**: create `<git-root>/docs/`
|
|
|
+
|
|
|
+4. Detect project name from: package.json name → git remote → directory name
|
|
|
+
|
|
|
+5. Create `config.json` with user's answers:
|
|
|
+ ```json
|
|
|
+ {
|
|
|
+ "specsLocation": "<user-answer>",
|
|
|
+ "docsLocation": "<user-answer>",
|
|
|
+ "gitStrategy": "<user-answer>",
|
|
|
+ "linearEnabled": <true-or-false>
|
|
|
+ }
|
|
|
+ ```
|
|
|
+
|
|
|
+6. Create `index.md` with template:
|
|
|
+ ```markdown
|
|
|
+ # Session Context: [PROJECT_NAME]
|
|
|
+
|
|
|
+ **Date**: [CURRENT_DATE]
|
|
|
+ **Status**: Active
|
|
|
+ **Branch**: main
|
|
|
+
|
|
|
+ ---
|
|
|
+
|
|
|
+ ## Current State
|
|
|
+
|
|
|
+ [Describe what you're working on]
|
|
|
+
|
|
|
+ ---
|
|
|
+
|
|
|
+ ## Recent Sessions
|
|
|
+
|
|
|
+ ### Session 1 - [CURRENT_DATE]
|
|
|
+
|
|
|
+ **Goal**: [What you want to accomplish]
|
|
|
+
|
|
|
+ **Accomplished**:
|
|
|
+ - [List completed items]
|
|
|
+
|
|
|
+ **Decisions**:
|
|
|
+ - [Key decisions made]
|
|
|
+
|
|
|
+ **Blockers**: None
|
|
|
+
|
|
|
+ ---
|
|
|
+
|
|
|
+ ## Next Session Priorities
|
|
|
+
|
|
|
+ 1. [Priority items]
|
|
|
+
|
|
|
+ ---
|
|
|
+
|
|
|
+ ## Key Resources
|
|
|
+
|
|
|
+ **Code References**:
|
|
|
+ - [Component/feature]: `path/to/file.ts`
|
|
|
+
|
|
|
+ **External Links**:
|
|
|
+ - [Issue Tracker](url)
|
|
|
+
|
|
|
+ ---
|
|
|
+
|
|
|
+ ## Archived Sessions
|
|
|
+
|
|
|
+ [Links to archived sessions will appear here]
|
|
|
+
|
|
|
+ ---
|
|
|
+
|
|
|
+ ## Notes
|
|
|
+
|
|
|
+ [Any additional context]
|
|
|
+ ```
|
|
|
+
|
|
|
+7. Create `.gitignore` based on chosen strategy and locations:
|
|
|
+
|
|
|
+ **Ignore all**:
|
|
|
+ ```
|
|
|
+ *
|
|
|
+ !.gitignore
|
|
|
+ ```
|
|
|
+
|
|
|
+ **Hybrid** (only include dirs that are inside .bonfire/):
|
|
|
+ ```
|
|
|
+ *
|
|
|
+ !.gitignore
|
|
|
+ ```
|
|
|
+ If docsLocation is `.bonfire/docs/`, add:
|
|
|
+ ```
|
|
|
+ !docs/
|
|
|
+ !docs/**
|
|
|
+ ```
|
|
|
+ If specsLocation is `.bonfire/specs/`, add:
|
|
|
+ ```
|
|
|
+ !specs/
|
|
|
+ !specs/**
|
|
|
+ ```
|
|
|
+
|
|
|
+ **Commit all**:
|
|
|
+ ```
|
|
|
+ data/
|
|
|
+ scratch/
|
|
|
+ scripts/
|
|
|
+ ```
|
|
|
+
|
|
|
+**If .bonfire/ EXISTS**, proceed to Step 3.
|
|
|
+
|
|
|
+## Step 3: Check/Update CLAUDE.md
|
|
|
+
|
|
|
+Check if `<git-root>/CLAUDE.md` exists.
|
|
|
+
|
|
|
+**If CLAUDE.md does NOT exist**, create it:
|
|
|
+```markdown
|
|
|
+# [PROJECT_NAME]
|
|
|
+
|
|
|
+## Quick Context
|
|
|
+
|
|
|
+Read `.bonfire/index.md` for current project state, recent work, and priorities.
|
|
|
+
|
|
|
+## Bonfire Commands
|
|
|
+
|
|
|
+- `/bonfire:start` - Start a session (reads context)
|
|
|
+- `/bonfire:end` - End session (updates context)
|
|
|
+- `/bonfire:spec` - Create implementation spec
|
|
|
+- `/bonfire:document <topic>` - Document a topic
|
|
|
+- `/bonfire:review` - Review work for blindspots and improvements
|
|
|
+- `/bonfire:archive` - Archive completed work
|
|
|
+- `/bonfire:configure` - Change project settings
|
|
|
+```
|
|
|
+
|
|
|
+**If CLAUDE.md EXISTS**, check if it references `.bonfire/index.md`. If not, append:
|
|
|
+```markdown
|
|
|
+
|
|
|
+## Session Context
|
|
|
+
|
|
|
+Read `.bonfire/index.md` for current project state, recent work, and priorities.
|
|
|
+```
|
|
|
+
|
|
|
+## Step 4: Read Session Context
|
|
|
+
|
|
|
+Read `<git-root>/.bonfire/index.md` and report when ready.
|
|
|
+
|
|
|
+Summarize:
|
|
|
+- Current state
|
|
|
+- Recent work
|
|
|
+- Next priorities
|
|
|
+
|
|
|
+Then ask: "What do you want to work on this session?"
|
|
|
+
|
|
|
+## Step 5: Fetch External Context (Optional)
|
|
|
+
|
|
|
+**Only fetch if user provides a new URL or issue ID:**
|
|
|
+
|
|
|
+### Detecting Issue Type
|
|
|
+
|
|
|
+- **GitHub**: Starts with `#`, contains `github.com`, or doesn't match Linear pattern
|
|
|
+- **Linear**: Matches `[A-Z]+-[0-9]+` pattern (e.g., `ENG-123`, `ABC-456`) or contains `linear.app`
|
|
|
+
|
|
|
+### GitHub Issues/PRs
|
|
|
+
|
|
|
+Use `gh` CLI:
|
|
|
+- `gh pr view [URL] --json title,body,state,labels`
|
|
|
+- `gh issue view [URL] --json title,body,state,labels`
|
|
|
+
|
|
|
+### Linear Issues
|
|
|
+
|
|
|
+First, read `<git-root>/.bonfire/config.json` and check `linearEnabled`.
|
|
|
+
|
|
|
+**If `linearEnabled` is false or not set**: Skip Linear, treat as ad-hoc task.
|
|
|
+
|
|
|
+**If `linearEnabled` is true**:
|
|
|
+1. Use Linear MCP `linear_search_issues` tool to find the issue by ID (e.g., `ENG-123`)
|
|
|
+2. Extract: title, description, state, priority, labels, assignee
|
|
|
+3. On success: Summarize the issue context
|
|
|
+4. On failure: Warn user - "Couldn't fetch Linear issue. Linear MCP may not be configured. Continue without issue context?"
|
|
|
+
|
|
|
+Note: Tool names may vary by Linear MCP implementation. Common tools: `linear_search_issues`, `linear_create_issue`, `linear_update_issue`.
|
|
|
+
|
|
|
+### Update Session Context
|
|
|
+
|
|
|
+If issue was fetched successfully:
|
|
|
+- Add reference to `index.md` under Current State
|
|
|
+- Include issue ID, title, and link
|
|
|
+- Note the issue tracker type (GitHub/Linear)
|
|
|
+
|
|
|
+### Fallback
|
|
|
+
|
|
|
+If no URL/issue ID provided (continuing work, ad-hoc task):
|
|
|
+- Proceed with existing session context
|
|
|
+- Session notes are the source of truth for ongoing work
|
|
|
+
|
|
|
+Confirm understanding and ask how to proceed.
|