Agent skill
maestro:note
Capture decisions, constraints, and context to persistent memory. Global memory is injected into every session and implementation run. Per-feature memory tracks working context.
Install this agent skill to your Project
npx add-skill https://github.com/ReinaMacCredy/maestro/tree/main/skills/built-in/maestro:note
SKILL.md
Note -- Persistent Working Memory
Notes are the cross-cutting memory layer. They persist across sessions, survive context resets, and -- for global memory -- are automatically injected into every worker prompt.
Core principle: If a future session needs this to avoid a mistake, capture it. If not, skip it.
Mental Model
Two-tier system mapped to the v2 memory architecture:
- Global Memory = pinned message in a channel. Every agent sees it, every time. Hard constraints that, if violated, produce wrong code. Workers cannot ask clarifying questions -- they need these upfront. Stored via
maestro memory-write --global/maestro memory-write. - Feature Memory = searchable thread history scoped to the active feature. Insights, learnings, and soft observations accumulated during implementation. Available on demand, pruned periodically. Stored via
maestro memory-write/maestro memory-write(defaults to active feature). - Promoted Memory = feature-scoped insights promoted to global after proving valuable. Use
maestro memory-promote/maestro memory-promoteto elevate.
When to Capture
Always:
- Decisions that constrain future work (API choice, library version, architecture direction)
- Constraints discovered mid-implementation (rate limits, API quirks, platform bugs)
- User decisions on blockers (the "why" behind the choice, so no one re-asks)
- Cross-feature dependencies ("feature X depends on auth refactor from feature Y")
Never:
- Status updates ("started task 3") -- use
maestro task-done/maestro task-block - Things already in spec or plan -- don't duplicate
- Temporary debugging notes ("tried X, didn't work") -- ephemeral, discard
Decision heuristic: "Will a future session need this to avoid a mistake?" Yes = capture. No = skip.
Global Memory vs Feature Memory
| Attribute | Global Memory | Feature Memory |
|---|---|---|
| Injection | Every session + every worker prompt | On-demand via maestro memory-read |
| Audience | All agents, including workers who cannot ask | Orchestrator and feature workers |
| Content | Hard constraints, blocking decisions | Insights, learnings, soft preferences |
| Lifespan | Until constraint lifts | Until feature completes or pruned |
| Volume | 3-7 entries max (more = noise) | Unlimited (prune periodically) |
| Format | Imperative constraint | Dated insight with feature context |
| Storage | .maestro/memory/ |
.maestro/features/<feature-name>/memory/ |
Promoting to Global: If a feature memory note keeps causing mistakes across sessions, promote it with maestro memory-promote / maestro memory-promote. If a global note no longer applies, delete it with maestro memory-delete.
Good Notes vs Bad Notes
See reference/note-patterns.md for more examples across decisions, constraints, discoveries, and dependencies.
Arguments
$ARGUMENTS
| Input | Action |
|---|---|
<content> (no flag) |
Write to active feature memory |
--global <content> |
Write to global memory |
--show |
Display all memory (maestro memory-list) |
--prune |
Remove stale feature memory entries |
--clear <scope> |
Clear memory (global, feature, all) |
Execution
Step 1: Ensure Memory System Ready
Check that maestro is initialized (maestro status --json or maestro status). If .maestro/ does not exist: "Run maestro init first."
Step 2: Parse and Execute
Add (default or --global):
- Determine scope:
--globalwrites to.maestro/memory/, default writes to active feature memory - Generate a key from the content (kebab-case, descriptive, 2-4 words)
- Call
maestro memory-write --key <key> "<content>"(add--globalfor global scope) - Display confirmation with the key and scope
Show (--show):
- Call
maestro memory-listto show all memory entries - If no entries: "No memory entries found. Use
maestro:note <content>to start."
Prune (--prune):
- Call
maestro memory-listfor the active feature - Review each entry for staleness
- Remove stale entries with
maestro memory-delete --key <key> - Keep global memory intact
- Show what was removed and what was kept
- If uncertain about an item, ask the user
Clear (--clear <scope>):
- Parse scope:
global,feature, orall - If clearing global: confirm with user first
- Delete all entries in the specified scope
- Confirm deletion
Note Lifecycle
Create --> Review (session start) --> Update (constraint changes) --> Promote/Archive/Delete (resolved)
| Trigger | Action |
|---|---|
| New decision or constraint discovered | Write memory (choose scope) |
| Session start | Review global memory -- still accurate? |
| Constraint changed | Update the memory entry (overwrite with same key) |
| Feature shipped | Prune feature memory, promote valuable insights to global |
| Constraint lifted | Delete the global memory entry |
| Insight proved valuable across features | maestro memory-promote to elevate to global |
Anti-Patterns
| Anti-Pattern | Why It Hurts | Fix |
|---|---|---|
| Notes too vague ("the API thing") | Future sessions cannot act on it | Include specifics: which API, what behavior, what constraint |
| Notes too long (full paragraphs) | Agents skim or skip long entries | One line per note. Details go in a separate memory entry |
| Duplicating spec/plan content | Two sources of truth that drift apart | Reference the spec; don't copy it |
| Global memory bloat (>7 items) | Agents stop reading; noise drowns signal | Prune aggressively. Only hard constraints belong in global |
| Never pruning feature memory | Graveyard of stale insights misleads agents | Prune after each feature completion |
| Status updates as notes | Notes are for decisions and constraints, not progress | Use maestro task-done / maestro task-block for status |
Section Contracts
| Scope | Written By | Read By | Persistence |
|---|---|---|---|
| Global memory | User via --global, maestro memory-promote |
maestro:implement workers, all sessions |
Until manually deleted |
| Feature memory | Default maestro:note, auto-capture during implementation |
Orchestrator and feature workers | Until feature completes or pruned |
Relationship to Other Commands
maestro init-- Initialize maestro for the projectmaestro feature-create-- Create a feature to work onmaestro skill maestro:new-feature-- Create feature with spec and planmaestro skill maestro:implement-- Execute implementation (reads global memory at start)maestro skill maestro:review-- Verify implementation correctnessmaestro status --json-- Check progress across all featuresmaestro skill maestro:note-- You are here. Capture decisions and context to persistent memory
Global memory is automatically loaded by maestro:implement at execution start and injected into worker prompts. Feature memory accumulates insights from both manual notes and auto-capture during implementation. Use --prune after each feature completion to keep memory relevant. Use maestro memory-promote to elevate high-value feature insights to global scope.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
maestro-skill-author
Create, update, or debug maestro built-in skills. Covers SKILL.md frontmatter, reference directory structure, step-file architecture, build-time embedding, naming conventions, alias management, and registry validation. Use when creating a new maestro built-in skill, modifying an existing SKILL.md, adding reference files, debugging skill loading failures, updating the skills registry, or working on the skills full port. Also use when frontmatter validation fails, skills don't appear in skill-list, or reference files fail to load.
maestro:brainstorming
Use before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation.
mcp-builder
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
maestro:plan-review-loop
Deep-review any plan (maestro, Codex, Claude Code plan mode, or plain markdown) using iterative subagent review loops with BMAD-inspired adversarial edge-case discovery. Spawns reviewer subagents that find issues using pre-mortem, inversion, and red-team techniques, auto-fixes them with structured fix strategies, and re-reviews until the plan passes with zero actionable issues. Use when the user says 'review the plan', 'deep review', 'check the plan thoroughly', 'review loop', 'validate before approving', or wants rigorous plan validation before execution. Also use proactively before plan-approve when the plan is complex or high-risk.
maestro:research
Structured research workflow for maestro features. Guides tool selection across three tiers (codebase exploration, Context7 for library docs, NotebookLM for deep analysis), defines research patterns, finding organization via memory_write, and completion criteria. Use during the research pipeline stage after feature_create and before plan_write. Also use when investigating a problem space, comparing technical approaches, gathering context on unfamiliar code, or needing to understand external library APIs before making architectural decisions.
cli-for-agents
Designs or reviews CLIs so coding agents can run them reliably: non-interactive flags, layered --help with examples, stdin/pipelines, fast actionable errors, idempotency, dry-run, and predictable structure. Use when building a CLI, adding commands, writing --help, or when the user mentions agents, terminals, or automation-friendly CLIs.
Didn't find tool you were looking for?