-
Notifications
You must be signed in to change notification settings - Fork 0
CLAUDE
spuentesp edited this page Dec 27, 2025
·
2 revisions
You are working on MONITOR, a narrative AI system with a strict layered architecture.
-
Read
SYSTEM.md- Product vision and epics (START HERE) -
Read
STRUCTURE.md- Complete folder definitions -
Read
ARCHITECTURE.md- Layer architecture and rules - Identify which layer your changes belong to
- Respect layer boundaries - Dependencies flow downward ONLY
| Order | Document | What It Contains |
|---|---|---|
| 1 | SYSTEM.md |
Product vision, epics, objectives, system modes |
| 2 | STRUCTURE.md |
Every folder defined, what goes where |
| 3 | ARCHITECTURE.md |
Layer rules, dependency diagram |
| 4 | docs/USE_CASES.md |
All use cases (P-, M-, Q-, I-, SYS-, CF-, ST-) |
| 5 | packages/*/README.md |
Layer-specific instructions |
| 6 | docs/AI_DOCS.md |
Quick reference for implementation |
Layer 3: CLI packages/cli/ → imports agents ONLY
Layer 2: AGENTS packages/agents/ → imports data-layer ONLY
Layer 1: DATA-LAYER packages/data-layer/ → imports external libs ONLY
| If you're working on... | It belongs in... |
|---|---|
| User commands, REPL, terminal UI | packages/cli/ |
| AI agents, loops, LLM calls | packages/agents/ |
| DB clients, MCP tools, schemas | packages/data-layer/ |
# ❌ FORBIDDEN: CLI importing data-layer directly
# File: packages/cli/src/monitor_cli/commands/play.py
from monitor_data.db import Neo4jClient # WRONG!
# ✅ CORRECT: CLI imports agents, agents import data-layer
from monitor_agents import Orchestrator # RIGHT!# ❌ FORBIDDEN: Data-layer importing agents
# File: packages/data-layer/src/monitor_data/tools/neo4j_tools.py
from monitor_agents import CanonKeeper # WRONG!
# ✅ CORRECT: Data-layer has no MONITOR dependencies
from neo4j import GraphDatabase # RIGHT!# ❌ FORBIDDEN: Agents importing CLI
# File: packages/agents/src/monitor_agents/orchestrator.py
from monitor_cli import app # WRONG!Only CanonKeeper can write to Neo4j.
# In packages/data-layer/src/monitor_data/middleware/auth.py
AUTHORITY_MATRIX = {
"neo4j_create_entity": ["CanonKeeper"],
"neo4j_create_fact": ["CanonKeeper"],
"neo4j_update_state": ["CanonKeeper"],
# ... all Neo4j writes require CanonKeeper
}If you're implementing a feature that needs to write to Neo4j:
- The write MUST go through CanonKeeper
- Other agents create
ProposedChangedocuments in MongoDB - CanonKeeper evaluates and commits at scene end
Ask yourself:
- Is this user-facing? → Layer 3 (CLI)
- Is this AI/LLM logic? → Layer 2 (Agents)
- Is this data access? → Layer 1 (Data-layer)
Before adding an import, verify:
- CLI can only import from
monitor_agents - Agents can only import from
monitor_data - Data-layer can only import external libraries
Look at existing code in the same layer:
- Same file structure
- Same naming conventions
- Same patterns (e.g., Pydantic models, async/await)
# Layer 1
from monitor_data import ...
from monitor_data.db import ...
from monitor_data.tools import ...
from monitor_data.schemas import ...
# Layer 2
from monitor_agents import ...
from monitor_agents.orchestrator import Orchestrator
from monitor_agents.canonkeeper import CanonKeeper
# Layer 3
from monitor_cli import ...
from monitor_cli.commands import ...| To modify... | Edit files in... | Layer |
|---|---|---|
| Neo4j client | packages/data-layer/src/monitor_data/db/neo4j.py |
1 |
| MongoDB client | packages/data-layer/src/monitor_data/db/mongodb.py |
1 |
| Qdrant client | packages/data-layer/src/monitor_data/db/qdrant.py |
1 |
| Neo4j MCP tools | packages/data-layer/src/monitor_data/tools/neo4j_tools.py |
1 |
| MongoDB MCP tools | packages/data-layer/src/monitor_data/tools/mongodb_tools.py |
1 |
| Entity schemas | packages/data-layer/src/monitor_data/schemas/entities.py |
1 |
| Fact schemas | packages/data-layer/src/monitor_data/schemas/facts.py |
1 |
| Scene schemas | packages/data-layer/src/monitor_data/schemas/scenes.py |
1 |
| Authority rules | packages/data-layer/src/monitor_data/middleware/auth.py |
1 |
| Orchestrator agent | packages/agents/src/monitor_agents/orchestrator.py |
2 |
| Narrator agent | packages/agents/src/monitor_agents/narrator.py |
2 |
| CanonKeeper agent | packages/agents/src/monitor_agents/canonkeeper.py |
2 |
| Scene loop | packages/agents/src/monitor_agents/loops/scene_loop.py |
2 |
| LLM prompts | packages/agents/src/monitor_agents/prompts/ |
2 |
| Play command | packages/cli/src/monitor_cli/commands/play.py |
3 |
| Query command | packages/cli/src/monitor_cli/commands/query.py |
3 |
| REPL session | packages/cli/src/monitor_cli/repl/session.py |
3 |
| Terminal output | packages/cli/src/monitor_cli/ui/output.py |
3 |
| Topic | Read... |
|---|---|
| Product vision & epics | SYSTEM.md |
| Data-layer epic (DL-1..DL-14) |
docs/USE_CASES.md + docs/DATA_LAYER_USE_CASES.md
|
| Architecture overview | ARCHITECTURE.md |
| Data model | docs/ontology/ONTOLOGY.md |
| Database integration | docs/architecture/DATABASE_INTEGRATION.md |
| Agent orchestration | docs/architecture/AGENT_ORCHESTRATION.md |
| API specification | docs/architecture/DATA_LAYER_API.md |
| Use cases | docs/USE_CASES.md |
| Quick reference | docs/AI_DOCS.md |
- Add schema to
packages/data-layer/src/monitor_data/schemas/ - Implement tool in
packages/data-layer/src/monitor_data/tools/ - Add authority check in middleware
- Update
docs/architecture/MCP_TRANSPORT.md
- Implement in
packages/agents/src/monitor_agents/<agent>.py - Agent calls data-layer tools via MCP
- Update
docs/architecture/AGENT_ORCHESTRATION.md
- Create command in
packages/cli/src/monitor_cli/commands/ - Command calls agents, never data-layer directly
- Register in
packages/cli/src/monitor_cli/main.py
# Run tests for each layer independently
cd packages/data-layer && pytest
cd packages/agents && pytest
cd packages/cli && pytest- Three layers: data-layer → agents → cli
- Dependencies flow down: Never import from a higher layer
- No skip-layer imports: CLI never imports data-layer
- CanonKeeper writes Neo4j: All other agents use proposals
- Follow existing patterns: Look at similar code first