agent-notes 2.30.0__tar.gz → 2.33.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.30.0 → agent_notes-2.33.0}/PKG-INFO +36 -21
- {agent_notes-2.30.0 → agent_notes-2.33.0}/README.md +35 -20
- agent_notes-2.33.0/agent_notes/VERSION +1 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/cli.py +1 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/build.py +46 -19
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/config.py +173 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/install.py +17 -2
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/migrate.py +5 -2
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/regenerate.py +7 -3
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/__init__.py +102 -28
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/_common.py +10 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/execute.py +95 -16
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/orchestrator.py +47 -11
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/commands/debug.md +1 -1
- agent_notes-2.33.0/agent_notes/data/models/claude-fable-5.yaml +15 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-haiku-4-5.yaml +1 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-8.yaml +1 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-sonnet-4-6.yaml +1 -1
- agent_notes-2.33.0/agent_notes/data/models/claude-sonnet-5.yaml +15 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/plugin/claude.yaml +13 -4
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/pricing.yaml +8 -0
- agent_notes-2.33.0/agent_notes/data/providers/anthropic.yaml +3 -0
- agent_notes-2.33.0/agent_notes/data/providers/openai.yaml +3 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/roles/orchestrator.yaml +3 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/roles/reasoner.yaml +3 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/roles/scout.yaml +3 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/roles/worker.yaml +3 -1
- agent_notes-2.33.0/agent_notes/data/rules/no-ai-attribution.md +27 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/chrome-test/SKILL.md +1 -1
- agent_notes-2.33.0/agent_notes/data/skills/code-review/SKILL.md +90 -0
- agent_notes-2.33.0/agent_notes/data/skills/codebase-design/DEEPENING.md +37 -0
- agent_notes-2.33.0/agent_notes/data/skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
- agent_notes-2.33.0/agent_notes/data/skills/codebase-design/SKILL.md +115 -0
- agent_notes-2.33.0/agent_notes/data/skills/diagnosing-bugs/SKILL.md +135 -0
- agent_notes-2.33.0/agent_notes/data/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
- agent_notes-2.33.0/agent_notes/data/skills/domain-modeling/ADR-FORMAT.md +47 -0
- agent_notes-2.33.0/agent_notes/data/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- agent_notes-2.33.0/agent_notes/data/skills/domain-modeling/SKILL.md +75 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/git/SKILL.md +1 -0
- agent_notes-2.33.0/agent_notes/data/skills/grill-me/SKILL.md +8 -0
- agent_notes-2.33.0/agent_notes/data/skills/grill-with-docs/SKILL.md +8 -0
- agent_notes-2.33.0/agent_notes/data/skills/grilling/SKILL.md +13 -0
- agent_notes-2.33.0/agent_notes/data/skills/handoff/SKILL.md +17 -0
- agent_notes-2.33.0/agent_notes/data/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
- agent_notes-2.33.0/agent_notes/data/skills/improve-codebase-architecture/SKILL.md +67 -0
- agent_notes-2.33.0/agent_notes/data/skills/prototype/LOGIC.md +79 -0
- agent_notes-2.33.0/agent_notes/data/skills/prototype/SKILL.md +27 -0
- agent_notes-2.33.0/agent_notes/data/skills/prototype/UI.md +112 -0
- agent_notes-2.33.0/agent_notes/data/skills/research/SKILL.md +13 -0
- agent_notes-2.33.0/agent_notes/data/skills/setup-agent-tracker/SKILL.md +117 -0
- agent_notes-2.33.0/agent_notes/data/skills/setup-agent-tracker/domain.md +51 -0
- agent_notes-2.33.0/agent_notes/data/skills/setup-agent-tracker/issue-tracker-github.md +45 -0
- agent_notes-2.33.0/agent_notes/data/skills/setup-agent-tracker/issue-tracker-gitlab.md +46 -0
- agent_notes-2.33.0/agent_notes/data/skills/setup-agent-tracker/issue-tracker-local.md +30 -0
- agent_notes-2.33.0/agent_notes/data/skills/setup-agent-tracker/triage-labels.md +15 -0
- agent_notes-2.33.0/agent_notes/data/skills/tdd/SKILL.md +37 -0
- agent_notes-2.33.0/agent_notes/data/skills/tdd/mocking.md +59 -0
- agent_notes-2.33.0/agent_notes/data/skills/tdd/tests.md +77 -0
- agent_notes-2.33.0/agent_notes/data/skills/to-spec/SKILL.md +76 -0
- agent_notes-2.33.0/agent_notes/data/skills/to-tickets/SKILL.md +108 -0
- agent_notes-2.33.0/agent_notes/data/skills/triage/AGENT-BRIEF.md +207 -0
- agent_notes-2.33.0/agent_notes/data/skills/triage/OUT-OF-SCOPE.md +105 -0
- agent_notes-2.33.0/agent_notes/data/skills/triage/SKILL.md +113 -0
- agent_notes-2.33.0/agent_notes/data/skills/wayfinder/SKILL.md +128 -0
- agent_notes-2.33.0/agent_notes/data/skills/writing-great-skills/GLOSSARY.md +201 -0
- agent_notes-2.33.0/agent_notes/data/skills/writing-great-skills/SKILL.md +84 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/base.cpython-314.pyc +0 -0
- agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
- agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-314.pyc +0 -0
- agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/claude.py +4 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/codex.py +5 -11
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/opencode.py +9 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/model.py +1 -1
- agent_notes-2.33.0/agent_notes/domain/provider.py +11 -0
- agent_notes-2.33.0/agent_notes/domain/role.py +20 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/state.py +1 -0
- agent_notes-2.33.0/agent_notes/registries/provider_registry.py +62 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/role_registry.py +3 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/fs.py +6 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/install_executor.py +7 -3
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/install_plan.py +15 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/install_state_builder.py +9 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/installer.py +4 -1
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/model_resolver.py +11 -3
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/rendering.py +176 -20
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/state_store.py +3 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes.egg-info/PKG-INFO +36 -21
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes.egg-info/SOURCES.txt +45 -8
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes.egg-info/top_level.txt +1 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_config_command.py +63 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_regenerate_command.py +45 -0
- agent_notes-2.33.0/tests/unit/commands/test_install_profile_rerender.py +53 -0
- agent_notes-2.33.0/tests/unit/commands/test_wizard_confirm_build_order.py +158 -0
- agent_notes-2.33.0/tests/unit/commands/test_wizard_effort_selection.py +61 -0
- agent_notes-2.33.0/tests/unit/commands/test_wizard_install_summary_display.py +71 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_orchestrator_skip.py +3 -3
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_preflight.py +112 -11
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_role_model_default.py +1 -1
- agent_notes-2.33.0/tests/unit/commands/test_wizard_role_ordering.py +137 -0
- agent_notes-2.33.0/tests/unit/registries/test_provider_registry.py +57 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/registries/test_registries.py +52 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_build_functions.py +37 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_fs.py +35 -0
- agent_notes-2.33.0/tests/unit/services/test_generate_agent_files_pins.py +226 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_plan.py +59 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_model_resolver_characterization.py +9 -6
- agent_notes-2.33.0/tests/unit/services/test_resolve_effort.py +383 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_session_context.py +4 -4
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_state_store.py +45 -0
- agent_notes-2.33.0/tests/unit/templates/test_claude_frontmatter.py +46 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/templates/test_codex_frontmatter.py +28 -9
- agent_notes-2.33.0/tests/unit/templates/test_opencode_frontmatter.py +33 -0
- agent_notes-2.30.0/agent_notes/VERSION +0 -1
- agent_notes-2.30.0/agent_notes/data/skills/caveman/SKILL.md +0 -28
- agent_notes-2.30.0/agent_notes/data/skills/code-review/SKILL.md +0 -72
- agent_notes-2.30.0/agent_notes/data/skills/debugging-protocol/SKILL.md +0 -70
- agent_notes-2.30.0/agent_notes/data/skills/grill-me/SKILL.md +0 -29
- agent_notes-2.30.0/agent_notes/data/skills/grill-with-docs/SKILL.md +0 -84
- agent_notes-2.30.0/agent_notes/data/skills/handoff/SKILL.md +0 -26
- agent_notes-2.30.0/agent_notes/data/skills/improve-codebase-architecture/SKILL.md +0 -51
- agent_notes-2.30.0/agent_notes/data/skills/prototype/LOGIC.md +0 -47
- agent_notes-2.30.0/agent_notes/data/skills/prototype/SKILL.md +0 -29
- agent_notes-2.30.0/agent_notes/data/skills/prototype/UI.md +0 -45
- agent_notes-2.30.0/agent_notes/data/skills/setup-project-context/SKILL.md +0 -67
- agent_notes-2.30.0/agent_notes/data/skills/tdd/SKILL.md +0 -73
- agent_notes-2.30.0/agent_notes/data/skills/to-issues/SKILL.md +0 -61
- agent_notes-2.30.0/agent_notes/data/skills/to-prd/SKILL.md +0 -49
- agent_notes-2.30.0/agent_notes/data/skills/write-a-skill/SKILL.md +0 -72
- agent_notes-2.30.0/agent_notes/data/skills/zoom-out/SKILL.md +0 -7
- agent_notes-2.30.0/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
- agent_notes-2.30.0/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-314.pyc +0 -0
- agent_notes-2.30.0/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
- agent_notes-2.30.0/agent_notes/domain/role.py +0 -13
- {agent_notes-2.30.0 → agent_notes-2.33.0}/LICENSE +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/__main__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/_install_helpers.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/doctor.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/hook.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/info.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/list.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/_common.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/notes.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/reset.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/transfer.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/vault.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/wiki.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/set_role.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/uninstall.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/validate.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/cost_report.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/config.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/constants.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/agents.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/analyst.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/api-reviewer.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/architect.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/coder.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/database-specialist.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/debugger.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/devil.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/devops.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/explorer.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/integrations.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/lead.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/performance-profiler.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/refactorer.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/reviewer.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/security-auditor.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/cost_reporting.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/execution.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/guardrails.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/hard_limits.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/phase0.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/pipelines.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/review.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/verification.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/wiki_compile.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/system-auditor.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/tech-writer.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/test-runner.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/test-writer.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/wiki-compiler.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/cli/claude.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/cli/codex.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/cli/copilot.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/cli/opencode.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/commands/brainstorm.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/commands/review.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/global-claude.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/global-codex.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/global-copilot.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/global-opencode.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/hooks/session-context.md.tpl +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-1.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-5.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-6.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-7.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-sonnet-4-5.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-sonnet-4.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/gpt-5-4-mini.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/gpt-5-4.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/gpt-5-5.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/plugin/opencode-index.js.template +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/plugin/opencode.yaml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/rules/code-quality.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/rules/safety.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/brainstorming/SKILL.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/docker/SKILL.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/docker/compose.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/docker/dockerfile.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/ingest/SKILL.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/migrate-memory/SKILL.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/obsidian-memory/SKILL.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/SKILL.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/controllers.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/frontend.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/infra.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/models.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/testing.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/views.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/refactoring-protocol/SKILL.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rsi/SKILL.md +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/__pycache__/__init__.cpython-312.pyc +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/__pycache__/__init__.cpython-314.pyc +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-312.pyc +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-314.pyc +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-312.pyc +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-312.pyc +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-312.pyc +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/base.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/doctor_checks.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/agent.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/cli_backend.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/diagnostics.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/diff.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/rule.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/skill.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/_base.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/agent_registry.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/cli_registry.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/model_registry.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/rule_registry.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/skill_registry.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/scripts/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/scripts/_claude_backend.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/scripts/_formatting.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/scripts/_opencode_backend.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/scripts/_pricing.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/scripts/cost_report.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/_memory_utils.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/counts.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/credentials.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/_checks.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/_display.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/_fix.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/diff.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/local_backend.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/memory_backend.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/memory_router.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/migrations/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/obsidian_backend.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/session_context.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/settings_writer.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/ui.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/user_config.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/validation.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/_wiki_utils.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_index.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_ingest.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_lint.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_query.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_storage.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki_backend.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes.egg-info/dependency_links.txt +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes.egg-info/entry_points.txt +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes.egg-info/requires.txt +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/pyproject.toml +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/setup.cfg +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/conftest.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_doctor_command.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_info_command.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_install_command.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_install_roundtrip.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_list_command.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_uninstall_command.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_uninstall_full_hooks.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_validate_command.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_validate_path_filter.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_wizard_happy_path.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/memory/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/memory/test_memory_add_local_backend.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/memory/test_memory_command.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/scripts/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/scripts/test_release_script.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/build_output/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/build_output/test_build_output.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/install/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/install/test_install_methods.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/plugin_builders/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/plugin_builders/test_plugin_builders.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/plugins/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/plugins/claude/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/plugins/claude/test_agents.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/plugins/codex/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/plugins/codex/test_agents.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/plugins/test_skills.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_cost_report_subcommand.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_count_agents.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_guard_credentials.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_info.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_memory_add_description.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_memory_imports.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_memory_migrate.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_precompact_memory_bridge.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_imports.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_steps.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/wizard/test_cost_report_step.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/registries/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/registries/test_cli_registry.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_cache_write_pricing.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_cost_report.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_cost_report_scoping.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_formatting_tty.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_opencode_backend_connection.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_opencode_backend_pricing.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_time_aggregation.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_credential_filter.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_credentials.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_codex.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_credential_guard.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_hook_quoting.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_hooks.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_precompact_hook.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_local_backend.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_memory_backend.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_memory_backend_io.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_memory_router.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_rendering_includes.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_settings_writer.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_skill_filtering.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_user_config_cost_report.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_validation.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_wiki_atomic_write.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_wiki_backend.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_wiki_imports.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/templates/__init__.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/test_import_health.py +0 -0
- {agent_notes-2.30.0 → agent_notes-2.33.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.33.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
|
|
@@ -44,8 +44,8 @@ agent-notes doctor
|
|
|
44
44
|
|
|
45
45
|
**What's Included**
|
|
46
46
|
- 19 specialized AI subagents (Opus reasons, Sonnet executes, Haiku explores)
|
|
47
|
-
-
|
|
48
|
-
- Global rules and guardrails
|
|
47
|
+
- 50+ on-demand skills (Rails, Docker, Git, Kamal, Process)
|
|
48
|
+
- Global rules and guardrails (including a ban on AI self-attribution in commits/PRs)
|
|
49
49
|
- Agent memory with 3 storage options (Local, Obsidian, Wiki)
|
|
50
50
|
- Configuration for Claude Code, OpenCode, and GitHub Copilot
|
|
51
51
|
|
|
@@ -170,7 +170,7 @@ If you configured agent-notes to access your memory vault (Obsidian or local), t
|
|
|
170
170
|
<details>
|
|
171
171
|
<summary>Agent Team</summary>
|
|
172
172
|
|
|
173
|
-
Specialized subagents with hierarchical model strategy: **Opus 4.
|
|
173
|
+
Specialized subagents with hierarchical model strategy: **Opus 4.8 reasons (high effort), Sonnet 5 executes (medium effort), Haiku 4.5 scouts (low effort).**
|
|
174
174
|
|
|
175
175
|
| Agent | Role | Model Tier | Purpose |
|
|
176
176
|
|---|---|---|---|
|
|
@@ -194,7 +194,7 @@ Specialized subagents with hierarchical model strategy: **Opus 4.6 reasons, Sonn
|
|
|
194
194
|
| analyst | scout | haiku | Requirements translation, acceptance criteria |
|
|
195
195
|
| tech-writer | scout | haiku | READMEs, API docs, changelogs |
|
|
196
196
|
|
|
197
|
-
**4 roles, 19 agents, 3 model tiers.** The tiered model strategy optimizes cost: Opus reasons ($
|
|
197
|
+
**4 roles, 19 agents, 3 model tiers.** The tiered model strategy optimizes cost: Opus reasons ($5/$25 per 1M tokens in/out), Sonnet executes ($3/$15), Haiku scouts ($1/$5). A premium `fable` tier ($10/$50) is available for explicit pinning, but no role defaults to it.
|
|
198
198
|
|
|
199
199
|
### Delegation rules
|
|
200
200
|
|
|
@@ -216,6 +216,18 @@ Specialized subagents with hierarchical model strategy: **Opus 4.6 reasons, Sonn
|
|
|
216
216
|
- **tech-writer** — Documentation, READMEs, API docs
|
|
217
217
|
- **devil** — Challenges assumptions and plans
|
|
218
218
|
|
|
219
|
+
### Reconfiguring roles, models, and effort
|
|
220
|
+
|
|
221
|
+
During `agent-notes install`, wizard step 2 asks you to pick a model per role, and — for models served by a provider with a known effort vocabulary (currently `anthropic`, `openai`) — a follow-up effort prompt, pre-selected to the role's typical effort when that value is valid for the chosen provider. Providers with no effort registry entry (`github-copilot`, `openrouter`, `google`, `moonshot`) skip the effort prompt entirely.
|
|
222
|
+
|
|
223
|
+
To change these after install:
|
|
224
|
+
```bash
|
|
225
|
+
agent-notes config role-model [--cli <cli>] <role> <model> # e.g. role-model worker claude-sonnet-5
|
|
226
|
+
agent-notes config role-effort [--cli <cli>] <role> <effort> # e.g. role-effort worker high
|
|
227
|
+
agent-notes config wizard # interactive menu for both
|
|
228
|
+
```
|
|
229
|
+
`role-effort` validates the effort against the role's currently-assigned model's provider — an invalid value prints that provider's name and its valid effort list. There's no cross-provider mapping: each provider (anthropic, openai) has its own independent effort vocabulary and default.
|
|
230
|
+
|
|
219
231
|
</details>
|
|
220
232
|
|
|
221
233
|
---
|
|
@@ -282,7 +294,7 @@ agent-notes memory lint # health-check
|
|
|
282
294
|
<details>
|
|
283
295
|
<summary>Skills</summary>
|
|
284
296
|
|
|
285
|
-
|
|
297
|
+
50+ on-demand knowledge modules across Rails, Docker, Kamal, Git, and Process. Run `agent-notes list skills` for the current list, or browse `agent_notes/data/skills/`.
|
|
286
298
|
|
|
287
299
|
The session context hook auto-generates a skill index from SKILL.md frontmatter at install time, so agents always know what skills are available without loading full skill content. This keeps context overhead low while maintaining skill discoverability.
|
|
288
300
|
|
|
@@ -297,26 +309,29 @@ Load the docker-compose skill for multi-service setup
|
|
|
297
309
|
|
|
298
310
|
| Failure mode | What goes wrong | Skills that help |
|
|
299
311
|
|---|---|---|
|
|
300
|
-
| Misalignment | Claude starts building before the problem is resolved | `/grill-me`, `/grill-with-docs` |
|
|
301
|
-
|
|
|
302
|
-
| Broken code | Claude codes without a feedback loop or evidence trail | `/tdd
|
|
303
|
-
| Ball of mud | Architecture drifts; modules grow shallow and tangled | `/improve-codebase-architecture`, `/
|
|
312
|
+
| Misalignment | Claude starts building before the problem is resolved | `/grill-me`, `/grilling`, `/grill-with-docs` |
|
|
313
|
+
| Vague scope | Work starts without a spec or ticketed breakdown | `/to-spec`, `/to-tickets`, `/wayfinder`, `/triage` |
|
|
314
|
+
| Broken code | Claude codes without a feedback loop or evidence trail | `/tdd`, `/diagnosing-bugs` |
|
|
315
|
+
| Ball of mud | Architecture drifts; modules grow shallow and tangled | `/improve-codebase-architecture`, `/codebase-design`, `/domain-modeling` |
|
|
304
316
|
|
|
305
317
|
**Skill descriptions:**
|
|
306
318
|
|
|
307
|
-
- `/grill-me` — Interview the user until the
|
|
319
|
+
- `/grill-me`, `/grilling` — Interview the user relentlessly until the plan is fully resolved before touching code
|
|
308
320
|
- `/grill-with-docs` — Same, but cross-references CONTEXT.md and ADRs and updates them inline
|
|
309
|
-
- `/
|
|
310
|
-
- `/
|
|
311
|
-
- `/
|
|
312
|
-
- `/
|
|
313
|
-
- `/
|
|
314
|
-
- `/zoom-out` — Quick orientation map of an unfamiliar code area
|
|
321
|
+
- `/tdd` — RED-GREEN-REFACTOR with tracer-bullet vertical slices; integration-first testing
|
|
322
|
+
- `/diagnosing-bugs` — Diagnosis loop for hard bugs and performance regressions (build a feedback loop first)
|
|
323
|
+
- `/improve-codebase-architecture` — Scan for deepening opportunities, present a visual HTML report, then grill the chosen one
|
|
324
|
+
- `/codebase-design` — Shared vocabulary for designing deep modules and choosing where seams go
|
|
325
|
+
- `/domain-modeling` — Pin down ubiquitous language, maintain a CONTEXT.md glossary and ADRs
|
|
315
326
|
- `/handoff` — Compact conversation into a handoff document for a fresh agent session
|
|
316
|
-
- `/to-
|
|
317
|
-
- `/to-
|
|
327
|
+
- `/to-spec` — Synthesize the current conversation into a spec and publish it to the issue tracker
|
|
328
|
+
- `/to-tickets` — Break a plan/spec into tracer-bullet tickets with declared blocking edges
|
|
329
|
+
- `/wayfinder` — Plan work larger than one agent session as a map of investigation tickets
|
|
330
|
+
- `/triage` — Move issues and external PRs through a triage state machine into agent-ready briefs
|
|
331
|
+
- `/research` — Investigate a question against primary sources and capture findings as Markdown
|
|
318
332
|
- `/prototype` — Throwaway prototypes: terminal app for logic or UI variations for visual
|
|
319
|
-
- `/
|
|
333
|
+
- `/setup-agent-tracker` — One-time per-repo setup of the issue tracker, triage labels, and domain doc layout
|
|
334
|
+
- `/writing-great-skills` — Reference for writing and editing skills well
|
|
320
335
|
|
|
321
336
|
</details>
|
|
322
337
|
|
|
@@ -509,7 +524,7 @@ See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md), [docs/ADD_CLI.md](docs/ADD_CLI
|
|
|
509
524
|
## Inspired by
|
|
510
525
|
|
|
511
526
|
- [Andrej Karpathy's LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) — The wiki memory backend implements his compile-once, query-forever knowledge pattern with structured page types and three core operations (ingest, query, lint)
|
|
512
|
-
- [Matt Pocock's skills repo](https://github.com/mattpocock/skills) — Skill format (SKILL.md per directory), failure-mode table (misalignment,
|
|
527
|
+
- [Matt Pocock's skills repo](https://github.com/mattpocock/skills) — Skill format (SKILL.md per directory), failure-mode table (misalignment, broken code, architectural degradation), and a set of engineering/productivity skills vendored from the upstream repo (tdd, grill-me, grilling, grill-with-docs, diagnosing-bugs, improve-codebase-architecture, codebase-design, domain-modeling, prototype, handoff, research, to-spec, to-tickets, triage, wayfinder, writing-great-skills). Last synced from upstream commit [`391a270`](https://github.com/mattpocock/skills/commit/391a2701dd948f94f56a39f7533f8eea9a859c87) (2026-07-10), reviewed for prompt-injection before import.
|
|
513
528
|
|
|
514
529
|
## License
|
|
515
530
|
|
|
@@ -12,8 +12,8 @@ agent-notes doctor
|
|
|
12
12
|
|
|
13
13
|
**What's Included**
|
|
14
14
|
- 19 specialized AI subagents (Opus reasons, Sonnet executes, Haiku explores)
|
|
15
|
-
-
|
|
16
|
-
- Global rules and guardrails
|
|
15
|
+
- 50+ on-demand skills (Rails, Docker, Git, Kamal, Process)
|
|
16
|
+
- Global rules and guardrails (including a ban on AI self-attribution in commits/PRs)
|
|
17
17
|
- Agent memory with 3 storage options (Local, Obsidian, Wiki)
|
|
18
18
|
- Configuration for Claude Code, OpenCode, and GitHub Copilot
|
|
19
19
|
|
|
@@ -138,7 +138,7 @@ If you configured agent-notes to access your memory vault (Obsidian or local), t
|
|
|
138
138
|
<details>
|
|
139
139
|
<summary>Agent Team</summary>
|
|
140
140
|
|
|
141
|
-
Specialized subagents with hierarchical model strategy: **Opus 4.
|
|
141
|
+
Specialized subagents with hierarchical model strategy: **Opus 4.8 reasons (high effort), Sonnet 5 executes (medium effort), Haiku 4.5 scouts (low effort).**
|
|
142
142
|
|
|
143
143
|
| Agent | Role | Model Tier | Purpose |
|
|
144
144
|
|---|---|---|---|
|
|
@@ -162,7 +162,7 @@ Specialized subagents with hierarchical model strategy: **Opus 4.6 reasons, Sonn
|
|
|
162
162
|
| analyst | scout | haiku | Requirements translation, acceptance criteria |
|
|
163
163
|
| tech-writer | scout | haiku | READMEs, API docs, changelogs |
|
|
164
164
|
|
|
165
|
-
**4 roles, 19 agents, 3 model tiers.** The tiered model strategy optimizes cost: Opus reasons ($
|
|
165
|
+
**4 roles, 19 agents, 3 model tiers.** The tiered model strategy optimizes cost: Opus reasons ($5/$25 per 1M tokens in/out), Sonnet executes ($3/$15), Haiku scouts ($1/$5). A premium `fable` tier ($10/$50) is available for explicit pinning, but no role defaults to it.
|
|
166
166
|
|
|
167
167
|
### Delegation rules
|
|
168
168
|
|
|
@@ -184,6 +184,18 @@ Specialized subagents with hierarchical model strategy: **Opus 4.6 reasons, Sonn
|
|
|
184
184
|
- **tech-writer** — Documentation, READMEs, API docs
|
|
185
185
|
- **devil** — Challenges assumptions and plans
|
|
186
186
|
|
|
187
|
+
### Reconfiguring roles, models, and effort
|
|
188
|
+
|
|
189
|
+
During `agent-notes install`, wizard step 2 asks you to pick a model per role, and — for models served by a provider with a known effort vocabulary (currently `anthropic`, `openai`) — a follow-up effort prompt, pre-selected to the role's typical effort when that value is valid for the chosen provider. Providers with no effort registry entry (`github-copilot`, `openrouter`, `google`, `moonshot`) skip the effort prompt entirely.
|
|
190
|
+
|
|
191
|
+
To change these after install:
|
|
192
|
+
```bash
|
|
193
|
+
agent-notes config role-model [--cli <cli>] <role> <model> # e.g. role-model worker claude-sonnet-5
|
|
194
|
+
agent-notes config role-effort [--cli <cli>] <role> <effort> # e.g. role-effort worker high
|
|
195
|
+
agent-notes config wizard # interactive menu for both
|
|
196
|
+
```
|
|
197
|
+
`role-effort` validates the effort against the role's currently-assigned model's provider — an invalid value prints that provider's name and its valid effort list. There's no cross-provider mapping: each provider (anthropic, openai) has its own independent effort vocabulary and default.
|
|
198
|
+
|
|
187
199
|
</details>
|
|
188
200
|
|
|
189
201
|
---
|
|
@@ -250,7 +262,7 @@ agent-notes memory lint # health-check
|
|
|
250
262
|
<details>
|
|
251
263
|
<summary>Skills</summary>
|
|
252
264
|
|
|
253
|
-
|
|
265
|
+
50+ 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/`.
|
|
254
266
|
|
|
255
267
|
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.
|
|
256
268
|
|
|
@@ -265,26 +277,29 @@ Load the docker-compose skill for multi-service setup
|
|
|
265
277
|
|
|
266
278
|
| Failure mode | What goes wrong | Skills that help |
|
|
267
279
|
|---|---|---|
|
|
268
|
-
| Misalignment | Claude starts building before the problem is resolved | `/grill-me`, `/grill-with-docs` |
|
|
269
|
-
|
|
|
270
|
-
| Broken code | Claude codes without a feedback loop or evidence trail | `/tdd
|
|
271
|
-
| Ball of mud | Architecture drifts; modules grow shallow and tangled | `/improve-codebase-architecture`, `/
|
|
280
|
+
| Misalignment | Claude starts building before the problem is resolved | `/grill-me`, `/grilling`, `/grill-with-docs` |
|
|
281
|
+
| Vague scope | Work starts without a spec or ticketed breakdown | `/to-spec`, `/to-tickets`, `/wayfinder`, `/triage` |
|
|
282
|
+
| Broken code | Claude codes without a feedback loop or evidence trail | `/tdd`, `/diagnosing-bugs` |
|
|
283
|
+
| Ball of mud | Architecture drifts; modules grow shallow and tangled | `/improve-codebase-architecture`, `/codebase-design`, `/domain-modeling` |
|
|
272
284
|
|
|
273
285
|
**Skill descriptions:**
|
|
274
286
|
|
|
275
|
-
- `/grill-me` — Interview the user until the
|
|
287
|
+
- `/grill-me`, `/grilling` — Interview the user relentlessly until the plan is fully resolved before touching code
|
|
276
288
|
- `/grill-with-docs` — Same, but cross-references CONTEXT.md and ADRs and updates them inline
|
|
277
|
-
- `/
|
|
278
|
-
- `/
|
|
279
|
-
- `/
|
|
280
|
-
- `/
|
|
281
|
-
- `/
|
|
282
|
-
- `/zoom-out` — Quick orientation map of an unfamiliar code area
|
|
289
|
+
- `/tdd` — RED-GREEN-REFACTOR with tracer-bullet vertical slices; integration-first testing
|
|
290
|
+
- `/diagnosing-bugs` — Diagnosis loop for hard bugs and performance regressions (build a feedback loop first)
|
|
291
|
+
- `/improve-codebase-architecture` — Scan for deepening opportunities, present a visual HTML report, then grill the chosen one
|
|
292
|
+
- `/codebase-design` — Shared vocabulary for designing deep modules and choosing where seams go
|
|
293
|
+
- `/domain-modeling` — Pin down ubiquitous language, maintain a CONTEXT.md glossary and ADRs
|
|
283
294
|
- `/handoff` — Compact conversation into a handoff document for a fresh agent session
|
|
284
|
-
- `/to-
|
|
285
|
-
- `/to-
|
|
295
|
+
- `/to-spec` — Synthesize the current conversation into a spec and publish it to the issue tracker
|
|
296
|
+
- `/to-tickets` — Break a plan/spec into tracer-bullet tickets with declared blocking edges
|
|
297
|
+
- `/wayfinder` — Plan work larger than one agent session as a map of investigation tickets
|
|
298
|
+
- `/triage` — Move issues and external PRs through a triage state machine into agent-ready briefs
|
|
299
|
+
- `/research` — Investigate a question against primary sources and capture findings as Markdown
|
|
286
300
|
- `/prototype` — Throwaway prototypes: terminal app for logic or UI variations for visual
|
|
287
|
-
- `/
|
|
301
|
+
- `/setup-agent-tracker` — One-time per-repo setup of the issue tracker, triage labels, and domain doc layout
|
|
302
|
+
- `/writing-great-skills` — Reference for writing and editing skills well
|
|
288
303
|
|
|
289
304
|
</details>
|
|
290
305
|
|
|
@@ -477,7 +492,7 @@ See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md), [docs/ADD_CLI.md](docs/ADD_CLI
|
|
|
477
492
|
## Inspired by
|
|
478
493
|
|
|
479
494
|
- [Andrej Karpathy's LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) — The wiki memory backend implements his compile-once, query-forever knowledge pattern with structured page types and three core operations (ingest, query, lint)
|
|
480
|
-
- [Matt Pocock's skills repo](https://github.com/mattpocock/skills) — Skill format (SKILL.md per directory), failure-mode table (misalignment,
|
|
495
|
+
- [Matt Pocock's skills repo](https://github.com/mattpocock/skills) — Skill format (SKILL.md per directory), failure-mode table (misalignment, broken code, architectural degradation), and a set of engineering/productivity skills vendored from the upstream repo (tdd, grill-me, grilling, grill-with-docs, diagnosing-bugs, improve-codebase-architecture, codebase-design, domain-modeling, prototype, handoff, research, to-spec, to-tickets, triage, wayfinder, writing-great-skills). Last synced from upstream commit [`391a270`](https://github.com/mattpocock/skills/commit/391a2701dd948f94f56a39f7533f8eea9a859c87) (2026-07-10), reviewed for prompt-injection before import.
|
|
481
496
|
|
|
482
497
|
## License
|
|
483
498
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.33.0
|
|
@@ -302,7 +302,7 @@ def main():
|
|
|
302
302
|
# config
|
|
303
303
|
p_config = subparsers.add_parser("config", help="Reconfigure role/agent/model/memory/skill assignments after install")
|
|
304
304
|
p_config.add_argument("action", nargs="?", default="wizard",
|
|
305
|
-
choices=["wizard", "show", "role-model", "role-agent", "provider", "providers", "memory", "cost-report"],
|
|
305
|
+
choices=["wizard", "show", "role-model", "role-agent", "role-effort", "provider", "providers", "memory", "cost-report"],
|
|
306
306
|
help="Config action (default: wizard)")
|
|
307
307
|
p_config.add_argument("extra", nargs="*", help="Additional positional args (role, model, agent)")
|
|
308
308
|
p_config.add_argument("--cli", help="Target CLI (claude / opencode / both)")
|
|
@@ -89,10 +89,43 @@ def count_lines(file_path: Path) -> int:
|
|
|
89
89
|
return 0
|
|
90
90
|
|
|
91
91
|
|
|
92
|
-
def
|
|
93
|
-
"""
|
|
92
|
+
def count_dist_clis(files: list[Path], dist_dir: Path, cli_names: set[str]) -> int:
|
|
93
|
+
"""Count distinct CLI backends among generated files (dist/<cli>/... paths).
|
|
94
|
+
|
|
95
|
+
Files outside dist_dir or under non-CLI top-level dirs (rules/, skills/)
|
|
96
|
+
are ignored."""
|
|
97
|
+
found = set()
|
|
98
|
+
for f in files:
|
|
99
|
+
try:
|
|
100
|
+
rel = f.relative_to(dist_dir)
|
|
101
|
+
except ValueError:
|
|
102
|
+
continue
|
|
103
|
+
if rel.parts and rel.parts[0] in cli_names:
|
|
104
|
+
found.add(rel.parts[0])
|
|
105
|
+
return len(found)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def format_build_summary(n_files: int, n_lines: int, n_clis: int) -> str:
|
|
109
|
+
"""One-line build summary, e.g. 'Generated 96 files (13,748 lines) across 4 CLIs'."""
|
|
110
|
+
file_word = "file" if n_files == 1 else "files"
|
|
111
|
+
cli_word = "CLI" if n_clis == 1 else "CLIs"
|
|
112
|
+
return f"Generated {n_files} {file_word} ({n_lines:,} lines) across {n_clis} {cli_word}"
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def build(role_models=None, role_efforts=None, scope='global', project_path=None,
|
|
116
|
+
profile_label: str = "") -> None:
|
|
117
|
+
"""Build agent configuration files from source.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
role_models: Optional explicit {cli: {role: model_id}} pins that override
|
|
121
|
+
persisted state (e.g. wizard selections not yet written to state.json)
|
|
122
|
+
role_efforts: Optional explicit {cli: {role: effort}} pins, same semantics
|
|
123
|
+
scope: which state.json scope's pins drive the render ('global' or 'local')
|
|
124
|
+
project_path: project path for scope='local'
|
|
125
|
+
profile_label: named profile whose pins drive the render ("" = default profile)
|
|
126
|
+
"""
|
|
94
127
|
from ..services.state_store import load_state
|
|
95
|
-
from ..
|
|
128
|
+
from ..registries.cli_registry import load_registry
|
|
96
129
|
|
|
97
130
|
# Read configuration
|
|
98
131
|
try:
|
|
@@ -103,10 +136,13 @@ def build() -> None:
|
|
|
103
136
|
|
|
104
137
|
# Load state if present (no error if missing)
|
|
105
138
|
state = load_state()
|
|
106
|
-
|
|
139
|
+
|
|
107
140
|
# Generate agent files (state=None is backward compatible)
|
|
108
141
|
print("Generating agent files...")
|
|
109
|
-
agent_files = generate_agent_files(agents_config, tiers, state=state
|
|
142
|
+
agent_files = generate_agent_files(agents_config, tiers, state=state,
|
|
143
|
+
scope=scope, project_path=project_path,
|
|
144
|
+
role_models=role_models, role_efforts=role_efforts,
|
|
145
|
+
profile_label=profile_label)
|
|
110
146
|
|
|
111
147
|
# Copy global files
|
|
112
148
|
print("Copying global files...")
|
|
@@ -120,21 +156,12 @@ def build() -> None:
|
|
|
120
156
|
print("Copying commands...")
|
|
121
157
|
command_files = copy_commands()
|
|
122
158
|
|
|
123
|
-
# Report results
|
|
159
|
+
# Report results — one-line summary (per-file listing was too noisy)
|
|
124
160
|
all_files = agent_files + global_files + skill_files + command_files
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
try:
|
|
130
|
-
rel_path = file_path.relative_to(ROOT)
|
|
131
|
-
except ValueError:
|
|
132
|
-
rel_path = file_path # absolute path if outside the package tree
|
|
133
|
-
lines = count_lines(file_path)
|
|
134
|
-
total_lines += lines
|
|
135
|
-
print(f" {rel_path} ({lines} lines)")
|
|
136
|
-
|
|
137
|
-
print(f"\nTotal: {total_lines} lines across {len(all_files)} files")
|
|
161
|
+
total_lines = sum(count_lines(f) for f in all_files)
|
|
162
|
+
cli_names = {b.name for b in load_registry().all()}
|
|
163
|
+
n_clis = count_dist_clis(all_files, DIST_DIR, cli_names)
|
|
164
|
+
print(f"\n{format_build_summary(len(all_files), total_lines, n_clis)}")
|
|
138
165
|
|
|
139
166
|
|
|
140
167
|
if __name__ == '__main__':
|
|
@@ -68,6 +68,65 @@ def _validate_role(role_name: str):
|
|
|
68
68
|
sys.exit(1)
|
|
69
69
|
|
|
70
70
|
|
|
71
|
+
def _check_effort_valid(scope_state, cli_name: str, role_name: str, effort: str) -> bool:
|
|
72
|
+
"""Check effort against the role's currently-assigned model's provider on
|
|
73
|
+
cli_name. Prints the provider name and its valid effort list on failure.
|
|
74
|
+
Returns True/False — does not exit (callers decide fatal vs. non-fatal).
|
|
75
|
+
|
|
76
|
+
NO cross-provider mapping/translation — the value is checked against exactly
|
|
77
|
+
the provider that serves the role's current model, nothing more.
|
|
78
|
+
"""
|
|
79
|
+
from ..registries.model_registry import load_model_registry
|
|
80
|
+
from ..registries.cli_registry import load_registry
|
|
81
|
+
from ..registries.provider_registry import load_provider_registry
|
|
82
|
+
|
|
83
|
+
model_id = scope_state.clis[cli_name].role_models.get(role_name)
|
|
84
|
+
if not model_id:
|
|
85
|
+
print(f"No model assigned to role '{role_name}' for CLI '{cli_name}'.")
|
|
86
|
+
print("Set a model first with `agent-notes config role-model`.")
|
|
87
|
+
return False
|
|
88
|
+
|
|
89
|
+
model_registry = load_model_registry()
|
|
90
|
+
try:
|
|
91
|
+
model = model_registry.get(model_id)
|
|
92
|
+
except KeyError:
|
|
93
|
+
print(f"Unknown model '{model_id}' assigned to role '{role_name}'.")
|
|
94
|
+
return False
|
|
95
|
+
|
|
96
|
+
cli_registry = load_registry()
|
|
97
|
+
try:
|
|
98
|
+
backend = cli_registry.get(cli_name)
|
|
99
|
+
except KeyError:
|
|
100
|
+
print(f"Unknown CLI '{cli_name}'.")
|
|
101
|
+
return False
|
|
102
|
+
|
|
103
|
+
resolved = backend.first_alias_for(model.aliases)
|
|
104
|
+
if resolved is None:
|
|
105
|
+
print(f"Model '{model_id}' has no compatible provider for CLI '{cli_name}'.")
|
|
106
|
+
return False
|
|
107
|
+
provider_name, _alias = resolved
|
|
108
|
+
|
|
109
|
+
provider_registry = load_provider_registry()
|
|
110
|
+
try:
|
|
111
|
+
provider = provider_registry.get(provider_name)
|
|
112
|
+
except KeyError:
|
|
113
|
+
print(f"Provider '{provider_name}' does not support effort configuration.")
|
|
114
|
+
return False
|
|
115
|
+
|
|
116
|
+
if effort not in provider.efforts:
|
|
117
|
+
print(f"Invalid effort '{effort}' for provider '{provider_name}'.")
|
|
118
|
+
print(f"Valid efforts for {provider_name}: {', '.join(provider.efforts)}")
|
|
119
|
+
return False
|
|
120
|
+
|
|
121
|
+
return True
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def _validate_effort(scope_state, cli_name: str, role_name: str, effort: str) -> None:
|
|
125
|
+
"""Validate effort, exiting with the printed error on failure."""
|
|
126
|
+
if not _check_effort_valid(scope_state, cli_name, role_name, effort):
|
|
127
|
+
sys.exit(1)
|
|
128
|
+
|
|
129
|
+
|
|
71
130
|
def _state_snapshot(state) -> str:
|
|
72
131
|
"""Return a compact JSON snapshot of state for diffing."""
|
|
73
132
|
from ..services.state_store import _state_to_dict
|
|
@@ -156,6 +215,37 @@ def role_model(role_name: str, model_id: str, cli_filter: Optional[str] = None)
|
|
|
156
215
|
_apply_and_regenerate(state, before)
|
|
157
216
|
|
|
158
217
|
|
|
218
|
+
def role_effort(role_name: str, effort: str, cli_filter: Optional[str] = None) -> None:
|
|
219
|
+
"""Set role→effort for one or both CLIs. Validates against the role's current
|
|
220
|
+
model's provider, diffs, prompts, applies."""
|
|
221
|
+
state = _load_state()
|
|
222
|
+
before = _state_snapshot(state)
|
|
223
|
+
|
|
224
|
+
_validate_role(role_name)
|
|
225
|
+
|
|
226
|
+
scope, project_path, scope_state = _get_scope_state(state)
|
|
227
|
+
|
|
228
|
+
if cli_filter and cli_filter not in ("both",):
|
|
229
|
+
# Single CLI
|
|
230
|
+
target_clis = [cli_filter]
|
|
231
|
+
for cli_name in target_clis:
|
|
232
|
+
if cli_name not in scope_state.clis:
|
|
233
|
+
print(f"CLI '{cli_name}' not in {scope} installation.")
|
|
234
|
+
print(f"Installed CLIs: {', '.join(scope_state.clis.keys())}")
|
|
235
|
+
sys.exit(1)
|
|
236
|
+
else:
|
|
237
|
+
target_clis = list(scope_state.clis.keys())
|
|
238
|
+
|
|
239
|
+
for cli_name in target_clis:
|
|
240
|
+
_validate_effort(scope_state, cli_name, role_name, effort)
|
|
241
|
+
|
|
242
|
+
for cli_name in target_clis:
|
|
243
|
+
scope_state.clis[cli_name].role_efforts[role_name] = effort
|
|
244
|
+
print(f"Set {cli_name}: {role_name} -> {effort}")
|
|
245
|
+
|
|
246
|
+
_apply_and_regenerate(state, before)
|
|
247
|
+
|
|
248
|
+
|
|
159
249
|
def role_agent(role_name: str, agent_name: str, cli_filter: Optional[str] = None) -> None:
|
|
160
250
|
"""Set role→agent assignment (which agent files carry a given role)."""
|
|
161
251
|
# Note: in the current data model, agent-to-role mapping is in agents.yaml (source)
|
|
@@ -243,6 +333,17 @@ def show(state=None) -> None:
|
|
|
243
333
|
else:
|
|
244
334
|
print(" (no role assignments)")
|
|
245
335
|
|
|
336
|
+
if backend_state.role_efforts:
|
|
337
|
+
print(" Effort:")
|
|
338
|
+
for role_name in sorted(backend_state.role_efforts):
|
|
339
|
+
effort = backend_state.role_efforts[role_name]
|
|
340
|
+
try:
|
|
341
|
+
role = role_registry.get(role_name)
|
|
342
|
+
role_label = role.label
|
|
343
|
+
except KeyError:
|
|
344
|
+
role_label = role_name
|
|
345
|
+
print(f" {role_label:<20} {effort}")
|
|
346
|
+
|
|
246
347
|
|
|
247
348
|
# ── Interactive wizard ───────────────────────────────────────────────────────
|
|
248
349
|
|
|
@@ -313,6 +414,68 @@ def _wizard_role_model(state, before: str) -> bool:
|
|
|
313
414
|
return True
|
|
314
415
|
|
|
315
416
|
|
|
417
|
+
def _wizard_role_effort(state, before: str) -> bool:
|
|
418
|
+
"""Branch 7: interactive role→effort reassignment. Returns True if changes were applied."""
|
|
419
|
+
from ..registries.cli_registry import load_registry
|
|
420
|
+
from ..registries.role_registry import load_role_registry
|
|
421
|
+
from ..services.ui import _safe_input
|
|
422
|
+
|
|
423
|
+
scope, project_path, scope_state = _get_scope_state(state)
|
|
424
|
+
|
|
425
|
+
cli_registry = load_registry()
|
|
426
|
+
role_registry = load_role_registry()
|
|
427
|
+
|
|
428
|
+
# Show current
|
|
429
|
+
print("\nCurrent effort assignments:")
|
|
430
|
+
for cli_name, backend_state in sorted(scope_state.clis.items()):
|
|
431
|
+
try:
|
|
432
|
+
label = cli_registry.get(cli_name).label
|
|
433
|
+
except KeyError:
|
|
434
|
+
label = cli_name
|
|
435
|
+
print(f" {label.upper()}:")
|
|
436
|
+
for role_name in sorted(backend_state.role_efforts):
|
|
437
|
+
effort = backend_state.role_efforts[role_name]
|
|
438
|
+
print(f" {role_name:<20} {effort}")
|
|
439
|
+
|
|
440
|
+
cli_names = list(scope_state.clis.keys())
|
|
441
|
+
if len(cli_names) > 1:
|
|
442
|
+
cli_choice = _safe_input("\nWhich CLI? (claude / opencode / both) [both]: ", "both").strip().lower()
|
|
443
|
+
if cli_choice in ("both", ""):
|
|
444
|
+
target_clis = cli_names
|
|
445
|
+
elif cli_choice in cli_names:
|
|
446
|
+
target_clis = [cli_choice]
|
|
447
|
+
else:
|
|
448
|
+
print(f"Unknown CLI '{cli_choice}'. No changes made.")
|
|
449
|
+
return False
|
|
450
|
+
else:
|
|
451
|
+
target_clis = cli_names
|
|
452
|
+
|
|
453
|
+
role_names = role_registry.names()
|
|
454
|
+
role_choice = _safe_input(
|
|
455
|
+
f"Which role? ({'/'.join(role_names)}): ", ""
|
|
456
|
+
).strip().lower()
|
|
457
|
+
if role_choice not in role_names:
|
|
458
|
+
print(f"Unknown role '{role_choice}'. No changes made.")
|
|
459
|
+
return False
|
|
460
|
+
|
|
461
|
+
effort_choice = _safe_input(f"New effort: ", "").strip().lower()
|
|
462
|
+
if not effort_choice:
|
|
463
|
+
print("No effort entered. No changes made.")
|
|
464
|
+
return False
|
|
465
|
+
|
|
466
|
+
for cli_name in target_clis:
|
|
467
|
+
if not _check_effort_valid(scope_state, cli_name, role_choice, effort_choice):
|
|
468
|
+
print("No changes made.")
|
|
469
|
+
return False
|
|
470
|
+
|
|
471
|
+
for cli_name in target_clis:
|
|
472
|
+
scope_state.clis[cli_name].role_efforts[role_choice] = effort_choice
|
|
473
|
+
print(f"Set {cli_name}: {role_choice} -> {effort_choice}")
|
|
474
|
+
|
|
475
|
+
_apply_and_regenerate(state, before)
|
|
476
|
+
return True
|
|
477
|
+
|
|
478
|
+
|
|
316
479
|
def _wizard_memory(state, before: str) -> bool:
|
|
317
480
|
"""Branch 3: interactive memory backend change."""
|
|
318
481
|
from ..services.ui import _safe_input, _path_input
|
|
@@ -427,6 +590,7 @@ def interactive_config() -> None:
|
|
|
427
590
|
print(" 4) Skill bundles")
|
|
428
591
|
print(" 5) Show full configuration (read-only)")
|
|
429
592
|
print(" 6) API keys / providers")
|
|
593
|
+
print(" 7) Role -> effort assignments")
|
|
430
594
|
print(" q) Quit")
|
|
431
595
|
|
|
432
596
|
try:
|
|
@@ -447,6 +611,8 @@ def interactive_config() -> None:
|
|
|
447
611
|
show(state)
|
|
448
612
|
elif choice == "6":
|
|
449
613
|
_wizard_providers()
|
|
614
|
+
elif choice == "7":
|
|
615
|
+
_wizard_role_effort(state, before)
|
|
450
616
|
elif choice == "q":
|
|
451
617
|
print("Quit.")
|
|
452
618
|
else:
|
|
@@ -493,6 +659,12 @@ def config(action: str = "wizard", args: Optional[list] = None, cli_filter: Opti
|
|
|
493
659
|
print("Usage: agent-notes config role-agent <role> <agent>")
|
|
494
660
|
sys.exit(1)
|
|
495
661
|
role_agent(args[0], args[1], cli_filter=cli_filter)
|
|
662
|
+
elif action == "role-effort":
|
|
663
|
+
# args: [role_name, effort]
|
|
664
|
+
if len(args) < 2:
|
|
665
|
+
print("Usage: agent-notes config role-effort [--cli <cli>] <role> <effort>")
|
|
666
|
+
sys.exit(1)
|
|
667
|
+
role_effort(args[0], args[1], cli_filter=cli_filter)
|
|
496
668
|
elif action == "providers":
|
|
497
669
|
_wizard_providers()
|
|
498
670
|
elif action == "provider":
|
|
@@ -510,5 +682,5 @@ def config(action: str = "wizard", args: Optional[list] = None, cli_filter: Opti
|
|
|
510
682
|
cost_report_toggle(args[0])
|
|
511
683
|
else:
|
|
512
684
|
print(f"Unknown config action: {action}")
|
|
513
|
-
print("Actions: wizard, show, role-model, role-agent, providers, provider, memory, cost-report")
|
|
685
|
+
print("Actions: wizard, show, role-model, role-agent, role-effort, providers, provider, memory, cost-report")
|
|
514
686
|
sys.exit(1)
|
|
@@ -48,6 +48,20 @@ def install(local: bool = False, copy: bool = False, reconfigure: bool = False,
|
|
|
48
48
|
print(f" CLIs: {', '.join(cli_labels)}")
|
|
49
49
|
print(f" Mode: {existing.mode}")
|
|
50
50
|
print()
|
|
51
|
+
# Re-render dist/ from the persisted state pins before verifying.
|
|
52
|
+
# After a pipx upgrade/reinstall the shipped dist/ carries package
|
|
53
|
+
# defaults; installed symlinks point into dist/, so without this
|
|
54
|
+
# rebuild the user's role_models/role_efforts pins would silently
|
|
55
|
+
# revert to defaults until the next build/regenerate.
|
|
56
|
+
print("Refreshing rendered files from saved configuration ...")
|
|
57
|
+
try:
|
|
58
|
+
from ..commands.build import build
|
|
59
|
+
from ..services.fs import silent_ops
|
|
60
|
+
with silent_ops():
|
|
61
|
+
build(scope=scope, project_path=project_path, profile_label=profile_label)
|
|
62
|
+
except Exception as e:
|
|
63
|
+
print(f"{Color.YELLOW}Warning: rebuild failed: {e}{Color.NC}")
|
|
64
|
+
print()
|
|
51
65
|
print("Verifying ...")
|
|
52
66
|
issues = _verify_install(existing, scope, project_path, registry)
|
|
53
67
|
if not issues:
|
|
@@ -78,11 +92,12 @@ def install(local: bool = False, copy: bool = False, reconfigure: bool = False,
|
|
|
78
92
|
print("Global installs always use symlinks.")
|
|
79
93
|
return
|
|
80
94
|
|
|
81
|
-
# Build first
|
|
95
|
+
# Build first — scope-aware so an existing state pin set for this scope
|
|
96
|
+
# (e.g. local install after a previous local wizard run) drives the render.
|
|
82
97
|
print("Building from source...")
|
|
83
98
|
try:
|
|
84
99
|
from ..commands.build import build
|
|
85
|
-
build()
|
|
100
|
+
build(scope=scope, project_path=project_path, profile_label=profile_label)
|
|
86
101
|
except Exception as e:
|
|
87
102
|
print(f"{Color.RED}Build failed: {e}{Color.NC}")
|
|
88
103
|
return
|
|
@@ -100,7 +100,7 @@ def do_migrate() -> None:
|
|
|
100
100
|
continue
|
|
101
101
|
dst_cat = vault / cat
|
|
102
102
|
dst_cat.mkdir(exist_ok=True)
|
|
103
|
-
for note in src_cat.glob("*.md"):
|
|
103
|
+
for note in sorted(src_cat.glob("*.md")):
|
|
104
104
|
dst = dst_cat / note.name
|
|
105
105
|
if dst.exists():
|
|
106
106
|
errors.append(f"collision: {note} -> {dst}")
|
|
@@ -126,7 +126,10 @@ def do_migrate() -> None:
|
|
|
126
126
|
cat_dir = vault / cat
|
|
127
127
|
if not cat_dir.exists():
|
|
128
128
|
continue
|
|
129
|
-
for
|
|
129
|
+
# Sort for deterministic ordering: on a same-date collision the
|
|
130
|
+
# earliest-named file keeps the clean base name and later ones get the
|
|
131
|
+
# HHMMSS suffix, regardless of filesystem glob order.
|
|
132
|
+
for note in sorted(cat_dir.glob("*.md")):
|
|
130
133
|
new_stem = _new_stem(note.stem, cat_dir, note)
|
|
131
134
|
if new_stem is None:
|
|
132
135
|
skipped += 1
|