agent-notes 2.23.0__tar.gz → 2.24.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agent_notes-2.23.0 → agent_notes-2.24.0}/PKG-INFO +9 -4
- {agent_notes-2.23.0 → agent_notes-2.24.0}/README.md +8 -3
- agent_notes-2.24.0/agent_notes/VERSION +1 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/cli.py +10 -1
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/doctor.py +11 -0
- agent_notes-2.24.0/agent_notes/commands/hook.py +42 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/__init__.py +2 -5
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/notes.py +2 -1
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/constants.py +10 -2
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/agents.yaml +1 -1
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/execution.md +6 -2
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/hard_limits.md +8 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/global-claude.md +1 -15
- agent_notes-2.24.0/agent_notes/data/skills/handoff/SKILL.md +26 -0
- agent_notes-2.24.0/agent_notes/data/skills/migrate-memory/SKILL.md +172 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/obsidian-memory/SKILL.md +1 -1
- agent_notes-2.24.0/agent_notes/data/skills/prototype/LOGIC.md +47 -0
- agent_notes-2.24.0/agent_notes/data/skills/prototype/SKILL.md +29 -0
- agent_notes-2.24.0/agent_notes/data/skills/prototype/UI.md +45 -0
- agent_notes-2.24.0/agent_notes/data/skills/to-issues/SKILL.md +61 -0
- agent_notes-2.24.0/agent_notes/data/skills/to-prd/SKILL.md +49 -0
- agent_notes-2.24.0/agent_notes/data/skills/write-a-skill/SKILL.md +72 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/__init__.py +1 -1
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/state.py +1 -1
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/_memory_utils.py +12 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/installer.py +21 -1
- agent_notes-2.24.0/agent_notes/services/migrations/__init__.py +1 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/obsidian_backend.py +66 -20
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/settings_writer.py +6 -9
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki/_wiki_utils.py +11 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki/wiki_ingest.py +7 -0
- agent_notes-2.24.0/agent_notes/services/wiki/wiki_lint.py +176 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki/wiki_storage.py +3 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes.egg-info/PKG-INFO +9 -4
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes.egg-info/SOURCES.txt +12 -0
- agent_notes-2.24.0/tests/unit/commands/test_memory_add_description.py +42 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_memory_imports.py +1 -2
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_memory_migrate.py +31 -30
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_wizard_steps.py +4 -4
- agent_notes-2.24.0/tests/unit/services/test_installer_hooks.py +132 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_memory_backend_io.py +164 -30
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_settings_writer.py +94 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_wiki_backend.py +162 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/test_memory_dir_for_backend.py +2 -2
- agent_notes-2.23.0/agent_notes/VERSION +0 -1
- agent_notes-2.23.0/agent_notes/services/wiki/wiki_lint.py +0 -101
- {agent_notes-2.23.0 → agent_notes-2.24.0}/LICENSE +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/__main__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/_install_helpers.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/build.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/config.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/info.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/install.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/list.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/_common.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/migrate.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/reset.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/transfer.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/vault.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/wiki.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/regenerate.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/set_role.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/uninstall.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/validate.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/wizard/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/wizard/_common.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/wizard/execute.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/wizard/orchestrator.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/config.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/analyst.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/api-reviewer.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/architect.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/coder.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/database-specialist.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/debugger.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/devil.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/devops.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/explorer.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/integrations.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/lead.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/performance-profiler.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/refactorer.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/reviewer.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/security-auditor.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/cost_reporting.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/guardrails.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/phase0.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/pipelines.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/review.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/verification.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/wiki_compile.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/system-auditor.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/tech-writer.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/test-runner.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/test-writer.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/wiki-compiler.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/cli/claude.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/cli/copilot.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/cli/opencode.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/commands/brainstorm.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/commands/debug.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/commands/review.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/global-copilot.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/global-opencode.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/hooks/session-context.md.tpl +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-haiku-4-5.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-opus-4-1.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-opus-4-5.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-opus-4-6.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-opus-4-7.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-sonnet-4-5.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-sonnet-4-6.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-sonnet-4.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/plugin/claude.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/plugin/opencode-index.js.template +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/plugin/opencode.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/pricing.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/roles/orchestrator.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/roles/reasoner.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/roles/scout.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/roles/worker.yaml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/rules/code-quality.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/rules/safety.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/brainstorming/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/caveman/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/code-review/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/debugging-protocol/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/docker/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/docker/compose.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/docker/dockerfile.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/git/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/grill-me/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/grill-with-docs/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/improve-codebase-architecture/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/ingest/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/controllers.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/frontend.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/infra.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/models.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/testing.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/views.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/refactoring-protocol/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/setup-project-context/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/tdd/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/zoom-out/SKILL.md +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/__pycache__/__init__.cpython-314.pyc +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/frontmatter/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-314.pyc +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/frontmatter/claude.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/frontmatter/opencode.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/doctor_checks.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/agent.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/cli_backend.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/diagnostics.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/diff.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/model.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/role.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/rule.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/skill.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/_base.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/agent_registry.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/cli_registry.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/model_registry.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/role_registry.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/rule_registry.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/skill_registry.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/scripts/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/scripts/_claude_backend.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/scripts/_formatting.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/scripts/_opencode_backend.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/scripts/_pricing.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/scripts/cost_report.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/counts.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/credentials.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/diagnostics/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/diagnostics/_checks.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/diagnostics/_display.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/diagnostics/_fix.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/diff.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/fs.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/install_state_builder.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/local_backend.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/memory_router.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/rendering.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/session_context.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/state_store.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/ui.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/user_config.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/validation.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki/wiki_index.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki/wiki_query.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki_backend.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes.egg-info/dependency_links.txt +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes.egg-info/entry_points.txt +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes.egg-info/requires.txt +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes.egg-info/top_level.txt +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/pyproject.toml +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/setup.cfg +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/conftest.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_config_command.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_doctor_command.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_info_command.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_install_command.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_list_command.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_regenerate_command.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_uninstall_command.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_validate_command.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/memory/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/memory/test_memory_command.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/scripts/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/scripts/test_release_script.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/build_output/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/build_output/test_build_output.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/install/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/install/test_install_methods.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/plugin_builders/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/plugin_builders/test_plugin_builders.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/plugins/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/plugins/claude/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/plugins/claude/test_agents.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/plugins/test_skills.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_cost_report_subcommand.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_count_agents.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_info.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_wizard_imports.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_wizard_orchestrator_skip.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_wizard_preflight.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/registries/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/registries/test_registries.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/scripts/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/scripts/test_cost_report.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/scripts/test_cost_report_scoping.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/scripts/test_formatting_tty.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/scripts/test_time_aggregation.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/__init__.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_build_functions.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_credential_filter.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_credentials.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_fs.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_installer_plan.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_local_backend.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_memory_backend.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_memory_router.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_rendering_includes.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_session_context.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_skill_filtering.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_state_store.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_validation.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_wiki_imports.py +0 -0
- {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/test_import_health.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-notes
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.24.0
|
|
4
4
|
Summary: AI agent configuration manager for Claude Code, OpenCode, and Copilot
|
|
5
5
|
Author-email: Eugene Naumov <min.verkligheten@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -42,7 +42,7 @@ agent-notes doctor
|
|
|
42
42
|
|
|
43
43
|
**What's Included**
|
|
44
44
|
- 19 specialized AI subagents (Opus reasons, Sonnet executes, Haiku explores)
|
|
45
|
-
-
|
|
45
|
+
- 47+ on-demand skills (Rails, Docker, Git, Kamal, Process)
|
|
46
46
|
- Global rules and guardrails
|
|
47
47
|
- Agent memory with 3 storage options (Local, Obsidian, Wiki)
|
|
48
48
|
- Configuration for Claude Code, OpenCode, and GitHub Copilot
|
|
@@ -267,7 +267,7 @@ Implements Karpathy's LLM Wiki pattern (v1). Auto-creates a folder per project (
|
|
|
267
267
|
|
|
268
268
|
- **Query** — Search wiki pages, synthesize answers with citations, optionally file answers back as new pages
|
|
269
269
|
|
|
270
|
-
- **Lint** — Health-check for contradictions, stale
|
|
270
|
+
- **Lint** — Health-check for contradictions, stale pages, data gaps, orphan pages, missing cross-references
|
|
271
271
|
|
|
272
272
|
**Commands:**
|
|
273
273
|
```bash
|
|
@@ -312,7 +312,7 @@ The installed `CLAUDE.md` already points agents to your vault. At the start of a
|
|
|
312
312
|
<details>
|
|
313
313
|
<summary>Skills</summary>
|
|
314
314
|
|
|
315
|
-
|
|
315
|
+
47+ on-demand knowledge modules across Rails, Docker, Kamal, Git, and Process. Run `agent-notes list skills` for the current list, or browse `agent_notes/data/skills/`.
|
|
316
316
|
|
|
317
317
|
The session context hook auto-generates a skill index from SKILL.md frontmatter at install time, so agents always know what skills are available without loading full skill content. This keeps context overhead low while maintaining skill discoverability.
|
|
318
318
|
|
|
@@ -342,6 +342,11 @@ Load the docker-compose skill for multi-service setup
|
|
|
342
342
|
- `/debugging-protocol` — Phase 1 rewritten as "build a feedback loop first" with 9 strategies
|
|
343
343
|
- `/improve-codebase-architecture` — Deletion test to find shallow modules; surfaces deepening opportunities
|
|
344
344
|
- `/zoom-out` — Quick orientation map of an unfamiliar code area
|
|
345
|
+
- `/handoff` — Compact conversation into a handoff document for a fresh agent session
|
|
346
|
+
- `/to-prd` — Synthesize conversation into a Product Requirements Document
|
|
347
|
+
- `/to-issues` — Break a plan/PRD into vertical-slice issues (HITL/AFK classification)
|
|
348
|
+
- `/prototype` — Throwaway prototypes: terminal app for logic or UI variations for visual
|
|
349
|
+
- `/write-a-skill` — Meta-skill for creating new skills with proper structure
|
|
345
350
|
|
|
346
351
|
</details>
|
|
347
352
|
|
|
@@ -12,7 +12,7 @@ agent-notes doctor
|
|
|
12
12
|
|
|
13
13
|
**What's Included**
|
|
14
14
|
- 19 specialized AI subagents (Opus reasons, Sonnet executes, Haiku explores)
|
|
15
|
-
-
|
|
15
|
+
- 47+ on-demand skills (Rails, Docker, Git, Kamal, Process)
|
|
16
16
|
- Global rules and guardrails
|
|
17
17
|
- Agent memory with 3 storage options (Local, Obsidian, Wiki)
|
|
18
18
|
- Configuration for Claude Code, OpenCode, and GitHub Copilot
|
|
@@ -237,7 +237,7 @@ Implements Karpathy's LLM Wiki pattern (v1). Auto-creates a folder per project (
|
|
|
237
237
|
|
|
238
238
|
- **Query** — Search wiki pages, synthesize answers with citations, optionally file answers back as new pages
|
|
239
239
|
|
|
240
|
-
- **Lint** — Health-check for contradictions, stale
|
|
240
|
+
- **Lint** — Health-check for contradictions, stale pages, data gaps, orphan pages, missing cross-references
|
|
241
241
|
|
|
242
242
|
**Commands:**
|
|
243
243
|
```bash
|
|
@@ -282,7 +282,7 @@ The installed `CLAUDE.md` already points agents to your vault. At the start of a
|
|
|
282
282
|
<details>
|
|
283
283
|
<summary>Skills</summary>
|
|
284
284
|
|
|
285
|
-
|
|
285
|
+
47+ on-demand knowledge modules across Rails, Docker, Kamal, Git, and Process. Run `agent-notes list skills` for the current list, or browse `agent_notes/data/skills/`.
|
|
286
286
|
|
|
287
287
|
The session context hook auto-generates a skill index from SKILL.md frontmatter at install time, so agents always know what skills are available without loading full skill content. This keeps context overhead low while maintaining skill discoverability.
|
|
288
288
|
|
|
@@ -312,6 +312,11 @@ Load the docker-compose skill for multi-service setup
|
|
|
312
312
|
- `/debugging-protocol` — Phase 1 rewritten as "build a feedback loop first" with 9 strategies
|
|
313
313
|
- `/improve-codebase-architecture` — Deletion test to find shallow modules; surfaces deepening opportunities
|
|
314
314
|
- `/zoom-out` — Quick orientation map of an unfamiliar code area
|
|
315
|
+
- `/handoff` — Compact conversation into a handoff document for a fresh agent session
|
|
316
|
+
- `/to-prd` — Synthesize conversation into a Product Requirements Document
|
|
317
|
+
- `/to-issues` — Break a plan/PRD into vertical-slice issues (HITL/AFK classification)
|
|
318
|
+
- `/prototype` — Throwaway prototypes: terminal app for logic or UI variations for visual
|
|
319
|
+
- `/write-a-skill` — Meta-skill for creating new skills with proper structure
|
|
315
320
|
|
|
316
321
|
</details>
|
|
317
322
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.24.0
|
|
@@ -275,6 +275,12 @@ def main():
|
|
|
275
275
|
help="Memory action")
|
|
276
276
|
p_memory.add_argument("name", nargs="?", help="Agent name / note title (for show/reset/add)")
|
|
277
277
|
p_memory.add_argument("extra", nargs="*", help="Additional args (for add: body [type] [agent] [project])")
|
|
278
|
+
p_memory.add_argument("--description", default="", help="One-liner description for index display")
|
|
279
|
+
|
|
280
|
+
# hook
|
|
281
|
+
p_hook = subparsers.add_parser("hook", help="Claude Code hook integrations")
|
|
282
|
+
p_hook.add_argument("subaction", choices=["memory-bridge"],
|
|
283
|
+
help="Hook to run")
|
|
278
284
|
|
|
279
285
|
# cost-report
|
|
280
286
|
p_cost_report = subparsers.add_parser("cost-report", help="Report token usage and cost for the current AI session")
|
|
@@ -335,10 +341,13 @@ def main():
|
|
|
335
341
|
regenerate(scope=args.scope, cli=args.cli, local=args.local)
|
|
336
342
|
elif args.command == "memory":
|
|
337
343
|
from .commands.memory import memory
|
|
338
|
-
memory(args.action, args.name, getattr(args, "extra", None))
|
|
344
|
+
memory(args.action, args.name, getattr(args, "extra", None), description=getattr(args, "description", ""))
|
|
339
345
|
elif args.command == "config":
|
|
340
346
|
from .commands.config import config
|
|
341
347
|
config(action=args.action, args=getattr(args, "extra", None) or [], cli_filter=args.cli)
|
|
348
|
+
elif args.command == "hook":
|
|
349
|
+
from .commands.hook import hook
|
|
350
|
+
hook(args.subaction)
|
|
342
351
|
elif args.command == "cost-report":
|
|
343
352
|
# Rebuild sys.argv slice so cost_report.main() can parse it normally
|
|
344
353
|
argv = []
|
|
@@ -61,6 +61,17 @@ def _check_session_hook(scope: str, issues: list) -> None:
|
|
|
61
61
|
"SessionStart hook not found — run: agent-notes install to re-add the hook",
|
|
62
62
|
))
|
|
63
63
|
|
|
64
|
+
from ..constants import Hooks
|
|
65
|
+
from ..services.state_store import load_state
|
|
66
|
+
state = load_state()
|
|
67
|
+
if state and state.memory.backend in ("obsidian", "wiki"):
|
|
68
|
+
if not has_hook(settings_path, "SessionStart", Hooks.MEMORY_BRIDGE):
|
|
69
|
+
issues.append(Issue(
|
|
70
|
+
"missing_hook",
|
|
71
|
+
str(settings_path),
|
|
72
|
+
"memory-bridge SessionStart hook not found — run: agent-notes install to re-add",
|
|
73
|
+
))
|
|
74
|
+
|
|
64
75
|
|
|
65
76
|
def check_version_drift(scope: str, issues: list, fix_actions: list) -> None:
|
|
66
77
|
"""Check if the installed package version matches the current running version."""
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""Hook command - Claude Code hook integrations."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def hook(subaction: str) -> None:
|
|
7
|
+
"""Handle hook subactions."""
|
|
8
|
+
if subaction == "memory-bridge":
|
|
9
|
+
_memory_bridge()
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _memory_bridge() -> None:
|
|
13
|
+
"""SessionStart hook that prints the agent-notes memory index.
|
|
14
|
+
|
|
15
|
+
Unconditionally loads and prints the memory index so it is visible in
|
|
16
|
+
context at the start of every Claude Code session.
|
|
17
|
+
"""
|
|
18
|
+
try:
|
|
19
|
+
from .memory._common import _load_memory_config
|
|
20
|
+
from ..constants import Obsidian, Wiki
|
|
21
|
+
|
|
22
|
+
backend, path = _load_memory_config()
|
|
23
|
+
|
|
24
|
+
if backend == "none" or backend is None:
|
|
25
|
+
return
|
|
26
|
+
|
|
27
|
+
if backend == "obsidian":
|
|
28
|
+
index_file = Path(path) / Obsidian.INDEX
|
|
29
|
+
elif backend == "wiki":
|
|
30
|
+
index_file = Path(path) / Wiki.DIR / Wiki.INDEX
|
|
31
|
+
else:
|
|
32
|
+
# local and any unknown backends: use Index.md at root
|
|
33
|
+
index_file = Path(path) / "Index.md"
|
|
34
|
+
|
|
35
|
+
if not index_file.exists():
|
|
36
|
+
return
|
|
37
|
+
|
|
38
|
+
content = index_file.read_text(encoding="utf-8")
|
|
39
|
+
print("<!-- agent-notes memory index (auto-loaded) -->")
|
|
40
|
+
print(content)
|
|
41
|
+
except Exception:
|
|
42
|
+
return
|
|
@@ -8,7 +8,6 @@ from .vault import do_vault, do_init, do_index
|
|
|
8
8
|
from .notes import do_add, do_list, do_show, do_size
|
|
9
9
|
from .transfer import do_export, do_import
|
|
10
10
|
from .wiki import do_ingest, do_query, do_lint, do_scan_raw
|
|
11
|
-
from .migrate import do_migrate
|
|
12
11
|
from .reset import do_reset
|
|
13
12
|
|
|
14
13
|
|
|
@@ -47,7 +46,7 @@ Examples:
|
|
|
47
46
|
print(help_text)
|
|
48
47
|
|
|
49
48
|
|
|
50
|
-
def memory(action: str = "list", name: Optional[str] = None, extra: Optional[list] = None) -> None:
|
|
49
|
+
def memory(action: str = "list", name: Optional[str] = None, extra: Optional[list] = None, description: str = "") -> None:
|
|
51
50
|
"""Manage agent memory."""
|
|
52
51
|
if action == "list":
|
|
53
52
|
do_list()
|
|
@@ -66,7 +65,7 @@ def memory(action: str = "list", name: Optional[str] = None, extra: Optional[lis
|
|
|
66
65
|
note_type = extra[1] if extra and len(extra) > 1 else "context"
|
|
67
66
|
agent = extra[2] if extra and len(extra) > 2 else ""
|
|
68
67
|
project = extra[3] if extra and len(extra) > 3 else ""
|
|
69
|
-
do_add(name, body, note_type=note_type, agent=agent, project=project)
|
|
68
|
+
do_add(name, body, note_type=note_type, agent=agent, project=project, description=description)
|
|
70
69
|
elif action == "size":
|
|
71
70
|
do_size()
|
|
72
71
|
elif action == "show":
|
|
@@ -80,8 +79,6 @@ def memory(action: str = "list", name: Optional[str] = None, extra: Optional[lis
|
|
|
80
79
|
do_export()
|
|
81
80
|
elif action == "import":
|
|
82
81
|
do_import()
|
|
83
|
-
elif action == "migrate":
|
|
84
|
-
do_migrate()
|
|
85
82
|
elif action == "ingest":
|
|
86
83
|
if not name:
|
|
87
84
|
do_scan_raw()
|
|
@@ -7,7 +7,7 @@ from . import _common
|
|
|
7
7
|
from ...config import MEMORY_DIR, Color
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
def do_add(title: str, body: str, note_type: str = "context", agent: str = "", project: str = "", tags: Optional[list] = None) -> None:
|
|
10
|
+
def do_add(title: str, body: str, note_type: str = "context", agent: str = "", project: str = "", tags: Optional[list] = None, description: str = "") -> None:
|
|
11
11
|
"""Add a note to memory (obsidian or wiki storage)."""
|
|
12
12
|
backend, path = _common._load_memory_config()
|
|
13
13
|
if backend == "none":
|
|
@@ -40,6 +40,7 @@ def do_add(title: str, body: str, note_type: str = "context", agent: str = "", p
|
|
|
40
40
|
note_type=note_type,
|
|
41
41
|
agent=agent,
|
|
42
42
|
project=project,
|
|
43
|
+
description=description,
|
|
43
44
|
tags=tags or [],
|
|
44
45
|
)
|
|
45
46
|
print(f"{Color.GREEN}Note saved: {note_path}{Color.NC}")
|
|
@@ -20,5 +20,13 @@ class Wiki:
|
|
|
20
20
|
class Obsidian:
|
|
21
21
|
"""Obsidian backend folder structure constants."""
|
|
22
22
|
INDEX = "Index.md"
|
|
23
|
-
SUBFOLDER = "
|
|
24
|
-
CATEGORIES = ["Patterns", "Decisions", "Mistakes", "Context", "Sessions"]
|
|
23
|
+
SUBFOLDER = "projects"
|
|
24
|
+
CATEGORIES = ["Patterns", "Decisions", "Mistakes", "Context", "Feedback", "Sessions"]
|
|
25
|
+
INDEX_SECTIONS = ["Decisions", "Patterns", "Context", "Mistakes", "Feedback"]
|
|
26
|
+
SESSION_CAP = 5
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class Hooks:
|
|
30
|
+
"""Hook command strings used in Claude Code settings.json."""
|
|
31
|
+
MEMORY_BRIDGE = "agent-notes hook memory-bridge"
|
|
32
|
+
COST_REPORT = "agent-notes cost-report"
|
|
@@ -317,7 +317,7 @@ agents:
|
|
|
317
317
|
|
|
318
318
|
debugger:
|
|
319
319
|
description: "Investigates bugs. Reproduces, isolates the failure, identifies root cause. Does not apply fixes — hands off to coder. Read-only on source. Triggers: bug, broken, error, crash, regression, flaky, root cause, why does, investigate."
|
|
320
|
-
role:
|
|
320
|
+
role: worker
|
|
321
321
|
mode: subagent
|
|
322
322
|
color: orange
|
|
323
323
|
effort: high
|
|
@@ -34,7 +34,7 @@ For each subtask, pick the cheapest capable agent:
|
|
|
34
34
|
- **Free** (do it yourself): one Read/Grep/Glob answers it.
|
|
35
35
|
- **Cheap** (`explorer`, Haiku): read-only discovery, structure mapping, pattern search. One `explorer` call beats multiple self-reads.
|
|
36
36
|
- **Medium** (`reviewer`, `security-auditor`, `system-auditor`, `database-specialist`, `performance-profiler`, `api-reviewer`): focused analysis of known files.
|
|
37
|
-
- **Reasoner** (`architect`,
|
|
37
|
+
- **Reasoner** (`architect`, Opus): deep system design, complex root-cause analysis. Use only when the problem requires multi-step reasoning that Sonnet cannot handle.
|
|
38
38
|
- **Expensive** (`coder`, `test-writer`, `test-runner`): writes files, open-ended work.
|
|
39
39
|
|
|
40
40
|
Rules:
|
|
@@ -75,7 +75,7 @@ Never spawn one agent per bullet point from the user's prompt. Combine related s
|
|
|
75
75
|
- `coder` — all file edits and implementation work
|
|
76
76
|
- `reviewer` — code quality checks after implementation
|
|
77
77
|
- `architect` — system design, module boundaries, refactor planning (Opus, expensive — use sparingly)
|
|
78
|
-
- `debugger` —
|
|
78
|
+
- `debugger` — bug investigation, root-cause analysis (Sonnet — hand fix to `coder`)
|
|
79
79
|
- `security-auditor` — auth, input handling, data access
|
|
80
80
|
- `test-writer` — create tests, `test-runner` — fix failing tests
|
|
81
81
|
- `system-auditor` — codebase health: N+1, duplication, dead code
|
|
@@ -87,3 +87,7 @@ Never spawn one agent per bullet point from the user's prompt. Combine related s
|
|
|
87
87
|
Skip agents for: simple questions (answer directly), single-file edits (coder alone), or two-grep lookups (do it yourself).
|
|
88
88
|
|
|
89
89
|
Give each agent a specific task with all context (paths, criteria). Always include the cost report at the end of every response.
|
|
90
|
+
|
|
91
|
+
### Permission pre-check (HARD RULE)
|
|
92
|
+
|
|
93
|
+
Before dispatching writing agents (`coder`, `test-writer`, `devops`, `refactorer`, `tech-writer`) in background: confirm Write/Edit/Bash permissions are granted. Background agents cannot surface permission prompts — they fail silently. Prefer foreground for writing agents, or ask the user to pre-approve. If a background agent fails on permissions, explain the blocker — do NOT write files yourself.
|
|
@@ -18,3 +18,11 @@ If you feel the urge to "just quickly check a file" — STOP. Dispatch `explorer
|
|
|
18
18
|
Exception: trivial requests (factual questions, conversational replies, single-line answers) may be handled inline with no tools.
|
|
19
19
|
|
|
20
20
|
**Exception — Phase 4 verification reads**: During Phase 4.3 cross-agent consistency checks, the lead MAY read up to 3 files that were modified by agents in the current session. This is targeted verification, not exploration.
|
|
21
|
+
|
|
22
|
+
## Output discipline
|
|
23
|
+
|
|
24
|
+
- Responses: 1-3 sentences per status update. State results and decisions, not process.
|
|
25
|
+
- Plans: structured bullet lists with file paths. No prose paragraphs.
|
|
26
|
+
- Agent briefings: context + task + acceptance criteria. No commentary or justification.
|
|
27
|
+
- Never narrate internal deliberation — report outcomes only.
|
|
28
|
+
- Cost table: once at end of response, never mid-response.
|
|
@@ -8,7 +8,7 @@ You are a team lead that plans and coordinates work across specialized agents.
|
|
|
8
8
|
|
|
9
9
|
<!-- include: hard_limits -->
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## Credentials handling (HARD RULE)
|
|
12
12
|
|
|
13
13
|
The lead MUST NEVER read, print, log, or include API keys / credentials / secrets in any output, even if the user asks. The credentials file at `~/.agent-notes/credentials.toml` is opaque — your only legitimate operations are:
|
|
14
14
|
|
|
@@ -62,13 +62,6 @@ After receiving output from any agent, scan for a `## Discoveries` section. For
|
|
|
62
62
|
|
|
63
63
|
<!-- include: guardrails -->
|
|
64
64
|
|
|
65
|
-
## Coding philosophy
|
|
66
|
-
|
|
67
|
-
- Read existing code before writing new code. Match project patterns.
|
|
68
|
-
- Minimal changes: only what was requested. Do not refactor beyond scope.
|
|
69
|
-
- Fix root causes, not symptoms.
|
|
70
|
-
- One approach, commit to it. Course-correct only on new evidence.
|
|
71
|
-
|
|
72
65
|
## Behavior
|
|
73
66
|
|
|
74
67
|
- Investigate before answering. Never speculate about code you haven't read.
|
|
@@ -76,13 +69,6 @@ After receiving output from any agent, scan for a `## Discoveries` section. For
|
|
|
76
69
|
- No comments or docs on code you didn't change.
|
|
77
70
|
- When the task is genuinely unclear and you cannot make a reasonable assumption, ask one clarifying question instead of guessing.
|
|
78
71
|
|
|
79
|
-
## Safety
|
|
80
|
-
|
|
81
|
-
- Confirm before: `git push --force`, `rm -rf`, `DROP TABLE`, branch deletion.
|
|
82
|
-
- Never commit: `.env`, `*.pem`, credentials, API keys, secrets.
|
|
83
|
-
- Never bypass: `--no-verify`, `--force` without explicit user request.
|
|
84
|
-
- Never force-push to main/master.
|
|
85
|
-
|
|
86
72
|
## Commits
|
|
87
73
|
|
|
88
74
|
- Load the `git` skill when asked to commit and follow its workflow.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: handoff
|
|
3
|
+
description: "Compact the current conversation into a handoff document for another agent to pick up. Use when the session is getting long, context is degrading, or you need to transfer work to a fresh session."
|
|
4
|
+
group: process
|
|
5
|
+
argument-hint: "What will the next session be used for?"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Handoff
|
|
9
|
+
|
|
10
|
+
Write a handoff document summarising the current conversation so a fresh agent can continue the work. Save it to a path produced by `mktemp -t handoff-XXXXXX.md` (read the file before you write to it).
|
|
11
|
+
|
|
12
|
+
## What to include
|
|
13
|
+
|
|
14
|
+
1. **Goal**: What the user is trying to accomplish (1-2 sentences)
|
|
15
|
+
2. **Current state**: What has been done so far, what works, what doesn't
|
|
16
|
+
3. **Next steps**: What the next session should focus on
|
|
17
|
+
4. **Key decisions**: Decisions made during this session that the next agent needs to know
|
|
18
|
+
5. **Relevant files**: Paths to files that were modified or are relevant
|
|
19
|
+
6. **Skills to use**: Suggest which skills the next session should invoke
|
|
20
|
+
|
|
21
|
+
## Rules
|
|
22
|
+
|
|
23
|
+
- Do not duplicate content already captured in other artifacts (PRDs, plans, ADRs, issues, commits, diffs). Reference them by path or URL instead.
|
|
24
|
+
- Keep it concise — the handoff should fit in a single context window read.
|
|
25
|
+
- If the user passed arguments, treat them as a description of what the next session will focus on and tailor the doc accordingly.
|
|
26
|
+
- If using the obsidian memory backend, also save a session note via `agent-notes memory add` before creating the handoff.
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: migrate-memory
|
|
3
|
+
description: "Reconcile the Obsidian vault or Wiki knowledge base to the latest canonical format. Use after upgrading agent-notes or when vault structure looks outdated or inconsistent."
|
|
4
|
+
group: process
|
|
5
|
+
requires_memory: obsidian, wiki
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Migrate Memory
|
|
9
|
+
|
|
10
|
+
Reconcile the memory store to the latest format. This skill transforms any state — old layout, missing fields, wrong folder names — into the canonical structure. Works for both Obsidian and Wiki backends.
|
|
11
|
+
|
|
12
|
+
## When to use
|
|
13
|
+
|
|
14
|
+
- After upgrading agent-notes
|
|
15
|
+
- When the user says "migrate memory" or `/migrate-memory`
|
|
16
|
+
- When vault structure looks outdated or inconsistent
|
|
17
|
+
|
|
18
|
+
## Step 1: Detect backend
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
agent-notes memory vault
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
This returns the backend type and vault path. Branch to the appropriate section below.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Obsidian backend
|
|
29
|
+
|
|
30
|
+
### Reconcile folder structure
|
|
31
|
+
|
|
32
|
+
The canonical vault layout is:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
<vault-root>/projects/<project-name>/
|
|
36
|
+
├── Patterns/
|
|
37
|
+
├── Decisions/
|
|
38
|
+
├── Mistakes/
|
|
39
|
+
├── Context/
|
|
40
|
+
├── Feedback/
|
|
41
|
+
├── Sessions/
|
|
42
|
+
└── Index.md
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Reconciliation rules:
|
|
46
|
+
- If the project lives under a `notes/` parent and `projects/` does NOT exist → rename `notes/` → `projects/`
|
|
47
|
+
- If BOTH `notes/` and `projects/` exist → merge: move all contents from `notes/<project>/` into `projects/<project>/`, skip files that already exist in the destination, then delete the empty `notes/` directory
|
|
48
|
+
- At the end: only `projects/` must exist. `notes/` must be gone.
|
|
49
|
+
- Create any missing category folders: Patterns, Decisions, Mistakes, Context, Feedback, Sessions
|
|
50
|
+
- If `Index.md` is missing, create it with the standard header
|
|
51
|
+
|
|
52
|
+
### Reconcile note frontmatter
|
|
53
|
+
|
|
54
|
+
Every `.md` file inside a category folder (NOT Index.md) must have this frontmatter:
|
|
55
|
+
|
|
56
|
+
```yaml
|
|
57
|
+
---
|
|
58
|
+
created_at: <ISO 8601 UTC, "Z" suffix>
|
|
59
|
+
type: <pattern|decision|mistake|context|session|feedback>
|
|
60
|
+
description: "<one-line summary optimized for index routing>"
|
|
61
|
+
session: <YYYY-MM-DD_session-id> # absent on session notes themselves
|
|
62
|
+
agent: <agent-name> # optional
|
|
63
|
+
---
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Reconciliation rules:
|
|
67
|
+
- `created_at` — if missing, derive from filename date prefix (`YYYY-MM-DD_slug.md` → that date at midnight UTC). If no date in filename, use file modification time
|
|
68
|
+
- `type` — if missing, derive from parent folder name (lowercase). `Patterns/` → `pattern`, etc.
|
|
69
|
+
- `description` — if missing, derive from the first non-heading, non-empty line of the body. Cap at 100 characters, break at word boundary. If no suitable line, use the filename slug with hyphens replaced by spaces
|
|
70
|
+
- `session` — leave as-is if present; do not add if absent
|
|
71
|
+
- `agent` — leave as-is if present; do not add if absent
|
|
72
|
+
- Do NOT remove extra frontmatter fields — only add/fix the required ones
|
|
73
|
+
|
|
74
|
+
### Reconcile filenames
|
|
75
|
+
|
|
76
|
+
Canonical filename format: `YYYY-MM-DD_<slug>.md`
|
|
77
|
+
- `<slug>` is kebab-case, derived from the note title
|
|
78
|
+
- If a file doesn't match this pattern, rename it to match (derive date from `created_at` frontmatter)
|
|
79
|
+
- On collision, append `_HHMMSS` before `.md`
|
|
80
|
+
|
|
81
|
+
### Regenerate Index.md
|
|
82
|
+
|
|
83
|
+
After all notes are reconciled, regenerate `Index.md`:
|
|
84
|
+
- List notes grouped by section in this order: Decisions, Patterns, Context, Mistakes, Feedback
|
|
85
|
+
- Within each section, newest first (by `created_at`)
|
|
86
|
+
- Each entry: `- [[relative-path|title]] — description`
|
|
87
|
+
- Sessions section: last 5 sessions only
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Wiki backend
|
|
92
|
+
|
|
93
|
+
### Reconcile folder structure
|
|
94
|
+
|
|
95
|
+
The canonical wiki layout is:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
<vault-root>/knowledge/
|
|
99
|
+
├── .obsidianignore
|
|
100
|
+
├── raw/ # immutable source archive
|
|
101
|
+
└── wiki/
|
|
102
|
+
├── index.md
|
|
103
|
+
├── log.md
|
|
104
|
+
├── sources/
|
|
105
|
+
├── concepts/
|
|
106
|
+
├── entities/
|
|
107
|
+
├── synthesis/
|
|
108
|
+
└── sessions/
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Reconciliation rules:
|
|
112
|
+
- Create any missing folders: `raw/`, `wiki/`, and all page type folders (`sources/`, `concepts/`, `entities/`, `synthesis/`, `sessions/`)
|
|
113
|
+
- If `.obsidianignore` is missing, create it with content: `raw/`
|
|
114
|
+
- If `wiki/index.md` is missing, create it with the standard header
|
|
115
|
+
- If `wiki/log.md` is missing, create it empty
|
|
116
|
+
|
|
117
|
+
### Reconcile wiki page frontmatter
|
|
118
|
+
|
|
119
|
+
Every `.md` file inside `wiki/sources/`, `wiki/concepts/`, `wiki/entities/`, `wiki/synthesis/`, and `wiki/sessions/` must have this frontmatter:
|
|
120
|
+
|
|
121
|
+
```yaml
|
|
122
|
+
---
|
|
123
|
+
created_at: <ISO 8601 UTC, "Z" suffix>
|
|
124
|
+
updated_at: <ISO 8601 UTC, "Z" suffix>
|
|
125
|
+
type: <sources|concepts|entities|synthesis|sessions>
|
|
126
|
+
tags: ["tag1", "tag2"] # optional
|
|
127
|
+
aliases: ["alias1"] # optional
|
|
128
|
+
sources: ["raw/source-file.md"] # optional
|
|
129
|
+
agent: <agent-name> # optional
|
|
130
|
+
project: <project-name> # optional
|
|
131
|
+
confidence: "<high|medium|low>" # optional
|
|
132
|
+
---
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Reconciliation rules:
|
|
136
|
+
- `created_at` — if missing, use file modification time in ISO 8601 UTC
|
|
137
|
+
- `updated_at` — if missing, set equal to `created_at`
|
|
138
|
+
- `type` — if missing, derive from parent folder name. `concepts/` → `concepts`, etc.
|
|
139
|
+
- `tags`, `aliases`, `sources`, `agent`, `project`, `confidence` — leave as-is if present; do not add if absent
|
|
140
|
+
- Do NOT remove extra frontmatter fields — only add/fix the required ones
|
|
141
|
+
|
|
142
|
+
### Reconcile wiki filenames
|
|
143
|
+
|
|
144
|
+
Canonical filename: `<kebab-case-slug>.md` (no date prefix for wiki pages)
|
|
145
|
+
- Slug derived from the H1 heading or title
|
|
146
|
+
- Report any non-compliant filenames
|
|
147
|
+
|
|
148
|
+
### Regenerate wiki/index.md
|
|
149
|
+
|
|
150
|
+
After all pages are reconciled, regenerate `wiki/index.md`:
|
|
151
|
+
- Group by page type in this order: Sources, Concepts, Entities, Synthesis, Sessions
|
|
152
|
+
- Each section as a markdown table: `| Page | Tags | Updated |`
|
|
153
|
+
- Each row: `| [[slug]] — description | #tag1 #tag2 | YYYY-MM-DD |`
|
|
154
|
+
- Description: first sentence of body content, capped at 80 characters
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Report
|
|
159
|
+
|
|
160
|
+
Print a summary of changes made:
|
|
161
|
+
- Backend: obsidian or wiki
|
|
162
|
+
- Folders: created / renamed / merged / removed
|
|
163
|
+
- Notes with updated frontmatter (count)
|
|
164
|
+
- Notes already compliant (count)
|
|
165
|
+
- Filenames: all OK or list non-compliant
|
|
166
|
+
- Index regenerated: yes/no
|
|
167
|
+
|
|
168
|
+
## Constraints
|
|
169
|
+
|
|
170
|
+
- Never delete individual notes. Only add/fix metadata, rename, and merge folders.
|
|
171
|
+
- Preserve note body content exactly — only touch frontmatter and filenames.
|
|
172
|
+
- When merging folders, skip files that already exist at the destination (do not overwrite).
|
|
@@ -107,7 +107,7 @@ agent-notes memory vault # confirm storage and path
|
|
|
107
107
|
|
|
108
108
|
The vault is structured as:
|
|
109
109
|
```
|
|
110
|
-
vault/agent-notes/
|
|
110
|
+
vault/agent-notes/projects/
|
|
111
111
|
├── <project-name>/
|
|
112
112
|
│ ├── Patterns/ — reusable solutions YYYY-MM-DD_<slug>.md
|
|
113
113
|
│ ├── Decisions/ — architectural choices YYYY-MM-DD_<slug>.md
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Logic Prototype
|
|
2
|
+
|
|
3
|
+
A tiny interactive terminal app to drive a state model by hand. Use when the question is about business logic, state transitions, or data shape.
|
|
4
|
+
|
|
5
|
+
## When this is the right shape
|
|
6
|
+
|
|
7
|
+
- "Does this state machine handle the edge case where X then Y?"
|
|
8
|
+
- "Does this data model let me represent the case where...?"
|
|
9
|
+
- "I want to feel out what the API should look like before writing it."
|
|
10
|
+
|
|
11
|
+
If the question is visual → use [UI.md](UI.md).
|
|
12
|
+
|
|
13
|
+
## Process
|
|
14
|
+
|
|
15
|
+
### 1. State the question
|
|
16
|
+
Write down the state model and question being prototyped. One paragraph at the top of the file.
|
|
17
|
+
|
|
18
|
+
### 2. Pick the language
|
|
19
|
+
Use the host project's language. Match existing tooling conventions.
|
|
20
|
+
|
|
21
|
+
### 3. Isolate logic in a portable module
|
|
22
|
+
Put logic behind a small, pure interface that could be lifted into the real codebase:
|
|
23
|
+
- **Pure reducer** — `(state, action) => state` for discrete events
|
|
24
|
+
- **State machine** — explicit states and transitions
|
|
25
|
+
- **Pure functions** over a plain data type
|
|
26
|
+
- **Class/module** with clear method surface for genuine ongoing state
|
|
27
|
+
|
|
28
|
+
Keep it pure: no I/O, no terminal code. The TUI imports it; nothing flows back.
|
|
29
|
+
|
|
30
|
+
### 4. Build the smallest TUI
|
|
31
|
+
On every tick, clear screen and re-render:
|
|
32
|
+
1. **Current state** — pretty-printed, bold field names, dim less important context
|
|
33
|
+
2. **Keyboard shortcuts** — listed at bottom: `[a] add user [d] delete user [q] quit`
|
|
34
|
+
|
|
35
|
+
Loop: initialize → read keystroke → dispatch → re-render → repeat until quit.
|
|
36
|
+
|
|
37
|
+
### 5. One command to run
|
|
38
|
+
Add a script to the project's task runner.
|
|
39
|
+
|
|
40
|
+
### 6. Capture the answer
|
|
41
|
+
When done, record what it taught in NOTES.md, commit message, or ADR. The logic module is worth keeping; the TUI shell gets deleted.
|
|
42
|
+
|
|
43
|
+
## Anti-patterns
|
|
44
|
+
- Don't add tests — a prototype that needs tests is no longer a prototype
|
|
45
|
+
- Don't wire to the real database — use in-memory
|
|
46
|
+
- Don't generalise — answer one question
|
|
47
|
+
- Don't blur logic and TUI — keep the TUI as a thin shell over a pure module
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prototype
|
|
3
|
+
description: "Build a throwaway prototype to answer a design question. Routes between a terminal app for logic/state questions or multiple UI variations for visual questions. Use when user wants to prototype, sanity-check a data model, mock up UI, or says 'prototype this'."
|
|
4
|
+
group: process
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Prototype
|
|
8
|
+
|
|
9
|
+
A prototype is **throwaway code that answers a question**. The question decides the shape.
|
|
10
|
+
|
|
11
|
+
## Pick a branch
|
|
12
|
+
|
|
13
|
+
- **"Does this logic / state model feel right?"** → [LOGIC.md](LOGIC.md). Build a tiny interactive terminal app.
|
|
14
|
+
- **"What should this look like?"** → [UI.md](UI.md). Generate radically different UI variations switchable via URL param.
|
|
15
|
+
|
|
16
|
+
If ambiguous, default to whichever matches the surrounding code (backend module → logic; page/component → UI).
|
|
17
|
+
|
|
18
|
+
## Rules for both branches
|
|
19
|
+
|
|
20
|
+
1. **Throwaway and clearly marked.** Locate near where it will be used but name it obviously.
|
|
21
|
+
2. **One command to run.** Use the project's existing task runner.
|
|
22
|
+
3. **No persistence by default.** State lives in memory.
|
|
23
|
+
4. **Skip the polish.** No tests, no error handling beyond runnable, no abstractions.
|
|
24
|
+
5. **Surface the state.** After every action, print or render the full relevant state.
|
|
25
|
+
6. **Delete or absorb when done.** Either delete or fold the validated decision into real code.
|
|
26
|
+
|
|
27
|
+
## When done
|
|
28
|
+
|
|
29
|
+
Capture the answer somewhere durable (commit message, ADR, issue, or NOTES.md next to the prototype). The answer is the only thing worth keeping.
|