Help us improve
Share bugs, ideas, or general feedback.
From ennam-dev-agent-team
Persistent cross-agent memory system using markdown files in .serena/memories/ouroboros/. Defines read-on-start, write-on-complete protocols for all agents. Per-agent folders prevent overwrite conflicts. Automatically loaded by all agents.
npx claudepluginhub en-nam/ennam-claude-agent-team --plugin ennam-dev-agent-teamHow this skill is triggered — by the user, by Claude, or both
Slash command
/ennam-dev-agent-team:memory-protocolThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Every agent in the team MUST follow this protocol to maintain persistent context
Manages persistent memory across sessions with .claude/memory/ for state and .ai/ for architecture/patterns. Guides scratchpad updates, session workflows, and live docs.
Guides technical evaluation of code review feedback: read fully, restate for understanding, verify against codebase, respond with reasoning or pushback before implementing.
Share bugs, ideas, or general feedback.
Every agent in the team MUST follow this protocol to maintain persistent context
across sessions. Memory files are plain markdown in .serena/memories/ouroboros/, git-tracked
and human-editable.
.serena/memories/ouroboros/
├── INDEX.md # Master list of all memories
├── project/ # OWNER: project-owner (exclusive write)
│ ├── state.md # Current phase (0-7), active features, blockers
│ ├── decisions.md # Business + architectural decisions (append-only)
│ └── onboarding.md # Project structure summary (auto-generated)
├── tasks/ # OWNER: team-lead creates, workers update own rows
│ ├── registry.md # All tasks with status (cross-agent table)
│ └── features/
│ └── <feature-name>/ # Per-feature folder
│ ├── breakdown.md # Task breakdown + dependencies (team-lead)
│ └── notes.md # Implementation notes (assigned worker)
├── agents/ # Per-agent isolation — each agent owns ONLY their folder
│ ├── project-owner/
│ │ ├── handoff.md # Handoff state for resume
│ │ └── sessions/
│ │ └── <YYYY-MM-DD>-summary.md # Session summaries
│ ├── business-analyst/
│ │ ├── handoff.md
│ │ └── sessions/
│ ├── team-lead/
│ │ ├── handoff.md
│ │ └── sessions/
│ ├── backend-dev/
│ │ ├── handoff.md
│ │ └── sessions/
│ ├── web-dev/
│ │ ├── handoff.md
│ │ └── sessions/
│ ├── mobile-dev/
│ │ ├── handoff.md
│ │ └── sessions/
│ ├── test-worker/
│ │ ├── handoff.md
│ │ └── sessions/
│ ├── reviewer/
│ │ ├── handoff.md
│ │ └── sessions/
│ └── ui-designer/
│ ├── handoff.md
│ └── sessions/
└── architecture/ # OWNER: team-lead (primary), workers (append-only)
├── api-contracts.md # API decisions and contract notes
├── data-model.md # Schema evolution notes
└── conventions.md # Project-specific conventions discovered
docs/requirements/ # Deliverables (NOT agent memory)
├── interviews/
│ └── INT-<NNN>-<topic>.md # Phase 1 Interview transcripts
├── seeds/
│ └── SEED-<NNN>.yaml # Phase 2 Seed YAML specifications
└── REQ-<NNN>-<description>.md # Phase 2 Requirement documents
Every file has exactly ONE owner. Only the owner may create or overwrite it. Other agents may READ any file but must NEVER write to files they don't own.
| Path | Owner | Others |
|---|---|---|
project/state.md | project-owner | team-lead may update phase status ONLY when project-owner delegates |
project/decisions.md | project-owner | Any orchestrator (BA, team-lead) may APPEND — never overwrite |
project/onboarding.md | project-owner | Read-only |
tasks/registry.md | team-lead creates rows | Each worker updates ONLY their own row(s) |
tasks/features/<name>/breakdown.md | team-lead | Read-only for workers |
tasks/features/<name>/notes.md | assigned worker | Read-only for others |
agents/<agent-name>/* | that agent ONLY | Read-only for others |
architecture/* | team-lead | Workers may APPEND discoveries — never overwrite |
INDEX.md | project-owner | team-lead may append new entries |
Files marked "append-only" for non-owners follow this pattern:
<!-- Appended by <agent-name> on <YYYY-MM-DD> -->
### <title>
<content>
This makes it easy to trace who wrote what and prevents accidental overwrites.
Before doing ANY work, every agent MUST:
.serena/memories/ouroboros/INDEX.md exists
project/state.md, tasks/registry.md, agents/project-owner/handoff.mdproject/state.md, tasks/registry.md, agents/team-lead/handoff.mdproject/state.md, project/decisions.md, agents/business-analyst/handoff.mdtasks/registry.md, architecture/api-contracts.md, agents/backend-dev/handoff.mdtasks/registry.md, architecture/api-contracts.md, agents/web-dev/handoff.mdtasks/registry.md, architecture/api-contracts.md, agents/mobile-dev/handoff.mdtasks/registry.md, agents/test-worker/handoff.mdtasks/registry.md, project/decisions.mdproject/state.md, project/decisions.md, agents/ui-designer/handoff.mdWhen a significant decision is made (business rule, architecture choice, scope change):
Append to .serena/memories/ouroboros/project/decisions.md:
<!-- Appended by <agent-name> on YYYY-MM-DD -->
### [YYYY-MM-DD] Decision: <title>
- **Context**: <why this came up>
- **Decision**: <what was decided>
- **Rationale**: <why this option was chosen>
- **Alternatives considered**: <other options and why rejected>
- **Impact**: <what this affects>
When creating or completing tasks, update .serena/memories/ouroboros/tasks/registry.md:
| Task ID | Feature | Agent | Status | Branch | Last Updated | Blockers |
|---------|---------|-------|--------|--------|--------------|----------|
| TASK-001 | [name] | backend-dev | done | backend/task-001-desc | 2026-03-05 | — |
| TASK-002 | [name] | web-dev | in-progress | frontend/task-002-desc | 2026-03-05 | — |
Status values: planned → in-progress → review → done → merged | blocked | deferred | cancelled
Each status transition is owned by a specific role:
| Transition | Owner | When |
|---|---|---|
→ planned | team-lead | Task decomposition in Phase 4 |
→ in-progress | assigned worker | Worker starts the task |
→ review | assigned worker | Worker completes self-check |
→ done | reviewer | Reviewer approves the code |
→ merged | team-lead | Branch is merged |
→ blocked | any agent | Cannot proceed — must set Blockers column |
→ deferred | project-owner or team-lead | Scope change or reprioritization |
→ cancelled | project-owner | Feature dropped or duplicated |
Multiple agents may update tasks/registry.md concurrently. To avoid conflicts:
planned status)When team-lead creates tasks for a feature, also create the feature folder:
tasks/features/<feature-name>/
├── breakdown.md # team-lead writes: task list, dependencies, acceptance criteria
└── notes.md # assigned worker writes: implementation notes, gotchas, TODOs
Multiple workers sharing a feature each append to notes.md with their agent name header:
## backend-dev
- Implemented ProductReview model with cascade delete
- Used integer cents for all price fields per convention
## web-dev
- Reused StarRating component from existing catalog page
When project-owner transitions between phases, update .serena/memories/ouroboros/project/state.md:
# Project State
**Last Updated**: <YYYY-MM-DD HH:MM>
**Updated By**: <agent-name>
**Phase**: <number 0-7>
**Phase Name**: <RESUME|INTERVIEW|SEED|DESIGN|PLAN|DEVELOPMENT|REVIEW|DELIVERY>
**Status**: <in-progress|completed>
**Active Feature**: <feature being worked on>
**Active Agent**: <which agent is currently working>
## References
- **Seed**: <docs/requirements/seeds/SEED-NNN.yaml or "none">
- **Requirement**: <docs/requirements/REQ-NNN.md or "none">
- **Design**: <docs/designs/DES-NNN/ or "none">
## Design Node ID Mapping
<!-- Filled by project-owner after Phase 3: DESIGN completes -->
| Screen | Pencil Node ID | .pen File |
| ------ | -------------- | --------- |
| [Screen Name] | `[nodeId]` | `[path]` |
## Outputs
- <list of output file paths from completed phases>
## In Progress
- <what's currently happening>
## Completed
- <what's done>
## Blocked
- <blockers if any>
## Next Steps
- <what comes after current work>
Before ending a session, each agent MUST write to their own folder:
.serena/memories/ouroboros/agents/<your-name>/handoff.md:# <Agent Name> Handoff
**Last Session**: <YYYY-MM-DD>
**Phase**: <current phase>
**Active feature**: <feature name>
**Status**: <what you were doing>
**Waiting for**: <agent/user input, or "nothing">
**Next action**: <what to do next session>
## Context
- <key context points for your next session>
## Open Questions
- <unresolved items>
.serena/memories/ouroboros/agents/<your-name>/sessions/<YYYY-MM-DD>-summary.md:# Session Summary: <YYYY-MM-DD>
**Agent**: <your-name>
**Duration**: <approximate>
## What Was Accomplished
- <bullet list>
## Key Decisions Made
- <bullet list with references to decisions.md>
## Current State
- Phase: <phase>
- Feature: <feature>
- Progress: <percentage or description>
## To Resume
- Start by reading: `agents/<your-name>/handoff.md`
- Then: <specific next action>
Orchestrators only (project-owner, team-lead): Also update INDEX.md if new memory files were created
project-owner only: Call /revise-claude-md to capture session learnings into CLAUDE.md
Owner: project-owner is responsible for first-run initialization during Phase 0. Other agents that start before memory exists should proceed with their normal workflow and skip memory reads (per "On Agent Start" step 1).
If .serena/memories/ouroboros/INDEX.md does not exist (fresh project):
mkdir -p .serena/memories/ouroboros/project \
.serena/memories/ouroboros/tasks/features \
.serena/memories/ouroboros/agents/project-owner/sessions \
.serena/memories/ouroboros/agents/business-analyst/sessions \
.serena/memories/ouroboros/agents/team-lead/sessions \
.serena/memories/ouroboros/agents/backend-dev/sessions \
.serena/memories/ouroboros/agents/web-dev/sessions \
.serena/memories/ouroboros/agents/mobile-dev/sessions \
.serena/memories/ouroboros/agents/test-worker/sessions \
.serena/memories/ouroboros/agents/reviewer/sessions \
.serena/memories/ouroboros/agents/ui-designer/sessions \
.serena/memories/ouroboros/architecture
prisma/schema.prisma, package.json, src/app/, src/components/.serena/memories/ouroboros/project/onboarding.md.serena/memories/ouroboros/INDEX.md:
# Memory Index
| File | Owner | Description | Last Updated |
|------|-------|-------------|--------------|
| project/state.md | project-owner | Current phase and project status | YYYY-MM-DD |
| project/decisions.md | project-owner | Business and architectural decisions | YYYY-MM-DD |
| project/onboarding.md | project-owner | Codebase exploration summary | YYYY-MM-DD |
| tasks/registry.md | team-lead | Cross-agent task status registry | YYYY-MM-DD |
| architecture/api-contracts.md | team-lead | API contract decisions | — |
| architecture/data-model.md | team-lead | Schema evolution notes | — |
| architecture/conventions.md | team-lead | Project conventions discovered | — |
.serena/memories/ouroboros/project/state.md with Phase 1: Discovery.serena/memories/ouroboros/project/decisions.md with header only.serena/memories/ouroboros/tasks/registry.md with table header onlyapi-contracts.md, not API_Contracts.mdarchitecture/, tasks/features/tasks/features/product-reviews/agents/<name>/sessions/2026-03-11-summary.mdagents/ — each agent owns ONLY agents/<your-name>/<!-- Appended by --> markersregistry.md — only your own row(s)