agent-notes 2.16.0__tar.gz → 2.17.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.16.0 → agent_notes-2.17.0}/PKG-INFO +28 -24
- {agent_notes-2.16.0 → agent_notes-2.17.0}/README.md +27 -23
- agent_notes-2.17.0/agent_notes/VERSION +1 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/installer.py +1 -1
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes.egg-info/PKG-INFO +28 -24
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/commands/test_uninstall_command.py +131 -0
- agent_notes-2.16.0/agent_notes/VERSION +0 -1
- {agent_notes-2.16.0 → agent_notes-2.17.0}/LICENSE +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/__main__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/cli.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/_install_helpers.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/build.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/config.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/doctor.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/info.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/install.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/list.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/memory.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/regenerate.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/set_role.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/uninstall.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/validate.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/commands/wizard.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/config.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/agents.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/analyst.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/api-reviewer.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/architect.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/coder.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/database-specialist.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/debugger.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/devil.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/devops.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/explorer.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/integrations.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/lead.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/performance-profiler.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/refactorer.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/reviewer.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/security-auditor.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/shared/cost_reporting.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/shared/phase0.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/system-auditor.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/tech-writer.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/test-runner.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/agents/test-writer.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/cli/claude.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/cli/copilot.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/cli/opencode.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/commands/brainstorm.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/commands/debug.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/commands/review.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/global-claude.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/global-copilot.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/global-opencode.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/hooks/session-context.md.tpl +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/models/claude-haiku-4-5.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/models/claude-opus-4-1.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/models/claude-opus-4-5.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/models/claude-opus-4-6.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/models/claude-opus-4-7.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/models/claude-sonnet-4-5.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/models/claude-sonnet-4-6.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/models/claude-sonnet-4.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/plugin/claude.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/plugin/opencode-index.js.template +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/plugin/opencode.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/pricing.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/roles/orchestrator.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/roles/reasoner.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/roles/scout.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/roles/worker.yaml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/rules/code-quality.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/rules/safety.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/brainstorming/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/caveman/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/code-review/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/debugging-protocol/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/docker-compose/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/docker-compose-advanced/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/docker-dockerfile/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/docker-dockerfile-languages/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/git/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/grill-me/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/grill-with-docs/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/improve-codebase-architecture/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/obsidian-memory/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-active-storage/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-broadcasting/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-concerns/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-controllers/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-controllers-advanced/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-helpers/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-initializers/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-javascript/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-jobs/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-kamal/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-lib/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-mailers/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-migrations/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-models/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-models-advanced/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-routes/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-style/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-testing-controllers/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-testing-models/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-testing-system/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-validations/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-view-components/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-view-components-advanced/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-views/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/rails-views-advanced/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/refactoring-protocol/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/setup-project-context/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/tdd/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/skills/zoom-out/SKILL.md +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/templates/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/templates/__pycache__/__init__.cpython-314.pyc +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/templates/frontmatter/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-314.pyc +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/templates/frontmatter/claude.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/data/templates/frontmatter/opencode.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/doctor_checks.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/domain/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/domain/agent.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/domain/cli_backend.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/domain/diagnostics.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/domain/diff.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/domain/model.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/domain/role.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/domain/rule.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/domain/skill.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/domain/state.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/install_state.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/registries/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/registries/_base.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/registries/agent_registry.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/registries/cli_registry.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/registries/model_registry.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/registries/role_registry.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/registries/rule_registry.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/registries/skill_registry.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/scripts/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/scripts/_claude_backend.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/scripts/_formatting.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/scripts/_opencode_backend.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/scripts/_pricing.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/scripts/cost_report.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/counts.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/credentials.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/diagnostics/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/diagnostics/_checks.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/diagnostics/_display.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/diagnostics/_fix.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/diff.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/fs.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/install_state_builder.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/memory_backend.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/rendering.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/session_context.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/settings_writer.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/state_store.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/ui.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/user_config.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/validation.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/services/wiki_backend.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes/state.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes.egg-info/SOURCES.txt +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes.egg-info/dependency_links.txt +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes.egg-info/entry_points.txt +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes.egg-info/requires.txt +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/agent_notes.egg-info/top_level.txt +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/pyproject.toml +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/setup.cfg +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/conftest.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/commands/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/commands/test_config_command.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/commands/test_doctor_command.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/commands/test_info_command.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/commands/test_install_command.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/commands/test_list_command.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/commands/test_regenerate_command.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/commands/test_validate_command.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/memory/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/memory/test_memory_command.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/scripts/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/scripts/test_release_script.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/integration/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/integration/build_output/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/integration/build_output/test_build_output.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/integration/install/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/integration/install/test_install_methods.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/integration/plugin_builders/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/integration/plugin_builders/test_plugin_builders.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/plugins/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/plugins/claude/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/plugins/claude/test_agents.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/plugins/test_skills.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/commands/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/commands/test_cost_report_subcommand.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/commands/test_count_agents.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/commands/test_memory_migrate.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/commands/test_wizard_orchestrator_skip.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/commands/test_wizard_preflight.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/registries/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/registries/test_registries.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/scripts/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/scripts/test_cost_report.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/scripts/test_cost_report_scoping.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/scripts/test_formatting_tty.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/scripts/test_time_aggregation.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/services/__init__.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/services/test_build_functions.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/services/test_credentials.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/services/test_fs.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/services/test_installer_plan.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/services/test_memory_backend.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/services/test_memory_backend_io.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/services/test_rendering_includes.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/services/test_session_context.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/services/test_settings_writer.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/services/test_wiki_backend.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/test_import_health.py +0 -0
- {agent_notes-2.16.0 → agent_notes-2.17.0}/tests/unit/test_memory_dir_for_backend.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-notes
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.17.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
|
|
@@ -32,7 +32,7 @@ Dynamic: license-file
|
|
|
32
32
|
|
|
33
33
|
AI agent configuration manager for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) and [OpenCode](https://github.com/opencode-ai/opencode).
|
|
34
34
|
|
|
35
|
-
Configures a Lead agent (Opus) that orchestrates a team of 18 specialized subagents across three model tiers — so Opus plans and reasons, Sonnet executes, and Haiku explores.
|
|
35
|
+
Configures a Lead agent (Opus) that orchestrates a team of 18 specialized subagents across three model tiers — so Opus 4.6 plans and reasons, Sonnet 4.6 executes, and Haiku 4.5 explores.
|
|
36
36
|
|
|
37
37
|
## Quick Start
|
|
38
38
|
|
|
@@ -86,8 +86,8 @@ Iteration loop: edit source → `python -m build` → `pipx reinstall dist/*.whl
|
|
|
86
86
|
|
|
87
87
|
### 3. Plugin — limited functionality
|
|
88
88
|
|
|
89
|
-
- **Claude Code**: install via the Claude Code plugin marketplace
|
|
90
|
-
- **OpenCode**: copy or symlink `.
|
|
89
|
+
- **Claude Code**: install via the Claude Code plugin marketplace or copy/symlink `.claude-plugin/` into `~/.claude/plugins/agent-notes/`.
|
|
90
|
+
- **OpenCode**: copy or symlink `.claude-plugin/` into `~/.config/opencode/plugins/agent-notes/` and add `"plugin": ["agent-notes"]` to `opencode.json`.
|
|
91
91
|
|
|
92
92
|
The plugin runs a `session.start` hook that surfaces agent-notes context to the CLI session. It does **not** include the full `agent-notes` CLI (wizard, doctor, config, memory, etc.). For those, use install method 1 or 2.
|
|
93
93
|
|
|
@@ -113,8 +113,8 @@ agent-notes <command> [options]
|
|
|
113
113
|
|
|
114
114
|
| Command | Description |
|
|
115
115
|
|---------|-------------|
|
|
116
|
-
| `install [--local] [--copy]` | Interactive wizard or direct install |
|
|
117
|
-
| `uninstall [--local]` | Remove installed components |
|
|
116
|
+
| `install [--local] [--copy] [--reconfigure]` | Interactive wizard or direct install |
|
|
117
|
+
| `uninstall [--local \| --global]` | Remove installed components (both scopes by default) |
|
|
118
118
|
| `doctor [--local] [--fix]` | Check installation health |
|
|
119
119
|
| `info` | Show status and component counts |
|
|
120
120
|
| `list [clis\|models\|roles\|agents\|skills\|rules\|all]` | List engine components or installed |
|
|
@@ -122,6 +122,7 @@ agent-notes <command> [options]
|
|
|
122
122
|
| `regenerate [--cli <cli>]` | Rebuild files from state.json (Phase 10+) |
|
|
123
123
|
| `validate` | Lint source configuration files |
|
|
124
124
|
| `memory [list\|size\|show\|reset\|export\|import] [name]` | Manage agent memory |
|
|
125
|
+
| `cost-report` | Show session cost breakdown by agent and model |
|
|
125
126
|
|
|
126
127
|
### Supported platforms
|
|
127
128
|
|
|
@@ -152,25 +153,25 @@ agent-notes memory add "Rails enum prefix" \
|
|
|
152
153
|
|
|
153
154
|
## Agent Team
|
|
154
155
|
|
|
155
|
-
Specialized subagents with hierarchical model strategy: **Opus 4.
|
|
156
|
+
Specialized subagents with hierarchical model strategy: **Opus 4.6 decides, Sonnet 4.6 executes, Haiku 4.5 explores.**
|
|
156
157
|
|
|
157
158
|
| Agent | Model | Role |
|
|
158
159
|
|-------|-------|------|
|
|
159
|
-
| **lead** | Opus 4.
|
|
160
|
-
| **architect** | Opus 4.
|
|
161
|
-
| **debugger** | Opus 4.
|
|
162
|
-
| **coder** | Sonnet 4 | Implements features, fixes bugs, edits files. |
|
|
163
|
-
| **reviewer** | Sonnet 4 | Code quality review. Read-only. |
|
|
164
|
-
| **security-auditor** | Sonnet 4 | Security vulnerability analysis. Read-only. |
|
|
165
|
-
| **test-writer** | Sonnet 4 | Writes tests for any framework. |
|
|
166
|
-
| **test-runner** | Sonnet 4 | Diagnoses and fixes failing tests. |
|
|
167
|
-
| **system-auditor** | Sonnet 4 | Codebase health: duplication, N+1, coupling. Read-only. |
|
|
168
|
-
| **database-specialist** | Sonnet 4 | Schema design, indexes, query performance, migrations. Read-only. |
|
|
169
|
-
| **performance-profiler** | Sonnet 4 | Response times, memory, caching, bundle size. Read-only. |
|
|
170
|
-
| **devops** | Sonnet 4 | Docker, CI/CD, deployment configs. |
|
|
171
|
-
| **devil** | Sonnet 4 | Challenges plans to surface hidden risks. Read-only. |
|
|
172
|
-
| **integrations** | Sonnet 4 | Third-party integrations: OAuth, webhooks, payments. |
|
|
173
|
-
| **refactorer** | Sonnet 4 | Improves code structure without changing behavior. |
|
|
160
|
+
| **lead** | Opus 4.6 | Plans, delegates, reviews. Orchestrator. |
|
|
161
|
+
| **architect** | Opus 4.6 | System architecture, module boundaries, domain models. Read-only. |
|
|
162
|
+
| **debugger** | Opus 4.6 | Bug investigation: reproduces, isolates, identifies root cause. Read-only. |
|
|
163
|
+
| **coder** | Sonnet 4.6 | Implements features, fixes bugs, edits files. |
|
|
164
|
+
| **reviewer** | Sonnet 4.6 | Code quality review. Read-only. |
|
|
165
|
+
| **security-auditor** | Sonnet 4.6 | Security vulnerability analysis. Read-only. |
|
|
166
|
+
| **test-writer** | Sonnet 4.6 | Writes tests for any framework. |
|
|
167
|
+
| **test-runner** | Sonnet 4.6 | Diagnoses and fixes failing tests. |
|
|
168
|
+
| **system-auditor** | Sonnet 4.6 | Codebase health: duplication, N+1, coupling. Read-only. |
|
|
169
|
+
| **database-specialist** | Sonnet 4.6 | Schema design, indexes, query performance, migrations. Read-only. |
|
|
170
|
+
| **performance-profiler** | Sonnet 4.6 | Response times, memory, caching, bundle size. Read-only. |
|
|
171
|
+
| **devops** | Sonnet 4.6 | Docker, CI/CD, deployment configs. |
|
|
172
|
+
| **devil** | Sonnet 4.6 | Challenges plans to surface hidden risks. Read-only. |
|
|
173
|
+
| **integrations** | Sonnet 4.6 | Third-party integrations: OAuth, webhooks, payments. |
|
|
174
|
+
| **refactorer** | Sonnet 4.6 | Improves code structure without changing behavior. |
|
|
174
175
|
| **analyst** | Haiku 4.5 | Requirements analysis: surfaces missing or contradictory requirements. Read-only. |
|
|
175
176
|
| **api-reviewer** | Haiku 4.5 | API design, versioning, error handling, backward compatibility. Read-only. |
|
|
176
177
|
| **tech-writer** | Haiku 4.5 | Documentation: READMEs, API docs, changelogs. |
|
|
@@ -178,7 +179,7 @@ Specialized subagents with hierarchical model strategy: **Opus 4.7 decides, Sonn
|
|
|
178
179
|
|
|
179
180
|
## Architecture
|
|
180
181
|
|
|
181
|
-
agent-notes is a 4-layer engine (domain / registries / services / commands). All extensible content (CLIs, models, roles, agents, skills, rules) lives in `agent_notes/data/` as YAML — adding a new CLI/model/role is a YAML drop, no Python changes. See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md), [docs/ADD_CLI.md](docs/ADD_CLI.md), [docs/ADD_MODEL.md](docs/ADD_MODEL.md), [docs/ADD_ROLE.md](docs/ADD_ROLE.md).
|
|
182
|
+
agent-notes is a 4-layer engine (domain / registries / services / commands). All extensible content (CLIs, models, roles, agents, skills, rules) lives in `agent_notes/data/` as YAML — adding a new CLI/model/role is a YAML drop, no Python changes. Context is loaded in tiers: always-loaded (CLAUDE.md, rules, skill catalog), lazy-loaded (full skill content, agent prompts), and pull-based (memory notes). See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md), [docs/ADD_CLI.md](docs/ADD_CLI.md), [docs/ADD_MODEL.md](docs/ADD_MODEL.md), [docs/ADD_ROLE.md](docs/ADD_ROLE.md).
|
|
182
183
|
|
|
183
184
|
## Improved Claude Code workflows
|
|
184
185
|
|
|
@@ -204,6 +205,8 @@ Four failure modes that derail AI-assisted development, and the skills that addr
|
|
|
204
205
|
|
|
205
206
|
42 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/`.
|
|
206
207
|
|
|
208
|
+
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.
|
|
209
|
+
|
|
207
210
|
### Using skills in Claude Code / OpenCode
|
|
208
211
|
|
|
209
212
|
```
|
|
@@ -221,6 +224,7 @@ Agents accumulate knowledge across sessions using one of three backends, chosen
|
|
|
221
224
|
|---------|---------|----------|
|
|
222
225
|
| **Local** | `~/.claude/agent-memory/<agent>/` — plain markdown per agent | Simple setup, no extra tools |
|
|
223
226
|
| **Obsidian** | Category vault with YAML frontmatter and `[[wikilinks]]` | Visual browsing, backlinks, Dataview queries |
|
|
227
|
+
| **Wiki** | `~/Documents/Obsidian Vault/agent-wiki/` — structured wiki with categories | Team knowledge bases, shared context |
|
|
224
228
|
| **None** | Disabled — no files written | Stateless or shared machines |
|
|
225
229
|
|
|
226
230
|
### Obsidian setup
|
|
@@ -268,7 +272,7 @@ Always use `_prefix: true` with Rails enums to avoid method name collisions.
|
|
|
268
272
|
|
|
269
273
|
## Development
|
|
270
274
|
|
|
271
|
-
Python 3.
|
|
275
|
+
Python 3.10+ required. Build from source and run tests:
|
|
272
276
|
|
|
273
277
|
```bash
|
|
274
278
|
python -m build && pipx install dist/*.whl
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
AI agent configuration manager for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) and [OpenCode](https://github.com/opencode-ai/opencode).
|
|
4
4
|
|
|
5
|
-
Configures a Lead agent (Opus) that orchestrates a team of 18 specialized subagents across three model tiers — so Opus plans and reasons, Sonnet executes, and Haiku explores.
|
|
5
|
+
Configures a Lead agent (Opus) that orchestrates a team of 18 specialized subagents across three model tiers — so Opus 4.6 plans and reasons, Sonnet 4.6 executes, and Haiku 4.5 explores.
|
|
6
6
|
|
|
7
7
|
## Quick Start
|
|
8
8
|
|
|
@@ -56,8 +56,8 @@ Iteration loop: edit source → `python -m build` → `pipx reinstall dist/*.whl
|
|
|
56
56
|
|
|
57
57
|
### 3. Plugin — limited functionality
|
|
58
58
|
|
|
59
|
-
- **Claude Code**: install via the Claude Code plugin marketplace
|
|
60
|
-
- **OpenCode**: copy or symlink `.
|
|
59
|
+
- **Claude Code**: install via the Claude Code plugin marketplace or copy/symlink `.claude-plugin/` into `~/.claude/plugins/agent-notes/`.
|
|
60
|
+
- **OpenCode**: copy or symlink `.claude-plugin/` into `~/.config/opencode/plugins/agent-notes/` and add `"plugin": ["agent-notes"]` to `opencode.json`.
|
|
61
61
|
|
|
62
62
|
The plugin runs a `session.start` hook that surfaces agent-notes context to the CLI session. It does **not** include the full `agent-notes` CLI (wizard, doctor, config, memory, etc.). For those, use install method 1 or 2.
|
|
63
63
|
|
|
@@ -83,8 +83,8 @@ agent-notes <command> [options]
|
|
|
83
83
|
|
|
84
84
|
| Command | Description |
|
|
85
85
|
|---------|-------------|
|
|
86
|
-
| `install [--local] [--copy]` | Interactive wizard or direct install |
|
|
87
|
-
| `uninstall [--local]` | Remove installed components |
|
|
86
|
+
| `install [--local] [--copy] [--reconfigure]` | Interactive wizard or direct install |
|
|
87
|
+
| `uninstall [--local \| --global]` | Remove installed components (both scopes by default) |
|
|
88
88
|
| `doctor [--local] [--fix]` | Check installation health |
|
|
89
89
|
| `info` | Show status and component counts |
|
|
90
90
|
| `list [clis\|models\|roles\|agents\|skills\|rules\|all]` | List engine components or installed |
|
|
@@ -92,6 +92,7 @@ agent-notes <command> [options]
|
|
|
92
92
|
| `regenerate [--cli <cli>]` | Rebuild files from state.json (Phase 10+) |
|
|
93
93
|
| `validate` | Lint source configuration files |
|
|
94
94
|
| `memory [list\|size\|show\|reset\|export\|import] [name]` | Manage agent memory |
|
|
95
|
+
| `cost-report` | Show session cost breakdown by agent and model |
|
|
95
96
|
|
|
96
97
|
### Supported platforms
|
|
97
98
|
|
|
@@ -122,25 +123,25 @@ agent-notes memory add "Rails enum prefix" \
|
|
|
122
123
|
|
|
123
124
|
## Agent Team
|
|
124
125
|
|
|
125
|
-
Specialized subagents with hierarchical model strategy: **Opus 4.
|
|
126
|
+
Specialized subagents with hierarchical model strategy: **Opus 4.6 decides, Sonnet 4.6 executes, Haiku 4.5 explores.**
|
|
126
127
|
|
|
127
128
|
| Agent | Model | Role |
|
|
128
129
|
|-------|-------|------|
|
|
129
|
-
| **lead** | Opus 4.
|
|
130
|
-
| **architect** | Opus 4.
|
|
131
|
-
| **debugger** | Opus 4.
|
|
132
|
-
| **coder** | Sonnet 4 | Implements features, fixes bugs, edits files. |
|
|
133
|
-
| **reviewer** | Sonnet 4 | Code quality review. Read-only. |
|
|
134
|
-
| **security-auditor** | Sonnet 4 | Security vulnerability analysis. Read-only. |
|
|
135
|
-
| **test-writer** | Sonnet 4 | Writes tests for any framework. |
|
|
136
|
-
| **test-runner** | Sonnet 4 | Diagnoses and fixes failing tests. |
|
|
137
|
-
| **system-auditor** | Sonnet 4 | Codebase health: duplication, N+1, coupling. Read-only. |
|
|
138
|
-
| **database-specialist** | Sonnet 4 | Schema design, indexes, query performance, migrations. Read-only. |
|
|
139
|
-
| **performance-profiler** | Sonnet 4 | Response times, memory, caching, bundle size. Read-only. |
|
|
140
|
-
| **devops** | Sonnet 4 | Docker, CI/CD, deployment configs. |
|
|
141
|
-
| **devil** | Sonnet 4 | Challenges plans to surface hidden risks. Read-only. |
|
|
142
|
-
| **integrations** | Sonnet 4 | Third-party integrations: OAuth, webhooks, payments. |
|
|
143
|
-
| **refactorer** | Sonnet 4 | Improves code structure without changing behavior. |
|
|
130
|
+
| **lead** | Opus 4.6 | Plans, delegates, reviews. Orchestrator. |
|
|
131
|
+
| **architect** | Opus 4.6 | System architecture, module boundaries, domain models. Read-only. |
|
|
132
|
+
| **debugger** | Opus 4.6 | Bug investigation: reproduces, isolates, identifies root cause. Read-only. |
|
|
133
|
+
| **coder** | Sonnet 4.6 | Implements features, fixes bugs, edits files. |
|
|
134
|
+
| **reviewer** | Sonnet 4.6 | Code quality review. Read-only. |
|
|
135
|
+
| **security-auditor** | Sonnet 4.6 | Security vulnerability analysis. Read-only. |
|
|
136
|
+
| **test-writer** | Sonnet 4.6 | Writes tests for any framework. |
|
|
137
|
+
| **test-runner** | Sonnet 4.6 | Diagnoses and fixes failing tests. |
|
|
138
|
+
| **system-auditor** | Sonnet 4.6 | Codebase health: duplication, N+1, coupling. Read-only. |
|
|
139
|
+
| **database-specialist** | Sonnet 4.6 | Schema design, indexes, query performance, migrations. Read-only. |
|
|
140
|
+
| **performance-profiler** | Sonnet 4.6 | Response times, memory, caching, bundle size. Read-only. |
|
|
141
|
+
| **devops** | Sonnet 4.6 | Docker, CI/CD, deployment configs. |
|
|
142
|
+
| **devil** | Sonnet 4.6 | Challenges plans to surface hidden risks. Read-only. |
|
|
143
|
+
| **integrations** | Sonnet 4.6 | Third-party integrations: OAuth, webhooks, payments. |
|
|
144
|
+
| **refactorer** | Sonnet 4.6 | Improves code structure without changing behavior. |
|
|
144
145
|
| **analyst** | Haiku 4.5 | Requirements analysis: surfaces missing or contradictory requirements. Read-only. |
|
|
145
146
|
| **api-reviewer** | Haiku 4.5 | API design, versioning, error handling, backward compatibility. Read-only. |
|
|
146
147
|
| **tech-writer** | Haiku 4.5 | Documentation: READMEs, API docs, changelogs. |
|
|
@@ -148,7 +149,7 @@ Specialized subagents with hierarchical model strategy: **Opus 4.7 decides, Sonn
|
|
|
148
149
|
|
|
149
150
|
## Architecture
|
|
150
151
|
|
|
151
|
-
agent-notes is a 4-layer engine (domain / registries / services / commands). All extensible content (CLIs, models, roles, agents, skills, rules) lives in `agent_notes/data/` as YAML — adding a new CLI/model/role is a YAML drop, no Python changes. See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md), [docs/ADD_CLI.md](docs/ADD_CLI.md), [docs/ADD_MODEL.md](docs/ADD_MODEL.md), [docs/ADD_ROLE.md](docs/ADD_ROLE.md).
|
|
152
|
+
agent-notes is a 4-layer engine (domain / registries / services / commands). All extensible content (CLIs, models, roles, agents, skills, rules) lives in `agent_notes/data/` as YAML — adding a new CLI/model/role is a YAML drop, no Python changes. Context is loaded in tiers: always-loaded (CLAUDE.md, rules, skill catalog), lazy-loaded (full skill content, agent prompts), and pull-based (memory notes). See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md), [docs/ADD_CLI.md](docs/ADD_CLI.md), [docs/ADD_MODEL.md](docs/ADD_MODEL.md), [docs/ADD_ROLE.md](docs/ADD_ROLE.md).
|
|
152
153
|
|
|
153
154
|
## Improved Claude Code workflows
|
|
154
155
|
|
|
@@ -174,6 +175,8 @@ Four failure modes that derail AI-assisted development, and the skills that addr
|
|
|
174
175
|
|
|
175
176
|
42 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/`.
|
|
176
177
|
|
|
178
|
+
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.
|
|
179
|
+
|
|
177
180
|
### Using skills in Claude Code / OpenCode
|
|
178
181
|
|
|
179
182
|
```
|
|
@@ -191,6 +194,7 @@ Agents accumulate knowledge across sessions using one of three backends, chosen
|
|
|
191
194
|
|---------|---------|----------|
|
|
192
195
|
| **Local** | `~/.claude/agent-memory/<agent>/` — plain markdown per agent | Simple setup, no extra tools |
|
|
193
196
|
| **Obsidian** | Category vault with YAML frontmatter and `[[wikilinks]]` | Visual browsing, backlinks, Dataview queries |
|
|
197
|
+
| **Wiki** | `~/Documents/Obsidian Vault/agent-wiki/` — structured wiki with categories | Team knowledge bases, shared context |
|
|
194
198
|
| **None** | Disabled — no files written | Stateless or shared machines |
|
|
195
199
|
|
|
196
200
|
### Obsidian setup
|
|
@@ -238,7 +242,7 @@ Always use `_prefix: true` with Rails enums to avoid method name collisions.
|
|
|
238
242
|
|
|
239
243
|
## Development
|
|
240
244
|
|
|
241
|
-
Python 3.
|
|
245
|
+
Python 3.10+ required. Build from source and run tests:
|
|
242
246
|
|
|
243
247
|
```bash
|
|
244
248
|
python -m build && pipx install dist/*.whl
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.17.0
|
|
@@ -347,7 +347,7 @@ def uninstall_all(scope: str, registry: Optional[CLIRegistry] = None) -> None:
|
|
|
347
347
|
copy_mode = False
|
|
348
348
|
state = load_state()
|
|
349
349
|
if state is not None:
|
|
350
|
-
scope_state = get_scope(state, scope)
|
|
350
|
+
scope_state = get_scope(state, scope, project_path=Path.cwd() if scope == "local" else None)
|
|
351
351
|
if scope_state is not None:
|
|
352
352
|
copy_mode = (scope_state.mode == "copy")
|
|
353
353
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-notes
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.17.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
|
|
@@ -32,7 +32,7 @@ Dynamic: license-file
|
|
|
32
32
|
|
|
33
33
|
AI agent configuration manager for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) and [OpenCode](https://github.com/opencode-ai/opencode).
|
|
34
34
|
|
|
35
|
-
Configures a Lead agent (Opus) that orchestrates a team of 18 specialized subagents across three model tiers — so Opus plans and reasons, Sonnet executes, and Haiku explores.
|
|
35
|
+
Configures a Lead agent (Opus) that orchestrates a team of 18 specialized subagents across three model tiers — so Opus 4.6 plans and reasons, Sonnet 4.6 executes, and Haiku 4.5 explores.
|
|
36
36
|
|
|
37
37
|
## Quick Start
|
|
38
38
|
|
|
@@ -86,8 +86,8 @@ Iteration loop: edit source → `python -m build` → `pipx reinstall dist/*.whl
|
|
|
86
86
|
|
|
87
87
|
### 3. Plugin — limited functionality
|
|
88
88
|
|
|
89
|
-
- **Claude Code**: install via the Claude Code plugin marketplace
|
|
90
|
-
- **OpenCode**: copy or symlink `.
|
|
89
|
+
- **Claude Code**: install via the Claude Code plugin marketplace or copy/symlink `.claude-plugin/` into `~/.claude/plugins/agent-notes/`.
|
|
90
|
+
- **OpenCode**: copy or symlink `.claude-plugin/` into `~/.config/opencode/plugins/agent-notes/` and add `"plugin": ["agent-notes"]` to `opencode.json`.
|
|
91
91
|
|
|
92
92
|
The plugin runs a `session.start` hook that surfaces agent-notes context to the CLI session. It does **not** include the full `agent-notes` CLI (wizard, doctor, config, memory, etc.). For those, use install method 1 or 2.
|
|
93
93
|
|
|
@@ -113,8 +113,8 @@ agent-notes <command> [options]
|
|
|
113
113
|
|
|
114
114
|
| Command | Description |
|
|
115
115
|
|---------|-------------|
|
|
116
|
-
| `install [--local] [--copy]` | Interactive wizard or direct install |
|
|
117
|
-
| `uninstall [--local]` | Remove installed components |
|
|
116
|
+
| `install [--local] [--copy] [--reconfigure]` | Interactive wizard or direct install |
|
|
117
|
+
| `uninstall [--local \| --global]` | Remove installed components (both scopes by default) |
|
|
118
118
|
| `doctor [--local] [--fix]` | Check installation health |
|
|
119
119
|
| `info` | Show status and component counts |
|
|
120
120
|
| `list [clis\|models\|roles\|agents\|skills\|rules\|all]` | List engine components or installed |
|
|
@@ -122,6 +122,7 @@ agent-notes <command> [options]
|
|
|
122
122
|
| `regenerate [--cli <cli>]` | Rebuild files from state.json (Phase 10+) |
|
|
123
123
|
| `validate` | Lint source configuration files |
|
|
124
124
|
| `memory [list\|size\|show\|reset\|export\|import] [name]` | Manage agent memory |
|
|
125
|
+
| `cost-report` | Show session cost breakdown by agent and model |
|
|
125
126
|
|
|
126
127
|
### Supported platforms
|
|
127
128
|
|
|
@@ -152,25 +153,25 @@ agent-notes memory add "Rails enum prefix" \
|
|
|
152
153
|
|
|
153
154
|
## Agent Team
|
|
154
155
|
|
|
155
|
-
Specialized subagents with hierarchical model strategy: **Opus 4.
|
|
156
|
+
Specialized subagents with hierarchical model strategy: **Opus 4.6 decides, Sonnet 4.6 executes, Haiku 4.5 explores.**
|
|
156
157
|
|
|
157
158
|
| Agent | Model | Role |
|
|
158
159
|
|-------|-------|------|
|
|
159
|
-
| **lead** | Opus 4.
|
|
160
|
-
| **architect** | Opus 4.
|
|
161
|
-
| **debugger** | Opus 4.
|
|
162
|
-
| **coder** | Sonnet 4 | Implements features, fixes bugs, edits files. |
|
|
163
|
-
| **reviewer** | Sonnet 4 | Code quality review. Read-only. |
|
|
164
|
-
| **security-auditor** | Sonnet 4 | Security vulnerability analysis. Read-only. |
|
|
165
|
-
| **test-writer** | Sonnet 4 | Writes tests for any framework. |
|
|
166
|
-
| **test-runner** | Sonnet 4 | Diagnoses and fixes failing tests. |
|
|
167
|
-
| **system-auditor** | Sonnet 4 | Codebase health: duplication, N+1, coupling. Read-only. |
|
|
168
|
-
| **database-specialist** | Sonnet 4 | Schema design, indexes, query performance, migrations. Read-only. |
|
|
169
|
-
| **performance-profiler** | Sonnet 4 | Response times, memory, caching, bundle size. Read-only. |
|
|
170
|
-
| **devops** | Sonnet 4 | Docker, CI/CD, deployment configs. |
|
|
171
|
-
| **devil** | Sonnet 4 | Challenges plans to surface hidden risks. Read-only. |
|
|
172
|
-
| **integrations** | Sonnet 4 | Third-party integrations: OAuth, webhooks, payments. |
|
|
173
|
-
| **refactorer** | Sonnet 4 | Improves code structure without changing behavior. |
|
|
160
|
+
| **lead** | Opus 4.6 | Plans, delegates, reviews. Orchestrator. |
|
|
161
|
+
| **architect** | Opus 4.6 | System architecture, module boundaries, domain models. Read-only. |
|
|
162
|
+
| **debugger** | Opus 4.6 | Bug investigation: reproduces, isolates, identifies root cause. Read-only. |
|
|
163
|
+
| **coder** | Sonnet 4.6 | Implements features, fixes bugs, edits files. |
|
|
164
|
+
| **reviewer** | Sonnet 4.6 | Code quality review. Read-only. |
|
|
165
|
+
| **security-auditor** | Sonnet 4.6 | Security vulnerability analysis. Read-only. |
|
|
166
|
+
| **test-writer** | Sonnet 4.6 | Writes tests for any framework. |
|
|
167
|
+
| **test-runner** | Sonnet 4.6 | Diagnoses and fixes failing tests. |
|
|
168
|
+
| **system-auditor** | Sonnet 4.6 | Codebase health: duplication, N+1, coupling. Read-only. |
|
|
169
|
+
| **database-specialist** | Sonnet 4.6 | Schema design, indexes, query performance, migrations. Read-only. |
|
|
170
|
+
| **performance-profiler** | Sonnet 4.6 | Response times, memory, caching, bundle size. Read-only. |
|
|
171
|
+
| **devops** | Sonnet 4.6 | Docker, CI/CD, deployment configs. |
|
|
172
|
+
| **devil** | Sonnet 4.6 | Challenges plans to surface hidden risks. Read-only. |
|
|
173
|
+
| **integrations** | Sonnet 4.6 | Third-party integrations: OAuth, webhooks, payments. |
|
|
174
|
+
| **refactorer** | Sonnet 4.6 | Improves code structure without changing behavior. |
|
|
174
175
|
| **analyst** | Haiku 4.5 | Requirements analysis: surfaces missing or contradictory requirements. Read-only. |
|
|
175
176
|
| **api-reviewer** | Haiku 4.5 | API design, versioning, error handling, backward compatibility. Read-only. |
|
|
176
177
|
| **tech-writer** | Haiku 4.5 | Documentation: READMEs, API docs, changelogs. |
|
|
@@ -178,7 +179,7 @@ Specialized subagents with hierarchical model strategy: **Opus 4.7 decides, Sonn
|
|
|
178
179
|
|
|
179
180
|
## Architecture
|
|
180
181
|
|
|
181
|
-
agent-notes is a 4-layer engine (domain / registries / services / commands). All extensible content (CLIs, models, roles, agents, skills, rules) lives in `agent_notes/data/` as YAML — adding a new CLI/model/role is a YAML drop, no Python changes. See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md), [docs/ADD_CLI.md](docs/ADD_CLI.md), [docs/ADD_MODEL.md](docs/ADD_MODEL.md), [docs/ADD_ROLE.md](docs/ADD_ROLE.md).
|
|
182
|
+
agent-notes is a 4-layer engine (domain / registries / services / commands). All extensible content (CLIs, models, roles, agents, skills, rules) lives in `agent_notes/data/` as YAML — adding a new CLI/model/role is a YAML drop, no Python changes. Context is loaded in tiers: always-loaded (CLAUDE.md, rules, skill catalog), lazy-loaded (full skill content, agent prompts), and pull-based (memory notes). See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md), [docs/ADD_CLI.md](docs/ADD_CLI.md), [docs/ADD_MODEL.md](docs/ADD_MODEL.md), [docs/ADD_ROLE.md](docs/ADD_ROLE.md).
|
|
182
183
|
|
|
183
184
|
## Improved Claude Code workflows
|
|
184
185
|
|
|
@@ -204,6 +205,8 @@ Four failure modes that derail AI-assisted development, and the skills that addr
|
|
|
204
205
|
|
|
205
206
|
42 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/`.
|
|
206
207
|
|
|
208
|
+
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.
|
|
209
|
+
|
|
207
210
|
### Using skills in Claude Code / OpenCode
|
|
208
211
|
|
|
209
212
|
```
|
|
@@ -221,6 +224,7 @@ Agents accumulate knowledge across sessions using one of three backends, chosen
|
|
|
221
224
|
|---------|---------|----------|
|
|
222
225
|
| **Local** | `~/.claude/agent-memory/<agent>/` — plain markdown per agent | Simple setup, no extra tools |
|
|
223
226
|
| **Obsidian** | Category vault with YAML frontmatter and `[[wikilinks]]` | Visual browsing, backlinks, Dataview queries |
|
|
227
|
+
| **Wiki** | `~/Documents/Obsidian Vault/agent-wiki/` — structured wiki with categories | Team knowledge bases, shared context |
|
|
224
228
|
| **None** | Disabled — no files written | Stateless or shared machines |
|
|
225
229
|
|
|
226
230
|
### Obsidian setup
|
|
@@ -268,7 +272,7 @@ Always use `_prefix: true` with Rails enums to avoid method name collisions.
|
|
|
268
272
|
|
|
269
273
|
## Development
|
|
270
274
|
|
|
271
|
-
Python 3.
|
|
275
|
+
Python 3.10+ required. Build from source and run tests:
|
|
272
276
|
|
|
273
277
|
```bash
|
|
274
278
|
python -m build && pipx install dist/*.whl
|
{agent_notes-2.16.0 → agent_notes-2.17.0}/tests/functional/commands/test_uninstall_command.py
RENAMED
|
@@ -201,3 +201,134 @@ class TestUninstallIdempotent:
|
|
|
201
201
|
|
|
202
202
|
do_uninstall()
|
|
203
203
|
do_uninstall() # must not raise
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
# ── Regression: local scope does not raise ValueError ─────────────────────────
|
|
207
|
+
|
|
208
|
+
class TestUninstallLocalScopeDoesNotCrash:
|
|
209
|
+
"""Regression for: uninstall_all("local") raised ValueError because get_scope
|
|
210
|
+
was called without project_path when scope == "local"."""
|
|
211
|
+
|
|
212
|
+
def test_uninstall_all_local_does_not_raise_value_error(self, tmp_path, monkeypatch):
|
|
213
|
+
"""uninstall_all('local') must not raise ValueError even when state exists."""
|
|
214
|
+
project_dir = tmp_path / "myproject"
|
|
215
|
+
project_dir.mkdir()
|
|
216
|
+
|
|
217
|
+
backend_home = tmp_path / "claude_home"
|
|
218
|
+
registry = CLIRegistry([_make_backend("claude", backend_home)])
|
|
219
|
+
|
|
220
|
+
xdg = tmp_path / "config"
|
|
221
|
+
xdg.mkdir()
|
|
222
|
+
monkeypatch.setenv("XDG_CONFIG_HOME", str(xdg))
|
|
223
|
+
_write_minimal_state(
|
|
224
|
+
xdg / "agent-notes" / "state.json",
|
|
225
|
+
scope="local",
|
|
226
|
+
project_path=str(project_dir.resolve()),
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
# Simulate cwd being the local project so get_scope can resolve the path
|
|
230
|
+
monkeypatch.chdir(project_dir)
|
|
231
|
+
|
|
232
|
+
from agent_notes.services.installer import uninstall_all
|
|
233
|
+
|
|
234
|
+
# Must not raise ValueError("project_path required for local scope")
|
|
235
|
+
with patch("agent_notes.services.installer.load_registry", return_value=registry), \
|
|
236
|
+
patch("agent_notes.services.installer._uninstall_session_hook"):
|
|
237
|
+
uninstall_all("local", registry=registry)
|
|
238
|
+
|
|
239
|
+
def test_uninstall_command_local_flag_does_not_raise_value_error(self, tmp_path, monkeypatch):
|
|
240
|
+
"""The uninstall command's --local path must not raise ValueError."""
|
|
241
|
+
project_dir = tmp_path / "myproject"
|
|
242
|
+
project_dir.mkdir()
|
|
243
|
+
|
|
244
|
+
backend_home = tmp_path / "claude_home"
|
|
245
|
+
registry = CLIRegistry([_make_backend("claude", backend_home)])
|
|
246
|
+
|
|
247
|
+
xdg = tmp_path / "config"
|
|
248
|
+
xdg.mkdir()
|
|
249
|
+
monkeypatch.setenv("XDG_CONFIG_HOME", str(xdg))
|
|
250
|
+
_write_minimal_state(
|
|
251
|
+
xdg / "agent-notes" / "state.json",
|
|
252
|
+
scope="local",
|
|
253
|
+
project_path=str(project_dir.resolve()),
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
monkeypatch.chdir(project_dir)
|
|
257
|
+
|
|
258
|
+
with patch("agent_notes.services.installer.load_registry", return_value=registry), \
|
|
259
|
+
patch("agent_notes.services.installer._uninstall_session_hook"), \
|
|
260
|
+
patch("agent_notes.install_state.remove_install_state"):
|
|
261
|
+
from agent_notes.commands.uninstall import uninstall
|
|
262
|
+
uninstall(local=True) # must not raise
|
|
263
|
+
|
|
264
|
+
def test_uninstall_all_local_with_no_state_does_not_raise(self, tmp_path, monkeypatch):
|
|
265
|
+
"""When there is no state.json, uninstall_all('local') should still not raise."""
|
|
266
|
+
project_dir = tmp_path / "myproject"
|
|
267
|
+
project_dir.mkdir()
|
|
268
|
+
|
|
269
|
+
backend_home = tmp_path / "claude_home"
|
|
270
|
+
registry = CLIRegistry([_make_backend("claude", backend_home)])
|
|
271
|
+
|
|
272
|
+
xdg = tmp_path / "config"
|
|
273
|
+
xdg.mkdir()
|
|
274
|
+
monkeypatch.setenv("XDG_CONFIG_HOME", str(xdg))
|
|
275
|
+
# Deliberately no state.json written
|
|
276
|
+
|
|
277
|
+
monkeypatch.chdir(project_dir)
|
|
278
|
+
|
|
279
|
+
from agent_notes.services.installer import uninstall_all
|
|
280
|
+
|
|
281
|
+
with patch("agent_notes.services.installer.load_registry", return_value=registry), \
|
|
282
|
+
patch("agent_notes.services.installer._uninstall_session_hook"):
|
|
283
|
+
uninstall_all("local", registry=registry) # must not raise
|
|
284
|
+
|
|
285
|
+
def test_uninstall_all_local_reads_copy_mode_from_state(self, tmp_path, monkeypatch):
|
|
286
|
+
"""When local state records mode='copy', uninstall_all resolves copy_mode correctly
|
|
287
|
+
without raising ValueError. The regression test is that get_scope is called with
|
|
288
|
+
project_path so it does not crash."""
|
|
289
|
+
project_dir = tmp_path / "myproject"
|
|
290
|
+
project_dir.mkdir()
|
|
291
|
+
|
|
292
|
+
backend_home = tmp_path / "claude_home"
|
|
293
|
+
registry = CLIRegistry([_make_backend("claude", backend_home)])
|
|
294
|
+
|
|
295
|
+
xdg = tmp_path / "config"
|
|
296
|
+
xdg.mkdir()
|
|
297
|
+
monkeypatch.setenv("XDG_CONFIG_HOME", str(xdg))
|
|
298
|
+
|
|
299
|
+
# Write local state with mode=copy
|
|
300
|
+
sf = xdg / "agent-notes" / "state.json"
|
|
301
|
+
scope_dict = {
|
|
302
|
+
"installed_at": "2025-01-01T00:00:00Z",
|
|
303
|
+
"updated_at": "2025-01-01T00:00:00Z",
|
|
304
|
+
"mode": "copy",
|
|
305
|
+
"clis": {"claude": {"role_models": {}, "installed": {}}},
|
|
306
|
+
}
|
|
307
|
+
data = {
|
|
308
|
+
"source_path": "",
|
|
309
|
+
"source_commit": "",
|
|
310
|
+
"global": None,
|
|
311
|
+
"local": {str(project_dir.resolve()): scope_dict},
|
|
312
|
+
"memory": {"backend": "local", "path": ""},
|
|
313
|
+
}
|
|
314
|
+
sf.parent.mkdir(parents=True, exist_ok=True)
|
|
315
|
+
sf.write_text(__import__("json").dumps(data))
|
|
316
|
+
|
|
317
|
+
monkeypatch.chdir(project_dir)
|
|
318
|
+
|
|
319
|
+
from agent_notes.services.installer import uninstall_all
|
|
320
|
+
|
|
321
|
+
# Track whether uninstall_component_for_backend is called with copy_mode=True,
|
|
322
|
+
# confirming the copy_mode was correctly resolved from local state.
|
|
323
|
+
called_with_copy_mode = []
|
|
324
|
+
|
|
325
|
+
def record_copy_mode(backend, component, scope, copy_mode=False):
|
|
326
|
+
called_with_copy_mode.append(copy_mode)
|
|
327
|
+
|
|
328
|
+
with patch("agent_notes.services.installer.load_registry", return_value=registry), \
|
|
329
|
+
patch("agent_notes.services.installer._uninstall_session_hook"), \
|
|
330
|
+
patch("agent_notes.services.installer.uninstall_component_for_backend", side_effect=record_copy_mode):
|
|
331
|
+
# Must not raise ValueError("project_path required for local scope")
|
|
332
|
+
uninstall_all("local", registry=registry)
|
|
333
|
+
|
|
334
|
+
assert any(called_with_copy_mode), "copy_mode should have been resolved as True from local state"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
2.16.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|