agent-notes 2.26.0__tar.gz → 2.28.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.26.0 → agent_notes-2.28.0}/PKG-INFO +2 -1
- agent_notes-2.28.0/agent_notes/VERSION +1 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/doctor.py +41 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/memory/reset.py +2 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/validate.py +1 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/wizard/execute.py +13 -11
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/agents.yaml +1 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/coder.md +1 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/refactorer.md +1 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/reviewer.md +1 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/shared/cost_reporting.md +4 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/shared/execution.md +1 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/shared/guardrails.md +2 -4
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/shared/hard_limits.md +0 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/test-writer.md +1 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/cli/claude.yaml +5 -0
- agent_notes-2.28.0/agent_notes/data/cli/codex.yaml +29 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/cli/opencode.yaml +5 -0
- agent_notes-2.28.0/agent_notes/data/global-codex.md +40 -0
- agent_notes-2.28.0/agent_notes/data/models/gpt-5-4-mini.yaml +14 -0
- agent_notes-2.28.0/agent_notes/data/models/gpt-5-4.yaml +14 -0
- agent_notes-2.28.0/agent_notes/data/models/gpt-5-5.yaml +14 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/code-review/SKILL.md +10 -2
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/debugging-protocol/SKILL.md +2 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/improve-codebase-architecture/SKILL.md +1 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/migrate-memory/SKILL.md +1 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/refactoring-protocol/SKILL.md +2 -1
- agent_notes-2.28.0/agent_notes/data/skills/rsi/SKILL.md +61 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/tdd/SKILL.md +2 -1
- agent_notes-2.28.0/agent_notes/data/templates/__pycache__/__init__.cpython-312.pyc +0 -0
- agent_notes-2.28.0/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-312.pyc +0 -0
- agent_notes-2.28.0/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-312.pyc +0 -0
- agent_notes-2.28.0/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-312.pyc +0 -0
- agent_notes-2.28.0/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-314.pyc +0 -0
- agent_notes-2.28.0/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-312.pyc +0 -0
- agent_notes-2.28.0/agent_notes/data/templates/frontmatter/codex.py +106 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/domain/cli_backend.py +1 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/registries/agent_registry.py +3 -3
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/registries/cli_registry.py +2 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/registries/skill_registry.py +2 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/scripts/_opencode_backend.py +3 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/credentials.py +14 -16
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/diagnostics/_fix.py +23 -21
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/fs.py +17 -4
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/installer.py +131 -104
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/rendering.py +196 -114
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/state_store.py +2 -3
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/validation.py +1 -5
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/wiki/_wiki_utils.py +4 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes.egg-info/PKG-INFO +2 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes.egg-info/SOURCES.txt +24 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes.egg-info/requires.txt +1 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/pyproject.toml +1 -1
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/commands/test_doctor_command.py +162 -0
- agent_notes-2.28.0/tests/functional/commands/test_validate_path_filter.py +100 -0
- agent_notes-2.28.0/tests/plugins/codex/test_agents.py +138 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/plugins/test_skills.py +15 -0
- agent_notes-2.28.0/tests/unit/registries/test_cli_registry.py +184 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/registries/test_registries.py +30 -0
- agent_notes-2.28.0/tests/unit/scripts/test_opencode_backend_connection.py +118 -0
- agent_notes-2.28.0/tests/unit/services/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_credentials.py +74 -0
- agent_notes-2.28.0/tests/unit/services/test_installer_codex.py +460 -0
- agent_notes-2.28.0/tests/unit/services/test_installer_hook_quoting.py +85 -0
- agent_notes-2.28.0/tests/unit/services/test_rendering_includes.py +212 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_validation.py +9 -3
- agent_notes-2.28.0/tests/unit/services/test_wiki_atomic_write.py +73 -0
- agent_notes-2.28.0/tests/unit/templates/__init__.py +0 -0
- agent_notes-2.28.0/tests/unit/templates/test_codex_frontmatter.py +383 -0
- agent_notes-2.26.0/agent_notes/VERSION +0 -1
- agent_notes-2.26.0/tests/unit/services/test_rendering_includes.py +0 -88
- {agent_notes-2.26.0 → agent_notes-2.28.0}/LICENSE +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/README.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/__main__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/cli.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/_install_helpers.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/build.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/config.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/hook.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/info.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/install.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/list.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/memory/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/memory/_common.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/memory/migrate.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/memory/notes.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/memory/transfer.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/memory/vault.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/memory/wiki.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/regenerate.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/set_role.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/uninstall.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/wizard/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/wizard/_common.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/wizard/cost_report.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/commands/wizard/orchestrator.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/config.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/constants.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/analyst.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/api-reviewer.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/architect.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/database-specialist.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/debugger.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/devil.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/devops.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/explorer.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/integrations.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/lead.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/performance-profiler.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/security-auditor.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/shared/phase0.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/shared/pipelines.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/shared/review.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/shared/verification.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/shared/wiki_compile.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/system-auditor.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/tech-writer.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/test-runner.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/agents/wiki-compiler.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/cli/copilot.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/commands/brainstorm.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/commands/debug.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/commands/review.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/global-claude.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/global-copilot.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/global-opencode.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/hooks/session-context.md.tpl +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/models/claude-haiku-4-5.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/models/claude-opus-4-1.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/models/claude-opus-4-5.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/models/claude-opus-4-6.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/models/claude-opus-4-7.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/models/claude-opus-4-8.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/models/claude-sonnet-4-5.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/models/claude-sonnet-4-6.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/models/claude-sonnet-4.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/plugin/claude.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/plugin/opencode-index.js.template +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/plugin/opencode.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/pricing.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/roles/orchestrator.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/roles/reasoner.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/roles/scout.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/roles/worker.yaml +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/rules/code-quality.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/rules/safety.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/brainstorming/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/caveman/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/docker/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/docker/compose.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/docker/dockerfile.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/git/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/grill-me/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/grill-with-docs/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/handoff/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/ingest/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/obsidian-memory/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/prototype/LOGIC.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/prototype/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/prototype/UI.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/rails/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/rails/controllers.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/rails/frontend.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/rails/infra.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/rails/models.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/rails/testing.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/rails/views.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/setup-project-context/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/to-issues/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/to-prd/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/write-a-skill/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/zoom-out/SKILL.md +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/templates/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/templates/__pycache__/__init__.cpython-314.pyc +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/templates/frontmatter/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-314.pyc +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/templates/frontmatter/claude.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/templates/frontmatter/opencode.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/doctor_checks.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/domain/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/domain/agent.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/domain/diagnostics.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/domain/diff.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/domain/model.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/domain/role.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/domain/rule.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/domain/skill.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/domain/state.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/registries/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/registries/_base.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/registries/model_registry.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/registries/role_registry.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/registries/rule_registry.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/scripts/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/scripts/_claude_backend.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/scripts/_formatting.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/scripts/_pricing.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/scripts/cost_report.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/_memory_utils.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/counts.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/diagnostics/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/diagnostics/_checks.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/diagnostics/_display.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/diff.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/install_state_builder.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/local_backend.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/memory_router.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/migrations/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/obsidian_backend.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/session_context.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/settings_writer.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/ui.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/user_config.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/wiki/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/wiki/wiki_index.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/wiki/wiki_ingest.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/wiki/wiki_lint.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/wiki/wiki_query.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/wiki/wiki_storage.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/services/wiki_backend.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes.egg-info/dependency_links.txt +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes.egg-info/entry_points.txt +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes.egg-info/top_level.txt +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/setup.cfg +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/conftest.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/commands/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/commands/test_config_command.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/commands/test_info_command.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/commands/test_install_command.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/commands/test_list_command.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/commands/test_regenerate_command.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/commands/test_uninstall_command.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/commands/test_validate_command.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/memory/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/memory/test_memory_add_local_backend.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/memory/test_memory_command.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/scripts/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/functional/scripts/test_release_script.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/integration/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/integration/build_output/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/integration/build_output/test_build_output.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/integration/install/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/integration/install/test_install_methods.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/integration/plugin_builders/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/integration/plugin_builders/test_plugin_builders.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/plugins/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/plugins/claude/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/plugins/claude/test_agents.py +0 -0
- {agent_notes-2.26.0/tests/unit → agent_notes-2.28.0/tests/plugins/codex}/__init__.py +0 -0
- {agent_notes-2.26.0/tests/unit/commands → agent_notes-2.28.0/tests/unit}/__init__.py +0 -0
- {agent_notes-2.26.0/tests/unit/registries → agent_notes-2.28.0/tests/unit/commands}/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/commands/test_cost_report_subcommand.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/commands/test_count_agents.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/commands/test_info.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/commands/test_memory_add_description.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/commands/test_memory_imports.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/commands/test_memory_migrate.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/commands/test_wizard_imports.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/commands/test_wizard_orchestrator_skip.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/commands/test_wizard_preflight.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/commands/test_wizard_steps.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/commands/wizard/test_cost_report_step.py +0 -0
- {agent_notes-2.26.0/tests/unit/scripts → agent_notes-2.28.0/tests/unit/registries}/__init__.py +0 -0
- {agent_notes-2.26.0/tests/unit/services → agent_notes-2.28.0/tests/unit/scripts}/__init__.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/scripts/test_cost_report.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/scripts/test_cost_report_scoping.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/scripts/test_formatting_tty.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/scripts/test_opencode_backend_pricing.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/scripts/test_time_aggregation.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_build_functions.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_credential_filter.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_fs.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_installer_hooks.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_installer_plan.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_local_backend.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_memory_backend.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_memory_backend_io.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_memory_router.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_session_context.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_settings_writer.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_skill_filtering.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_state_store.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_user_config_cost_report.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_wiki_backend.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/services/test_wiki_imports.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.0}/tests/unit/test_import_health.py +0 -0
- {agent_notes-2.26.0 → agent_notes-2.28.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.28.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
|
|
@@ -24,6 +24,7 @@ Description-Content-Type: text/markdown
|
|
|
24
24
|
License-File: LICENSE
|
|
25
25
|
Requires-Dist: pyyaml>=6.0
|
|
26
26
|
Requires-Dist: tomli>=1.1.0; python_version < "3.11"
|
|
27
|
+
Requires-Dist: tomli-w>=1.0.0
|
|
27
28
|
Provides-Extra: dev
|
|
28
29
|
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
29
30
|
Dynamic: license-file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.28.0
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
|
|
5
|
+
from ..registries.skill_registry import load_skill_registry
|
|
6
|
+
|
|
5
7
|
# Re-export for backward compatibility. New code should import from agent_notes.domain.
|
|
6
8
|
from ..domain.diagnostics import Issue, FixAction # noqa: F401
|
|
7
9
|
|
|
@@ -42,6 +44,42 @@ from ..services.fs import (
|
|
|
42
44
|
files_differ
|
|
43
45
|
)
|
|
44
46
|
|
|
47
|
+
# Canonical group vocabulary for skill frontmatter.
|
|
48
|
+
# "process" and "domain" come from the base skills in data/skills/.
|
|
49
|
+
# "rails", "docker", and "kamal" come from the sub-skills that are generated
|
|
50
|
+
# during the release/packaging step and land in data/skills/ of the built
|
|
51
|
+
# package (e.g. rails-models → group: rails, rails-kamal → group: kamal,
|
|
52
|
+
# docker-compose → group: docker). There is no single source-of-truth
|
|
53
|
+
# constant elsewhere in the codebase, so the full vocabulary is listed here.
|
|
54
|
+
_VALID_GROUPS = {"process", "domain", "rails", "docker", "kamal"}
|
|
55
|
+
_VALID_MEMORY_BACKENDS = {"obsidian", "wiki", "local", "none"}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def check_skill_frontmatter(scope: str, issues: list, fix_actions: list, profile_label: str = "") -> None:
|
|
59
|
+
"""Warn (non-fatal) about skill frontmatter violations.
|
|
60
|
+
|
|
61
|
+
Checks every skill for:
|
|
62
|
+
- non-empty name and description
|
|
63
|
+
- group, if present, is in {"process", "domain"}
|
|
64
|
+
- requires_memory tokens, if present, are each in {"obsidian", "wiki", "local", "none"}
|
|
65
|
+
|
|
66
|
+
Violations are printed as advisories and do NOT affect issues/fix_actions or exit code.
|
|
67
|
+
"""
|
|
68
|
+
registry = load_skill_registry()
|
|
69
|
+
for skill in registry.all():
|
|
70
|
+
if not skill.name:
|
|
71
|
+
print(f" [skill-frontmatter] {skill.path.name}: 'name' is empty")
|
|
72
|
+
if not skill.description:
|
|
73
|
+
print(f" [skill-frontmatter] {skill.path.name}: 'description' is empty")
|
|
74
|
+
if skill.group and skill.group not in _VALID_GROUPS:
|
|
75
|
+
print(f" [skill-frontmatter] {skill.name}: 'group' value '{skill.group}' is not in {sorted(_VALID_GROUPS)}")
|
|
76
|
+
if skill.requires_memory:
|
|
77
|
+
for token in skill.requires_memory.split(","):
|
|
78
|
+
token = token.strip()
|
|
79
|
+
if token and token not in _VALID_MEMORY_BACKENDS:
|
|
80
|
+
print(f" [skill-frontmatter] {skill.name}: 'requires_memory' token '{token}' is not in {sorted(_VALID_MEMORY_BACKENDS)}")
|
|
81
|
+
|
|
82
|
+
|
|
45
83
|
def _check_session_hook(scope: str, issues: list) -> None:
|
|
46
84
|
"""Check that the Claude Code SessionStart hook is registered in settings.json."""
|
|
47
85
|
from ..services.settings_writer import has_hook
|
|
@@ -162,6 +200,9 @@ def diagnose(scope: str, fix: bool = False) -> bool:
|
|
|
162
200
|
# SessionStart hook check (Claude Code only)
|
|
163
201
|
_check_session_hook(scope, issues)
|
|
164
202
|
|
|
203
|
+
# Skill frontmatter advisory check (warn-only, non-fatal)
|
|
204
|
+
check_skill_frontmatter(scope, issues, fix_actions)
|
|
205
|
+
|
|
165
206
|
# Print role→model assignments
|
|
166
207
|
state = load_current_state()
|
|
167
208
|
if state is not None:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""Destructive subcommand: reset."""
|
|
2
2
|
|
|
3
|
+
import sys
|
|
3
4
|
import shutil
|
|
4
5
|
from typing import Optional
|
|
5
6
|
|
|
@@ -54,7 +55,7 @@ def do_reset(name: Optional[str] = None) -> None:
|
|
|
54
55
|
agent_dir = path / name
|
|
55
56
|
if not agent_dir.exists():
|
|
56
57
|
print(f"No memory found for agent '{name}'")
|
|
57
|
-
exit(1)
|
|
58
|
+
sys.exit(1)
|
|
58
59
|
|
|
59
60
|
print(f"{Color.YELLOW}This will delete all memory for agent '{name}'.{Color.NC}")
|
|
60
61
|
confirm = input("Continue? [y/N] ")
|
|
@@ -163,7 +163,7 @@ def validate() -> None:
|
|
|
163
163
|
codeblock_ok = True
|
|
164
164
|
for md_file in ROOT.rglob("*.md"):
|
|
165
165
|
# Skip .git and node_modules
|
|
166
|
-
if ".git"
|
|
166
|
+
if any(part in {".git", "node_modules"} for part in md_file.parts):
|
|
167
167
|
continue
|
|
168
168
|
|
|
169
169
|
if not check_unclosed_code_blocks(md_file):
|
|
@@ -28,7 +28,7 @@ def install_agents_filtered(clis: Set[str], scope: str, copy_mode: bool = False,
|
|
|
28
28
|
folder_overrides: dict = None, global_home_override: str = "") -> None:
|
|
29
29
|
"""Install agents for selected CLIs (filtered by the wizard)."""
|
|
30
30
|
from ...services import installer
|
|
31
|
-
from ...services.installer import _apply_overrides
|
|
31
|
+
from ...services.installer import _apply_overrides, _agent_glob
|
|
32
32
|
from ...registries.cli_registry import load_registry
|
|
33
33
|
|
|
34
34
|
registry = load_registry()
|
|
@@ -43,11 +43,12 @@ def install_agents_filtered(clis: Set[str], scope: str, copy_mode: bool = False,
|
|
|
43
43
|
if dst is None:
|
|
44
44
|
continue
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
glob = _agent_glob(effective)
|
|
47
|
+
files = list(src.glob(glob))
|
|
47
48
|
if not files:
|
|
48
49
|
continue
|
|
49
50
|
|
|
50
|
-
place_dir_contents(src, dst,
|
|
51
|
+
place_dir_contents(src, dst, glob, copy_mode)
|
|
51
52
|
|
|
52
53
|
|
|
53
54
|
def install_config_filtered(clis: Set[str], scope: str, copy_mode: bool = False,
|
|
@@ -161,15 +162,16 @@ def _execute_install(
|
|
|
161
162
|
if _cmd_names:
|
|
162
163
|
print(f" {Color.GREEN}✓{Color.NC} Commands {', '.join(sorted(_cmd_names))}")
|
|
163
164
|
|
|
164
|
-
# SessionStart
|
|
165
|
+
# SessionStart hooks — for every backend with features.session_hook == true
|
|
165
166
|
from ...services.installer import _install_session_hook
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
167
|
+
for _hook_backend in _registry.with_feature("session_hook"):
|
|
168
|
+
if _hook_backend.name not in clis:
|
|
169
|
+
continue
|
|
170
|
+
try:
|
|
171
|
+
_hook_eff = _apply_overrides(_hook_backend, folder_overrides, global_home_override or None)
|
|
172
|
+
_install_session_hook(_hook_eff, scope, memory_backend=memory_backend, memory_path=memory_path or "")
|
|
173
|
+
except Exception:
|
|
174
|
+
pass
|
|
173
175
|
|
|
174
176
|
_fs.silent_file_ops = False
|
|
175
177
|
|
|
@@ -9,6 +9,7 @@ agents:
|
|
|
9
9
|
color: purple
|
|
10
10
|
effort: high
|
|
11
11
|
claude_exclude: true
|
|
12
|
+
codex_exclude: true
|
|
12
13
|
claude:
|
|
13
14
|
tools: "Agent(coder, reviewer, security-auditor, test-writer, test-runner, system-auditor, database-specialist, performance-profiler, api-reviewer, tech-writer, devops, explorer), Read, Grep, Glob, Bash"
|
|
14
15
|
memory: user
|
|
@@ -15,6 +15,7 @@ You are an implementation specialist. You write, edit, and fix code.
|
|
|
15
15
|
- No new abstractions, helpers, or utilities for one-time operations.
|
|
16
16
|
- No comments or docs on code you didn't change.
|
|
17
17
|
- Validate at system boundaries (user input, external APIs). Trust internal code.
|
|
18
|
+
- Make tests pass by fixing the root cause, NEVER by gaming them — do not hardcode expected values, weaken or delete assertions, special-case the test's inputs, or overload equality to fake a pass. If a test appears wrong or the spec seems contradictory, surface it rather than bypassing it.
|
|
18
19
|
|
|
19
20
|
## Reporting
|
|
20
21
|
|
|
@@ -28,6 +28,7 @@ Golden rule: behavior must not change. If tests pass before, they must pass afte
|
|
|
28
28
|
- Do NOT introduce new dependencies
|
|
29
29
|
- Keep commits atomic — one refactoring per commit
|
|
30
30
|
- If tests don't exist, create them before refactoring
|
|
31
|
+
- Never make the suite green by weakening, skipping, or deleting tests — if a test breaks under a refactor, the refactor changed behavior; fix the refactor, not the test.
|
|
31
32
|
|
|
32
33
|
## Red-Green-Refactor
|
|
33
34
|
|
|
@@ -34,6 +34,7 @@ You are a code reviewer. You analyze code and provide actionable feedback.
|
|
|
34
34
|
- Do not flag pre-existing issues outside the changed code.
|
|
35
35
|
- Include specific file:line references for every finding.
|
|
36
36
|
- Commit to a severity before writing the bullet. If you find yourself retracting a finding within the same entry ("actually this is not an issue…"), either downgrade it to a lower severity before posting, or drop it entirely. A bullet that flags-and-retracts is worse than no bullet — it wastes downstream attention. If uncertain whether something is a real issue, use Suggestion and state the uncertainty in plain terms, rather than marking Critical and walking it back.
|
|
37
|
+
- **Bugfix-plus-test check.** When reviewing a bugfix accompanied by a test: verify the test would FAIL without the fix (it must genuinely falsify the bug). Flag tests that pass trivially or whose assertions cannot fail. Flag "fixes" that game tests — hardcoded expected values, weakened or deleted assertions, special-cased test inputs, or overloading equality to fake a pass — instead of fixing root cause. Flag silent behavior changes disguised as refactors.
|
|
37
38
|
|
|
38
39
|
## Reporting
|
|
39
40
|
|
|
@@ -11,3 +11,7 @@ Render every column the `agent-notes cost-report` CLI emits — `agent(model)`,
|
|
|
11
11
|
`Cost report skipped: <one-line reason>`
|
|
12
12
|
|
|
13
13
|
If the command ran but produced an error message, print the error verbatim under the heading instead of a table. Fabricating a table when the CLI did not run is a violation.
|
|
14
|
+
|
|
15
|
+
Cost table: once at end of response, never mid-response.
|
|
16
|
+
|
|
17
|
+
Always include the cost report at the end of every response.
|
|
@@ -86,7 +86,7 @@ Never spawn one agent per bullet point from the user's prompt. Combine related s
|
|
|
86
86
|
|
|
87
87
|
Skip agents for: simple questions (answer directly), single-file edits (coder alone), or two-grep lookups (do it yourself).
|
|
88
88
|
|
|
89
|
-
Give each agent a specific task with all context (paths, criteria).
|
|
89
|
+
Give each agent a specific task with all context (paths, criteria).
|
|
90
90
|
|
|
91
91
|
### Permission pre-check (HARD RULE)
|
|
92
92
|
|
|
@@ -9,10 +9,8 @@
|
|
|
9
9
|
7. "Let me just verify this one thing" followed by 10 reads → if verification needs 10 reads, dispatch.
|
|
10
10
|
8. Breaking tasks into steps so small they have no independent value → group into meaningful chunks.
|
|
11
11
|
9. Writing a plan that only restates the user's words → a plan must include discovery findings, dependency order, and flagged risks.
|
|
12
|
-
10.
|
|
13
|
-
11.
|
|
14
|
-
12. Reporting "done" before tests pass and plan items match → forbidden by Done Gate.
|
|
15
|
-
13. Reporting "done" / "complete" / "shipped" without an `agent-notes memory add ... session lead` call covering this work → forbidden by the Done Gate.
|
|
12
|
+
10. Reporting "done" before tests pass and plan items match → forbidden by Done Gate.
|
|
13
|
+
11. Reporting "done" / "complete" / "shipped" without an `agent-notes memory add ... session lead` call covering this work → forbidden by the Done Gate.
|
|
16
14
|
|
|
17
15
|
## Done Gate (HARD RULE)
|
|
18
16
|
|
|
@@ -25,4 +25,3 @@ Exception: trivial requests (factual questions, conversational replies, single-l
|
|
|
25
25
|
- Plans: structured bullet lists with file paths. No prose paragraphs.
|
|
26
26
|
- Agent briefings: context + task + acceptance criteria. No commentary or justification.
|
|
27
27
|
- Never narrate internal deliberation — report outcomes only.
|
|
28
|
-
- Cost table: once at end of response, never mid-response.
|
|
@@ -26,6 +26,7 @@ You are a test writer. You create comprehensive, meaningful tests.
|
|
|
26
26
|
- Never use Float for monetary values.
|
|
27
27
|
- When asserting on error messages or structured output, match SEMANTIC CONTENT, not exact wording. Use substring checks, regex, or category matchers — never full-string equality. Example: to verify a validation error about a missing `description` field, assert that the error text contains `"description"` and indicates absence (e.g. "missing", "required", "empty"), NOT that it equals `"description: missing"`.
|
|
28
28
|
- If the task gives you example error strings from a spec, treat them as ILLUSTRATIVE — the implementer is free to phrase equivalent messages differently. Your tests must pass against any reasonable phrasing that conveys the same meaning.
|
|
29
|
+
- **Fail-first discipline.** A regression or characterization test MUST be demonstrated to FAIL against the current (unfixed) code, for the right reason, before it is considered to cover a bug. Never write tautological/always-green tests or assertions that cannot fail (e.g. asserting on a mock you fully control, or on a value you just hardcoded). The test's job is to falsify the bug — if it passes on the broken code, it is worthless.
|
|
29
30
|
|
|
30
31
|
## Reporting
|
|
31
32
|
|
|
@@ -10,6 +10,7 @@ layout:
|
|
|
10
10
|
config: CLAUDE.md
|
|
11
11
|
memory: agent-memory/
|
|
12
12
|
settings: settings.json
|
|
13
|
+
agent_extension: md
|
|
13
14
|
features:
|
|
14
15
|
agents: true
|
|
15
16
|
skills: true
|
|
@@ -20,7 +21,11 @@ features:
|
|
|
20
21
|
config_style: inline
|
|
21
22
|
settings_template: false
|
|
22
23
|
supports_symlink: true
|
|
24
|
+
session_hook: true
|
|
25
|
+
stop_hook: true
|
|
26
|
+
allow_entries: true
|
|
23
27
|
global_template: global-claude.md
|
|
24
28
|
exclude_flag: claude_exclude
|
|
25
29
|
accepted_providers: [anthropic, bedrock, vertex]
|
|
26
30
|
use_model_class: true
|
|
31
|
+
preferred_family: claude
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: codex
|
|
2
|
+
label: Codex CLI
|
|
3
|
+
global_home: ~/.codex
|
|
4
|
+
local_dir: .codex
|
|
5
|
+
layout:
|
|
6
|
+
agents: agents/
|
|
7
|
+
skills: skills/
|
|
8
|
+
config: AGENTS.md
|
|
9
|
+
hooks: hooks.json
|
|
10
|
+
agent_extension: toml
|
|
11
|
+
features:
|
|
12
|
+
agents: true
|
|
13
|
+
skills: true
|
|
14
|
+
rules: false
|
|
15
|
+
commands: false
|
|
16
|
+
memory: false
|
|
17
|
+
frontmatter: codex
|
|
18
|
+
config_style: inline
|
|
19
|
+
settings_template: false
|
|
20
|
+
supports_symlink: true
|
|
21
|
+
session_hook: true
|
|
22
|
+
stop_hook: false
|
|
23
|
+
allow_entries: false
|
|
24
|
+
global_template: global-codex.md
|
|
25
|
+
exclude_flag: codex_exclude
|
|
26
|
+
strip_memory_section: true
|
|
27
|
+
accepted_providers: [openai]
|
|
28
|
+
use_model_class: false
|
|
29
|
+
preferred_family: gpt
|
|
@@ -6,6 +6,7 @@ layout:
|
|
|
6
6
|
agents: agents/
|
|
7
7
|
skills: skills/
|
|
8
8
|
config: AGENTS.md
|
|
9
|
+
agent_extension: md
|
|
9
10
|
features:
|
|
10
11
|
agents: true
|
|
11
12
|
skills: true
|
|
@@ -16,7 +17,11 @@ features:
|
|
|
16
17
|
config_style: inline
|
|
17
18
|
settings_template: false
|
|
18
19
|
supports_symlink: true
|
|
20
|
+
session_hook: false
|
|
21
|
+
stop_hook: false
|
|
22
|
+
allow_entries: false
|
|
19
23
|
global_template: global-opencode.md
|
|
20
24
|
exclude_flag: opencode_exclude
|
|
21
25
|
strip_memory_section: true
|
|
22
26
|
accepted_providers: [github-copilot, anthropic, openrouter, openai, google, moonshot]
|
|
27
|
+
preferred_family: claude
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Global Instructions
|
|
2
|
+
|
|
3
|
+
## Coding philosophy
|
|
4
|
+
|
|
5
|
+
- Read existing code before writing new code. Match project patterns.
|
|
6
|
+
- Minimal changes: only what was requested. Do not refactor beyond scope.
|
|
7
|
+
- Fix root causes, not symptoms.
|
|
8
|
+
- One approach, commit to it. Course-correct only on new evidence.
|
|
9
|
+
|
|
10
|
+
## Behavior
|
|
11
|
+
|
|
12
|
+
- Investigate before answering. Never speculate about code you haven't read.
|
|
13
|
+
- No over-engineering: no extra features, abstractions, or configs beyond scope.
|
|
14
|
+
- No comments or docs on code you didn't change.
|
|
15
|
+
- When the task is unclear, ask one clarifying question instead of guessing.
|
|
16
|
+
|
|
17
|
+
## Safety
|
|
18
|
+
|
|
19
|
+
- Confirm before: `git push --force`, `rm -rf`, `DROP TABLE`, branch deletion.
|
|
20
|
+
- Never commit: `.env`, `*.pem`, credentials, API keys, secrets.
|
|
21
|
+
- Never bypass: `--no-verify`, `--force` without explicit user request.
|
|
22
|
+
- Never force-push to main/master.
|
|
23
|
+
|
|
24
|
+
## Commits
|
|
25
|
+
|
|
26
|
+
- Load the `git` skill when asked to commit and follow its workflow.
|
|
27
|
+
- Analyze all changes, group into logical chunks, make small focused commits.
|
|
28
|
+
- Format: `#<ticket> type(scope): short description` — title only, no body.
|
|
29
|
+
- Extract ticket number from branch name when available.
|
|
30
|
+
- Types: feat, fix, refactor, test, docs, chore, style, perf
|
|
31
|
+
|
|
32
|
+
## Agent delegation
|
|
33
|
+
|
|
34
|
+
- Use subagents when tasks can run in parallel or require isolated context.
|
|
35
|
+
- For simple tasks, sequential operations, or single-file edits, work directly.
|
|
36
|
+
- Use `explorer` for quick lookups to save context tokens.
|
|
37
|
+
- Use `database-specialist` for schema, indexes, and query analysis.
|
|
38
|
+
- Use `performance-profiler` for bottleneck identification.
|
|
39
|
+
- Use `api-reviewer` for API design and consistency checks.
|
|
40
|
+
- Use `lead` for complex multi-step tasks requiring coordination.
|
|
@@ -47,18 +47,26 @@ Work through these five lenses in order. Report findings grouped by lens, ranked
|
|
|
47
47
|
|
|
48
48
|
## Output format
|
|
49
49
|
|
|
50
|
+
Emit each finding as a record: `severity` (blocking | suggestion) · `file` · `line` · `finding` · `why` · `fix` (if applicable). When the output is consumed by another agent, emit JSON objects with exactly those keys. For a human summary, group by severity:
|
|
51
|
+
|
|
50
52
|
```
|
|
51
53
|
BLOCKING
|
|
52
|
-
- [file:line] [finding] — [why it matters]
|
|
54
|
+
- [file:line] [finding] — [why it matters] → [fix]
|
|
53
55
|
|
|
54
56
|
SUGGESTIONS
|
|
55
57
|
- [file:line] [finding] — [alternative if applicable]
|
|
56
58
|
|
|
57
|
-
APPROVED (
|
|
59
|
+
APPROVED (state explicitly when there are no blocking findings)
|
|
58
60
|
```
|
|
59
61
|
|
|
60
62
|
A BLOCKING finding must be resolved before merge. A SUGGESTION is optional.
|
|
61
63
|
|
|
64
|
+
## Lens 6 — Test integrity / anti-gaming
|
|
65
|
+
|
|
66
|
+
- Does each test actually falsify what it claims to cover — would it fail without the change?
|
|
67
|
+
- Watch for gamed fixes: hardcoded expected values, weakened or deleted assertions, special-cased inputs that only work for the exact test data.
|
|
68
|
+
- Watch for behavior changes disguised as refactors (suite stays green because the test was weakened, not because behavior was preserved).
|
|
69
|
+
|
|
62
70
|
## Scope discipline
|
|
63
71
|
|
|
64
72
|
Do not flag cosmetic changes unless they create real ambiguity. A review that lists 20 nits trains authors to ignore reviews entirely.
|
{agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/debugging-protocol/SKILL.md
RENAMED
|
@@ -59,7 +59,8 @@ Test with the smallest possible change — one that confirms or disproves the hy
|
|
|
59
59
|
## Phase 4 — Fix
|
|
60
60
|
|
|
61
61
|
Apply the minimal fix for the root cause:
|
|
62
|
-
- Fix the root cause, not the symptom.
|
|
62
|
+
- Fix the root cause, not the symptom. Do not make the symptom disappear by swallowing or catching the error, loosening an assertion, adding a retry that hides a race, or special-casing the failing input. Those game the symptom check without fixing the bug.
|
|
63
|
+
- Before touching the fix, confirm the reproduction actually fails on the current code. A repro that never truly failed proves nothing. After fixing, confirm it now passes AND would have failed without the change.
|
|
63
64
|
- Remove all instrumentation from Phase 1.
|
|
64
65
|
- Run the full test suite.
|
|
65
66
|
- Confirm the original failure is gone and nothing else regressed.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: improve-codebase-architecture
|
|
3
|
-
description: "Find deepening opportunities — modules where the interface is nearly as complex as the implementation. Use when user wants to improve architecture, reduce coupling, make code more testable, or says 'clean up the design'."
|
|
3
|
+
description: "Find deepening opportunities — modules where the interface is nearly as complex as the implementation. Use when user wants to improve architecture, reduce coupling, make code more testable, or says 'clean up the design'. For broad code-quality hardening use rsi; for a single safe refactor use refactoring-protocol."
|
|
4
4
|
group: process
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: migrate-memory
|
|
3
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
4
|
group: process
|
|
5
|
-
requires_memory: obsidian,
|
|
5
|
+
requires_memory: obsidian,wiki
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Migrate Memory
|
{agent_notes-2.26.0 → agent_notes-2.28.0}/agent_notes/data/skills/refactoring-protocol/SKILL.md
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: refactoring-protocol
|
|
3
|
-
description: "Safe refactoring: green tests first, one extraction at a time, structure OR behavior never both. Use when user wants to refactor code, reduce duplication, or says 'clean this up'."
|
|
3
|
+
description: "Safe refactoring: green tests first, one extraction at a time, structure OR behavior never both. Use when user wants to refactor code, reduce duplication, or says 'clean this up'. For an iterative multi-dimensional cleanup loop use rsi; for module or interface redesign use improve-codebase-architecture."
|
|
4
4
|
group: process
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -51,6 +51,7 @@ Return to Step 2 for the next extraction.
|
|
|
51
51
|
## Hard rules
|
|
52
52
|
|
|
53
53
|
- **Structure OR behavior in one commit, never both.** If you find a bug while refactoring: stash the refactor, fix the bug in a separate commit, then resume. Mixing them makes the change impossible to review and risky to revert.
|
|
54
|
+
- **Never achieve green by weakening the tests.** Do not weaken, skip, delete, or rewrite a test to make it pass after a refactor. If a test breaks, the refactor changed behavior by definition — fix or revert the refactor, not the test. The test suite is the invariant the refactor must preserve.
|
|
54
55
|
- **Do not optimize during refactor.** Performance tuning is a separate session with its own measurement baseline.
|
|
55
56
|
- **Do not add features during refactor.** If you notice a missing edge case: note it, address it in a separate commit after the refactor is complete.
|
|
56
57
|
- **Stop when the smell is gone.** Over-refactoring is as harmful as under-refactoring.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rsi
|
|
3
|
+
description: "Recursive code-improvement loop: iteratively harden an existing codebase across bugs, performance, quality, consistency/homogeneity, pattern adherence, tests, atomicity, independence, and DRY — strictly without adding functionality. Use when the user wants to improve, clean up, or harden existing code, says 'rsi', or asks to raise code quality without new features. For a single one-shot refactor use refactoring-protocol; for module or interface redesign use improve-codebase-architecture."
|
|
4
|
+
group: process
|
|
5
|
+
argument-hint: "[path or scope, optional]"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# RSI — Recursive Self-Improvement (Code)
|
|
9
|
+
|
|
10
|
+
Iteratively improve EXISTING code until it stops yielding improvements. The lead orchestrates; specialized agents do the work. This is a quality loop, not a feature loop.
|
|
11
|
+
|
|
12
|
+
## Prime invariant
|
|
13
|
+
|
|
14
|
+
- **Behavior-preserving.** NEVER add functionality, new features, new public API, or new config. Only improve what already exists.
|
|
15
|
+
- **Tests green before a pass and after every change.** If the target has no test coverage, write a characterization test FIRST, then improve.
|
|
16
|
+
- **One change = one concern.** Structure OR behavior, never both in the same change.
|
|
17
|
+
|
|
18
|
+
## The loop (lead-orchestrated, loop-until-dry)
|
|
19
|
+
|
|
20
|
+
1. **Scope.** Resolve the target (arg path, or whole project). Identify the test command and confirm the suite is green. If it is red, stop and report — fix the suite before improving. Do NOT run the loop on code that lacks meaningful test coverage — write characterization tests first: studies report that looping over weakly-tested code produces roughly 10x more false-positive "fixes" than with a strong suite (~16% vs ~1.4%).
|
|
21
|
+
2. **Scan — one dimension at a time.** Dispatch read-only agents to produce a ranked list of concrete opportunities:
|
|
22
|
+
- `debugger` / `security-auditor` → bugs, correctness, vulnerabilities
|
|
23
|
+
- `performance-profiler` → hot paths, N+1, redundant work
|
|
24
|
+
- `system-auditor` → duplication, dead code, coupling, inconsistent implementations of one concept
|
|
25
|
+
- `reviewer` → readability, naming, pattern & consistency adherence
|
|
26
|
+
- `test-writer` (read-only pass) → coverage gaps
|
|
27
|
+
|
|
28
|
+
Each opportunity is a **finding record**: `file` · `line` · `dimension` · `severity` (blocker | major | minor) · `why` · `fix` (one-line proposed change). When a downstream agent consumes the scan, emit findings as JSON objects with exactly those keys; otherwise the dashed form `file:line — dimension/severity — why — fix` is fine.
|
|
29
|
+
|
|
30
|
+
3. **Prioritize.** Order: correctness/safety > missing tests on touched code > DRY/duplication > consistency/homogeneity > pattern & convention fit > performance > clarity/naming. Drop anything that changes behavior or adds capability.
|
|
31
|
+
4. **Apply ONE atomic, independent change.** Dispatch `coder` (bugfix) or `refactorer` (behavior-preserving cleanup). Smallest viable diff.
|
|
32
|
+
5. **Verify.** Run affected tests — must stay green. `reviewer` confirms: no behavior change, fits conventions, genuinely improves the dimension. On regression → revert and re-plan. Note: research suggests genuine logic bugs repair poorly in an iterative loop (~45% vs ~77% for surface/name errors) — escalate real logic bugs to `debugger` rather than re-looping.
|
|
33
|
+
6. **Commit (auto, atomic).** One concern per commit, independent and revertable. Use the `git` skill's message format. Then take the next opportunity.
|
|
34
|
+
7. **Repeat passes.** Converge when TWO consecutive full passes surface no new actionable improvement. Then report.
|
|
35
|
+
|
|
36
|
+
## Dimensions rubric
|
|
37
|
+
|
|
38
|
+
Each dimension: what to **hunt**, what to **fix**, what to **leave alone**.
|
|
39
|
+
|
|
40
|
+
- **Bugs & correctness** — off-by-one, nil/None, races, missing error handling, unhandled edge cases. Fix minimally + add a regression test. Don't redesign.
|
|
41
|
+
- **Performance** — measured hot paths, N+1 queries, redundant work, bad complexity, unbounded growth. Don't micro-optimize cold paths or trade clarity for guesswork.
|
|
42
|
+
- **Code quality** — long methods, deep nesting, unclear names, magic values. Extract, apply guard clauses, rename. Don't gold-plate.
|
|
43
|
+
- **Consistency / homogeneity** — the same kind of thing implemented multiple different ways: mixed styles for one object type, divergent shapes for one concept, inconsistent signatures or return types. Converge on one canonical form and reduce needless variation. Distinct from DRY — this targets divergent *expression* of one concept, not duplicated *logic*. Don't force genuinely different things into a false-common shape.
|
|
44
|
+
- **Pattern adherence** — match the project's dominant idioms, structure, and conventions. Align outliers. Don't invent new patterns.
|
|
45
|
+
- **Tests** — cover changed or risky code, fix flaky/slow tests, add missing edge cases. Don't test trivial getters.
|
|
46
|
+
- **Atomicity** — split god-functions and god-classes into single-responsibility units. Don't over-fragment.
|
|
47
|
+
- **Independence** — reduce coupling, remove hidden global state, narrow interfaces. Don't add abstraction layers nobody needs.
|
|
48
|
+
- **DRY** — collapse genuine duplication into one source of truth. Don't DRY accidental similarity (premature abstraction is worse than duplication).
|
|
49
|
+
- **Dead code** — unused functions, variables, imports, branches. Delete after confirming no external use.
|
|
50
|
+
|
|
51
|
+
## Gates (hard)
|
|
52
|
+
|
|
53
|
+
- **Green-before / green-after.** A red suite halts the loop.
|
|
54
|
+
- **No-feature gate.** If a change adds capability, it is out of scope — reject it.
|
|
55
|
+
- **Atomic & independent commits.** Revert on regression with `git revert` — never `reset --hard` or force-push.
|
|
56
|
+
- **Max 2 review rounds per change,** then accept or drop it. (empirically, ~2 rounds captures most attainable improvement — on the order of 76–95% — so further rounds are mostly wasted polish.)
|
|
57
|
+
- **Fail-first, anti-gaming.** Every regression/characterization test must be shown to FAIL on the unfixed code (it must actually reproduce the bug) BEFORE the fix lands. Reject any "fix" that games the test rather than addressing root cause — hardcoded expected values, weakened/removed assertions, special-casing the asserted inputs, or operator/equality overloading. A test that passes regardless of the fix proves nothing. The reviewer confirms the test genuinely falsifies the bug.
|
|
58
|
+
|
|
59
|
+
## Done
|
|
60
|
+
|
|
61
|
+
Report: improvements grouped by dimension, commits made, tests added, deferrals (with reasons), and anything skipped as out-of-scope (new functionality).
|
|
@@ -36,7 +36,8 @@ Because you just wrote the code, you know exactly what behavior matters and how
|
|
|
36
36
|
|
|
37
37
|
## GREEN — make it pass
|
|
38
38
|
|
|
39
|
-
- Write the minimum code to pass the test. Hardcode values if that's all it takes — you'll triangulate with the next test.
|
|
39
|
+
- Write the minimum code to pass the test. Hardcode values if that's all it takes — you'll triangulate with the next test. A hardcoded return is only valid as a transient step toward a general implementation; if it stays in permanently to satisfy the test, that is reward-hacking, not TDD.
|
|
40
|
+
- Do not reach GREEN by gaming the test: no special-casing the test's specific inputs, no weakening the assertion, no deleting the assertion. The test must pass because the behavior is implemented, not because the check was neutered.
|
|
40
41
|
- Run the test. Confirm green.
|
|
41
42
|
- If still failing: read the failure output carefully before changing anything else.
|
|
42
43
|
|
|
Binary file
|
agent_notes-2.28.0/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|