feat: initial commit — BMAD tooling, Claude memories, firmware scaffold
Adds the complete project foundation: - BMAD BMM workflow tooling (_bmad/) - Claude slash commands, skills, and project memories (.claude/) - ESP32 firmware scaffold (PlatformIO + Waveshare e-ink driver) - .gitignore excluding _bmad-output/ and .pio/ build artifacts Planning artifacts (PRD, architecture, epics) are intentionally not tracked — they live in _bmad-output/ per project convention. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
---
|
||||
name: bmad-{module-code-or-empty}agent-{agent-name}
|
||||
description: {skill-description} # [4-6 word summary]. [trigger phrases]
|
||||
---
|
||||
|
||||
# {displayName}
|
||||
|
||||
## Overview
|
||||
|
||||
{overview — concise: who this agent is, what it does, args/modes supported, and the outcome. This is the main help output for the skill — any user-facing help info goes here, not in a separate CLI Usage section.}
|
||||
|
||||
## Identity
|
||||
|
||||
{Who is this agent? One clear sentence.}
|
||||
|
||||
## Communication Style
|
||||
|
||||
{How does this agent communicate? Be specific with examples.}
|
||||
|
||||
## Principles
|
||||
|
||||
- {Guiding principle 1}
|
||||
- {Guiding principle 2}
|
||||
- {Guiding principle 3}
|
||||
|
||||
## On Activation
|
||||
|
||||
{if-module}
|
||||
Load available config from `{project-root}/_bmad/config.yaml` and `{project-root}/_bmad/config.user.yaml` (root level and `{module-code}` section). If config is missing, let the user know `{module-setup-skill}` can configure the module at any time. Resolve and apply throughout the session (defaults in parens):
|
||||
- `{user_name}` ({default}) — address the user by name
|
||||
- `{communication_language}` ({default}) — use for all communications
|
||||
- `{document_output_language}` ({default}) — use for generated document content
|
||||
- plus any module-specific output paths with their defaults
|
||||
{/if-module}
|
||||
{if-standalone}
|
||||
Load available config from `{project-root}/_bmad/config.yaml` and `{project-root}/_bmad/config.user.yaml` if present. Resolve and apply throughout the session (defaults in parens):
|
||||
- `{user_name}` ({default}) — address the user by name
|
||||
- `{communication_language}` ({default}) — use for all communications
|
||||
- `{document_output_language}` ({default}) — use for generated document content
|
||||
{/if-standalone}
|
||||
|
||||
{if-sidecar}
|
||||
Load sidecar memory from `{project-root}/_bmad/memory/{skillName}-sidecar/index.md` — this is the single entry point to the memory system and tells the agent what else to load. Load `./references/memory-system.md` for memory discipline. If sidecar doesn't exist, load `./references/init.md` for first-run onboarding.
|
||||
{/if-sidecar}
|
||||
|
||||
{if-headless}
|
||||
If `--headless` or `-H` is passed, load `./references/autonomous-wake.md` and complete the task without interaction.
|
||||
{/if-headless}
|
||||
|
||||
{if-interactive}
|
||||
Greet the user. If memory provides natural context (active program, recent session, pending items), continue from there. Otherwise, offer to show available capabilities.
|
||||
{/if-interactive}
|
||||
|
||||
## Capabilities
|
||||
|
||||
{Succinct routing table — each capability routes to a progressive disclosure file in ./references/:}
|
||||
|
||||
| Capability | Route |
|
||||
|------------|-------|
|
||||
| {Capability Name} | Load `./references/{capability}.md` |
|
||||
| Save Memory | Load `./references/save-memory.md` |
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
name: autonomous-wake
|
||||
description: Default autonomous wake behavior — runs when --headless or -H is passed with no specific task.
|
||||
---
|
||||
|
||||
# Autonomous Wake
|
||||
|
||||
You're running autonomously. No one is here. No task was specified. Execute your default wake behavior and exit.
|
||||
|
||||
## Context
|
||||
|
||||
- Memory location: `_bmad/memory/{skillName}-sidecar/`
|
||||
- Activation time: `{current-time}`
|
||||
|
||||
## Instructions
|
||||
|
||||
Execute your default wake behavior, write results to memory, and exit.
|
||||
|
||||
## Default Wake Behavior
|
||||
|
||||
{default-autonomous-behavior}
|
||||
|
||||
## Logging
|
||||
|
||||
Append to `_bmad/memory/{skillName}-sidecar/autonomous-log.md`:
|
||||
|
||||
```markdown
|
||||
## {YYYY-MM-DD HH:MM} - Autonomous Wake
|
||||
|
||||
- Status: {completed|actions taken}
|
||||
- {relevant-details}
|
||||
```
|
||||
@@ -0,0 +1,47 @@
|
||||
{if-module}
|
||||
# First-Run Setup for {displayName}
|
||||
|
||||
Welcome! Setting up your workspace.
|
||||
|
||||
## Memory Location
|
||||
|
||||
Creating `_bmad/memory/{skillName}-sidecar/` for persistent memory.
|
||||
|
||||
## Initial Structure
|
||||
|
||||
Creating:
|
||||
- `index.md` — essential context, active work
|
||||
- `patterns.md` — your preferences I learn
|
||||
- `chronology.md` — session timeline
|
||||
|
||||
Configuration will be loaded from your module's config.yaml.
|
||||
|
||||
{custom-init-questions}
|
||||
|
||||
## Ready
|
||||
|
||||
Setup complete! I'm ready to help.
|
||||
{/if-module}
|
||||
|
||||
{if-standalone}
|
||||
# First-Run Setup for {displayName}
|
||||
|
||||
Welcome! Let me set up for this environment.
|
||||
|
||||
## Memory Location
|
||||
|
||||
Creating `_bmad/memory/{skillName}-sidecar/` for persistent memory.
|
||||
|
||||
{custom-init-questions}
|
||||
|
||||
## Initial Structure
|
||||
|
||||
Creating:
|
||||
- `index.md` — essential context, active work, saved paths above
|
||||
- `patterns.md` — your preferences I learn
|
||||
- `chronology.md` — session timeline
|
||||
|
||||
## Ready
|
||||
|
||||
Setup complete! I'm ready to help.
|
||||
{/if-standalone}
|
||||
@@ -0,0 +1,109 @@
|
||||
# Memory System for {displayName}
|
||||
|
||||
**Memory location:** `_bmad/memory/{skillName}-sidecar/`
|
||||
|
||||
## Core Principle
|
||||
|
||||
Tokens are expensive. Only remember what matters. Condense everything to its essence.
|
||||
|
||||
## File Structure
|
||||
|
||||
### `index.md` — Primary Source
|
||||
|
||||
**Load on activation.** Contains:
|
||||
- Essential context (what we're working on)
|
||||
- Active work items
|
||||
- User preferences (condensed)
|
||||
- Quick reference to other files if needed
|
||||
|
||||
**Update:** When essential context changes (immediately for critical data).
|
||||
|
||||
### `access-boundaries.md` — Access Control (Required for all agents)
|
||||
|
||||
**Load on activation.** Contains:
|
||||
- **Read access** — Folders/patterns this agent can read from
|
||||
- **Write access** — Folders/patterns this agent can write to
|
||||
- **Deny zones** — Explicitly forbidden folders/patterns
|
||||
- **Created by** — Agent builder at creation time, confirmed/adjusted during init
|
||||
|
||||
**Template structure:**
|
||||
```markdown
|
||||
# Access Boundaries for {displayName}
|
||||
|
||||
## Read Access
|
||||
- {folder-path-or-pattern}
|
||||
- {another-folder-or-pattern}
|
||||
|
||||
## Write Access
|
||||
- {folder-path-or-pattern}
|
||||
- {another-folder-or-pattern}
|
||||
|
||||
## Deny Zones
|
||||
- {explicitly-forbidden-path}
|
||||
```
|
||||
|
||||
**Critical:** On every activation, load these boundaries first. Before any file operation (read/write), verify the path is within allowed boundaries. If uncertain, ask user.
|
||||
|
||||
{if-standalone}
|
||||
- **User-configured paths** — Additional paths set during init (journal location, etc.) are appended here
|
||||
{/if-standalone}
|
||||
|
||||
### `patterns.md` — Learned Patterns
|
||||
|
||||
**Load when needed.** Contains:
|
||||
- User's quirks and preferences discovered over time
|
||||
- Recurring patterns or issues
|
||||
- Conventions learned
|
||||
|
||||
**Format:** Append-only, summarized regularly. Prune outdated entries.
|
||||
|
||||
### `chronology.md` — Timeline
|
||||
|
||||
**Load when needed.** Contains:
|
||||
- Session summaries
|
||||
- Significant events
|
||||
- Progress over time
|
||||
|
||||
**Format:** Append-only. Prune regularly; keep only significant events.
|
||||
|
||||
## Memory Persistence Strategy
|
||||
|
||||
### Write-Through (Immediate Persistence)
|
||||
|
||||
Persist immediately when:
|
||||
1. **User data changes** — preferences, configurations
|
||||
2. **Work products created** — entries, documents, code, artifacts
|
||||
3. **State transitions** — tasks completed, status changes
|
||||
4. **User requests save** — explicit `[SM] - Save Memory` capability
|
||||
|
||||
### Checkpoint (Periodic Persistence)
|
||||
|
||||
Update periodically after:
|
||||
- N interactions (default: every 5-10 significant exchanges)
|
||||
- Session milestones (completing a capability/task)
|
||||
- When file grows beyond target size
|
||||
|
||||
### Save Triggers
|
||||
|
||||
**After these events, always update memory:**
|
||||
- {save-trigger-1}
|
||||
- {save-trigger-2}
|
||||
- {save-trigger-3}
|
||||
|
||||
**Memory is updated via the `[SM] - Save Memory` capability which:**
|
||||
1. Reads current index.md
|
||||
2. Updates with current session context
|
||||
3. Writes condensed, current version
|
||||
4. Checkpoints patterns.md and chronology.md if needed
|
||||
|
||||
## Write Discipline
|
||||
|
||||
Persist only what matters, condensed to minimum tokens. Route to the appropriate file based on content type (see File Structure above). Update `index.md` when other files change.
|
||||
|
||||
## Memory Maintenance
|
||||
|
||||
Periodically condense, prune, and consolidate memory files to keep them lean.
|
||||
|
||||
## First Run
|
||||
|
||||
If sidecar doesn't exist, load `init.md` to create the structure.
|
||||
@@ -0,0 +1,281 @@
|
||||
# Quality Report: {agent-name}
|
||||
|
||||
**Scanned:** {timestamp}
|
||||
**Skill Path:** {skill-path}
|
||||
**Report:** {report-file-path}
|
||||
**Performed By** QualityReportBot-9001 and {user_name}
|
||||
|
||||
## Executive Summary
|
||||
|
||||
- **Total Issues:** {total-issues}
|
||||
- **Critical:** {critical} | **High:** {high} | **Medium:** {medium} | **Low:** {low}
|
||||
- **Overall Quality:** {Excellent|Good|Fair|Poor}
|
||||
- **Overall Cohesion:** {cohesion-score}
|
||||
- **Craft Assessment:** {craft-assessment}
|
||||
|
||||
<!-- Synthesize 1-3 sentence narrative: agent persona/purpose (from enhancement-opportunities skill_understanding.purpose + agent-cohesion agent_identity), architecture quality, and most significant finding. Frame this as an agent assessment, not a workflow assessment. -->
|
||||
{executive-narrative}
|
||||
|
||||
### Issues by Category
|
||||
|
||||
| Category | Critical | High | Medium | Low |
|
||||
|----------|----------|------|--------|-----|
|
||||
| Structure & Capabilities | {n} | {n} | {n} | {n} |
|
||||
| Prompt Craft | {n} | {n} | {n} | {n} |
|
||||
| Execution Efficiency | {n} | {n} | {n} | {n} |
|
||||
| Path & Script Standards | {n} | {n} | {n} | {n} |
|
||||
| Agent Cohesion | {n} | {n} | {n} | {n} |
|
||||
| Creative | — | — | {n} | {n} |
|
||||
|
||||
---
|
||||
|
||||
## Agent Identity
|
||||
|
||||
<!-- From agent-cohesion agent_identity block. -->
|
||||
|
||||
- **Persona:** {persona-summary}
|
||||
- **Primary Purpose:** {primary-purpose}
|
||||
- **Capabilities:** {capability-count}
|
||||
|
||||
---
|
||||
|
||||
## Strengths
|
||||
|
||||
*What this agent does well — preserve these during optimization:*
|
||||
|
||||
<!-- Collect from ALL of these sources:
|
||||
- All scanners: findings[] with severity="strength" or category="strength"
|
||||
- prompt-craft: findings where severity="note" and observation is positive
|
||||
- prompt-craft: positive aspects from assessments.skillmd_assessment.notes and persona_context assessment
|
||||
- enhancement-opportunities: bright_spots from each assessments.user_journeys[] entry
|
||||
- structure: positive observations from assessments.metadata (e.g., memory setup present, headless mode configured)
|
||||
Group by theme. Each strength should explain WHY it matters. -->
|
||||
|
||||
{strengths-list}
|
||||
|
||||
---
|
||||
|
||||
{if-truly-broken}
|
||||
## Truly Broken or Missing
|
||||
|
||||
*Issues that prevent the agent from working correctly:*
|
||||
|
||||
<!-- Every CRITICAL and HIGH severity issue from ALL scanners. Maximum detail: description, affected files/lines, fix instructions. These are the most actionable part of the report. -->
|
||||
|
||||
{truly-broken-findings}
|
||||
|
||||
---
|
||||
{/if-truly-broken}
|
||||
|
||||
## Detailed Findings by Category
|
||||
|
||||
### 1. Structure & Capabilities
|
||||
|
||||
<!-- Source: structure-temp.json. Agent-specific: includes identity effectiveness, memory setup, headless mode, capability cross-references. -->
|
||||
|
||||
{if-structure-metadata}
|
||||
**Agent Metadata:**
|
||||
- Sections found: {sections-list}
|
||||
- Capabilities: {capabilities-count}
|
||||
- Memory sidecar: {has-memory}
|
||||
- Headless mode: {has-headless}
|
||||
- Structure assessment: {structure-assessment}
|
||||
{/if-structure-metadata}
|
||||
|
||||
<!-- List findings by severity: Critical > High > Medium > Low. Omit empty severity levels. -->
|
||||
|
||||
{structure-findings}
|
||||
|
||||
### 2. Prompt Craft
|
||||
|
||||
<!-- Source: prompt-craft-temp.json. Agent-specific: includes persona_context assessment and persona-voice/communication-consistency categories. Remember: persona voice is INVESTMENT not waste for agents. -->
|
||||
|
||||
**Agent Assessment:**
|
||||
- Agent type: {skill-type-assessment}
|
||||
- Overview quality: {overview-quality}
|
||||
- Progressive disclosure: {progressive-disclosure}
|
||||
- Persona context: {persona-context}
|
||||
- {skillmd-assessment-notes}
|
||||
|
||||
{if-prompt-health}
|
||||
**Prompt Health:** {prompts-with-config-header}/{total-prompts} with config header | {prompts-with-progression}/{total-prompts} with progression conditions | {prompts-self-contained}/{total-prompts} self-contained
|
||||
{/if-prompt-health}
|
||||
|
||||
{prompt-craft-findings}
|
||||
|
||||
### 3. Execution Efficiency
|
||||
|
||||
<!-- Source: execution-efficiency-temp.json. Agent-specific: includes memory-loading category. -->
|
||||
|
||||
{efficiency-issue-findings}
|
||||
|
||||
{if-efficiency-opportunities}
|
||||
**Optimization Opportunities:**
|
||||
|
||||
<!-- From findings[] with severity ending in -opportunity. Each: title, detail (includes type/savings narrative), action. -->
|
||||
|
||||
{efficiency-opportunities}
|
||||
{/if-efficiency-opportunities}
|
||||
|
||||
### 4. Path & Script Standards
|
||||
|
||||
<!-- Source: path-standards-temp.json + scripts-temp.json -->
|
||||
|
||||
{if-script-inventory}
|
||||
**Script Inventory:** {total-scripts} scripts ({by-type-breakdown}) | Missing tests: {missing-tests-list}
|
||||
{/if-script-inventory}
|
||||
|
||||
{path-script-findings}
|
||||
|
||||
### 5. Agent Cohesion
|
||||
|
||||
<!-- Source: agent-cohesion-temp.json. This is the agent-specific section — persona-capability alignment, gaps, redundancies, coherence. -->
|
||||
|
||||
{if-cohesion-analysis}
|
||||
**Cohesion Analysis:**
|
||||
|
||||
<!-- Include only dimensions present in scanner output. -->
|
||||
|
||||
| Dimension | Score | Notes |
|
||||
|-----------|-------|-------|
|
||||
| Persona Alignment | {score} | {notes} |
|
||||
| Capability Completeness | {score} | {notes} |
|
||||
| Redundancy Level | {score} | {notes} |
|
||||
| External Integration | {score} | {notes} |
|
||||
| User Journey | {score} | {notes} |
|
||||
|
||||
{if-consolidation-opportunities}
|
||||
**Consolidation Opportunities:**
|
||||
|
||||
<!-- From cohesion_analysis.redundancy_level.consolidation_opportunities[]. Each: capabilities that overlap and how to combine. -->
|
||||
|
||||
{consolidation-opportunities}
|
||||
{/if-consolidation-opportunities}
|
||||
{/if-cohesion-analysis}
|
||||
|
||||
{cohesion-findings}
|
||||
|
||||
{if-creative-suggestions}
|
||||
**Creative Suggestions:**
|
||||
|
||||
<!-- From findings[] with severity="suggestion". Each: title, detail, action. -->
|
||||
|
||||
{creative-suggestions}
|
||||
{/if-creative-suggestions}
|
||||
|
||||
### 6. Creative (Edge-Case & Experience Innovation)
|
||||
|
||||
<!-- Source: enhancement-opportunities-temp.json. These are advisory suggestions, not errors. -->
|
||||
|
||||
**Agent Understanding:**
|
||||
- **Purpose:** {skill-purpose}
|
||||
- **Primary User:** {primary-user}
|
||||
- **Key Assumptions:**
|
||||
{key-assumptions-list}
|
||||
|
||||
**Enhancement Findings:**
|
||||
|
||||
<!-- Organize by: high-opportunity > medium-opportunity > low-opportunity.
|
||||
Each: title, detail, action. -->
|
||||
|
||||
{enhancement-findings}
|
||||
|
||||
{if-top-insights}
|
||||
**Top Insights:**
|
||||
|
||||
<!-- From enhancement-opportunities assessments.top_insights[]. These are the synthesized highest-value observations.
|
||||
Each: title, detail, action. -->
|
||||
|
||||
{top-insights}
|
||||
{/if-top-insights}
|
||||
|
||||
---
|
||||
|
||||
{if-user-journeys}
|
||||
## User Journeys
|
||||
|
||||
*How different user archetypes experience this agent:*
|
||||
|
||||
<!-- From enhancement-opportunities user_journeys[]. Reproduce EVERY archetype fully. -->
|
||||
|
||||
### {archetype-name}
|
||||
|
||||
{journey-summary}
|
||||
|
||||
**Friction Points:**
|
||||
{friction-points-list}
|
||||
|
||||
**Bright Spots:**
|
||||
{bright-spots-list}
|
||||
|
||||
<!-- Repeat for ALL archetypes. Do not skip any. -->
|
||||
|
||||
---
|
||||
{/if-user-journeys}
|
||||
|
||||
{if-autonomous-assessment}
|
||||
## Autonomous Readiness
|
||||
|
||||
<!-- From enhancement-opportunities autonomous_assessment. Include ALL fields. This is especially important for agents which may need headless/autonomous operation. -->
|
||||
|
||||
- **Overall Potential:** {overall-potential}
|
||||
- **HITL Interaction Points:** {hitl-count}
|
||||
- **Auto-Resolvable:** {auto-resolvable-count}
|
||||
- **Needs Input:** {needs-input-count}
|
||||
- **Suggested Output Contract:** {output-contract}
|
||||
- **Required Inputs:** {required-inputs-list}
|
||||
- **Notes:** {assessment-notes}
|
||||
|
||||
---
|
||||
{/if-autonomous-assessment}
|
||||
|
||||
{if-script-opportunities}
|
||||
## Script Opportunities
|
||||
|
||||
<!-- Source: script-opportunities-temp.json. These identify LLM work that could be deterministic scripts. -->
|
||||
|
||||
**Existing Scripts:** {existing-scripts-list}
|
||||
|
||||
<!-- For each finding: title, detail (includes determinism/complexity/savings narrative), action. -->
|
||||
|
||||
{script-opportunity-findings}
|
||||
|
||||
**Token Savings:** {total-estimated-token-savings} | Highest value: {highest-value-opportunity} | Prepass opportunities: {prepass-count}
|
||||
|
||||
---
|
||||
{/if-script-opportunities}
|
||||
|
||||
## Quick Wins (High Impact, Low Effort)
|
||||
|
||||
<!-- Pull from ALL scanners: findings where fix effort is trivial/low but impact is meaningful. -->
|
||||
|
||||
| Issue | File | Effort | Impact |
|
||||
|-------|------|--------|--------|
|
||||
{quick-wins-rows}
|
||||
|
||||
---
|
||||
|
||||
## Optimization Opportunities
|
||||
|
||||
<!-- Synthesize across scanners — not a copy of findings but a narrative of improvement themes. -->
|
||||
|
||||
**Token Efficiency:**
|
||||
{token-optimization-narrative}
|
||||
|
||||
**Performance:**
|
||||
{performance-optimization-narrative}
|
||||
|
||||
**Maintainability:**
|
||||
{maintainability-optimization-narrative}
|
||||
|
||||
---
|
||||
|
||||
## Recommendations
|
||||
|
||||
<!-- Rank by: severity first, then breadth of impact, then effort (prefer low-effort). Up to 5. -->
|
||||
|
||||
1. {recommendation-1}
|
||||
2. {recommendation-2}
|
||||
3. {recommendation-3}
|
||||
4. {recommendation-4}
|
||||
5. {recommendation-5}
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
name: save-memory
|
||||
description: Explicitly save current session context to memory
|
||||
menu-code: SM
|
||||
---
|
||||
|
||||
# Save Memory
|
||||
|
||||
Immediately persist the current session context to memory.
|
||||
|
||||
## Process
|
||||
|
||||
Update `index.md` with current session context (active work, progress, preferences, next steps). Checkpoint `patterns.md` and `chronology.md` if significant changes occurred.
|
||||
|
||||
## Output
|
||||
|
||||
Confirm save with brief summary: "Memory saved. {brief-summary-of-what-was-updated}"
|
||||
Reference in New Issue
Block a user