agent-notes 2.32.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.
Files changed (352) hide show
  1. {agent_notes-2.32.0 → agent_notes-2.33.0}/PKG-INFO +15 -3
  2. {agent_notes-2.32.0 → agent_notes-2.33.0}/README.md +14 -2
  3. agent_notes-2.33.0/agent_notes/VERSION +1 -0
  4. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/cli.py +1 -1
  5. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/build.py +46 -19
  6. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/config.py +173 -1
  7. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/install.py +17 -2
  8. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/regenerate.py +7 -3
  9. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/__init__.py +102 -28
  10. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/_common.py +10 -0
  11. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/execute.py +95 -16
  12. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/orchestrator.py +47 -11
  13. agent_notes-2.33.0/agent_notes/data/models/claude-fable-5.yaml +15 -0
  14. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-haiku-4-5.yaml +1 -1
  15. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-8.yaml +1 -1
  16. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-sonnet-4-6.yaml +1 -1
  17. agent_notes-2.33.0/agent_notes/data/models/claude-sonnet-5.yaml +15 -0
  18. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/pricing.yaml +8 -0
  19. agent_notes-2.33.0/agent_notes/data/providers/anthropic.yaml +3 -0
  20. agent_notes-2.33.0/agent_notes/data/providers/openai.yaml +3 -0
  21. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/roles/orchestrator.yaml +3 -1
  22. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/roles/reasoner.yaml +3 -1
  23. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/roles/scout.yaml +3 -1
  24. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/roles/worker.yaml +3 -1
  25. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/code-review/SKILL.md +1 -1
  26. agent_notes-2.33.0/agent_notes/data/templates/__pycache__/__init__.cpython-312.pyc +0 -0
  27. agent_notes-2.33.0/agent_notes/data/templates/__pycache__/__init__.cpython-314.pyc +0 -0
  28. agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-312.pyc +0 -0
  29. agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-314.pyc +0 -0
  30. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/base.cpython-314.pyc +0 -0
  31. agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-312.pyc +0 -0
  32. agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
  33. agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-312.pyc +0 -0
  34. agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-314.pyc +0 -0
  35. agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-312.pyc +0 -0
  36. agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
  37. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/claude.py +4 -1
  38. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/codex.py +5 -11
  39. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/opencode.py +9 -1
  40. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/model.py +1 -1
  41. agent_notes-2.33.0/agent_notes/domain/provider.py +11 -0
  42. agent_notes-2.33.0/agent_notes/domain/role.py +20 -0
  43. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/state.py +1 -0
  44. agent_notes-2.33.0/agent_notes/registries/provider_registry.py +62 -0
  45. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/role_registry.py +3 -1
  46. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/fs.py +6 -1
  47. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/install_executor.py +7 -3
  48. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/install_plan.py +15 -0
  49. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/install_state_builder.py +9 -1
  50. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/installer.py +4 -1
  51. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/model_resolver.py +11 -3
  52. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/rendering.py +176 -20
  53. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/state_store.py +3 -0
  54. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes.egg-info/PKG-INFO +15 -3
  55. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes.egg-info/SOURCES.txt +22 -1
  56. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes.egg-info/top_level.txt +1 -0
  57. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_config_command.py +63 -0
  58. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_regenerate_command.py +45 -0
  59. agent_notes-2.33.0/tests/unit/commands/test_install_profile_rerender.py +53 -0
  60. agent_notes-2.33.0/tests/unit/commands/test_wizard_confirm_build_order.py +158 -0
  61. agent_notes-2.33.0/tests/unit/commands/test_wizard_effort_selection.py +61 -0
  62. agent_notes-2.33.0/tests/unit/commands/test_wizard_install_summary_display.py +71 -0
  63. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_orchestrator_skip.py +3 -3
  64. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_preflight.py +112 -11
  65. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_role_model_default.py +1 -1
  66. agent_notes-2.33.0/tests/unit/commands/test_wizard_role_ordering.py +137 -0
  67. agent_notes-2.33.0/tests/unit/registries/test_provider_registry.py +57 -0
  68. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/registries/test_registries.py +52 -0
  69. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_build_functions.py +37 -0
  70. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_fs.py +35 -0
  71. agent_notes-2.33.0/tests/unit/services/test_generate_agent_files_pins.py +226 -0
  72. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_plan.py +59 -0
  73. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_model_resolver_characterization.py +9 -6
  74. agent_notes-2.33.0/tests/unit/services/test_resolve_effort.py +383 -0
  75. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_state_store.py +45 -0
  76. agent_notes-2.33.0/tests/unit/templates/test_claude_frontmatter.py +46 -0
  77. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/templates/test_codex_frontmatter.py +28 -9
  78. agent_notes-2.33.0/tests/unit/templates/test_opencode_frontmatter.py +33 -0
  79. agent_notes-2.32.0/agent_notes/VERSION +0 -1
  80. agent_notes-2.32.0/agent_notes/data/templates/__pycache__/__init__.cpython-314.pyc +0 -0
  81. agent_notes-2.32.0/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-314.pyc +0 -0
  82. agent_notes-2.32.0/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
  83. agent_notes-2.32.0/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-314.pyc +0 -0
  84. agent_notes-2.32.0/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
  85. agent_notes-2.32.0/agent_notes/domain/role.py +0 -13
  86. {agent_notes-2.32.0 → agent_notes-2.33.0}/LICENSE +0 -0
  87. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/__init__.py +0 -0
  88. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/__main__.py +0 -0
  89. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/__init__.py +0 -0
  90. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/_install_helpers.py +0 -0
  91. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/doctor.py +0 -0
  92. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/hook.py +0 -0
  93. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/info.py +0 -0
  94. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/list.py +0 -0
  95. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/__init__.py +0 -0
  96. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/_common.py +0 -0
  97. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/migrate.py +0 -0
  98. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/notes.py +0 -0
  99. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/reset.py +0 -0
  100. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/transfer.py +0 -0
  101. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/vault.py +0 -0
  102. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/memory/wiki.py +0 -0
  103. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/set_role.py +0 -0
  104. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/uninstall.py +0 -0
  105. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/validate.py +0 -0
  106. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/cost_report.py +0 -0
  107. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/config.py +0 -0
  108. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/constants.py +0 -0
  109. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/agents.yaml +0 -0
  110. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/analyst.md +0 -0
  111. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/api-reviewer.md +0 -0
  112. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/architect.md +0 -0
  113. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/coder.md +0 -0
  114. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/database-specialist.md +0 -0
  115. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/debugger.md +0 -0
  116. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/devil.md +0 -0
  117. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/devops.md +0 -0
  118. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/explorer.md +0 -0
  119. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/integrations.md +0 -0
  120. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/lead.md +0 -0
  121. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/performance-profiler.md +0 -0
  122. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/refactorer.md +0 -0
  123. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/reviewer.md +0 -0
  124. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/security-auditor.md +0 -0
  125. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/cost_reporting.md +0 -0
  126. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/execution.md +0 -0
  127. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/guardrails.md +0 -0
  128. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/hard_limits.md +0 -0
  129. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/phase0.md +0 -0
  130. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/pipelines.md +0 -0
  131. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/review.md +0 -0
  132. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/verification.md +0 -0
  133. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/wiki_compile.md +0 -0
  134. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/system-auditor.md +0 -0
  135. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/tech-writer.md +0 -0
  136. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/test-runner.md +0 -0
  137. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/test-writer.md +0 -0
  138. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/agents/wiki-compiler.md +0 -0
  139. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/cli/claude.yaml +0 -0
  140. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/cli/codex.yaml +0 -0
  141. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/cli/copilot.yaml +0 -0
  142. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/cli/opencode.yaml +0 -0
  143. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/commands/brainstorm.md +0 -0
  144. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/commands/debug.md +0 -0
  145. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/commands/review.md +0 -0
  146. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/global-claude.md +0 -0
  147. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/global-codex.md +0 -0
  148. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/global-copilot.md +0 -0
  149. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/global-opencode.md +0 -0
  150. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/hooks/session-context.md.tpl +0 -0
  151. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-1.yaml +0 -0
  152. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-5.yaml +0 -0
  153. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-6.yaml +0 -0
  154. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-7.yaml +0 -0
  155. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-sonnet-4-5.yaml +0 -0
  156. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-sonnet-4.yaml +0 -0
  157. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/gpt-5-4-mini.yaml +0 -0
  158. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/gpt-5-4.yaml +0 -0
  159. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/models/gpt-5-5.yaml +0 -0
  160. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/plugin/claude.yaml +0 -0
  161. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/plugin/opencode-index.js.template +0 -0
  162. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/plugin/opencode.yaml +0 -0
  163. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/rules/code-quality.md +0 -0
  164. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/rules/no-ai-attribution.md +0 -0
  165. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/rules/safety.md +0 -0
  166. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/brainstorming/SKILL.md +0 -0
  167. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/chrome-test/SKILL.md +0 -0
  168. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/codebase-design/DEEPENING.md +0 -0
  169. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/codebase-design/DESIGN-IT-TWICE.md +0 -0
  170. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/codebase-design/SKILL.md +0 -0
  171. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/diagnosing-bugs/SKILL.md +0 -0
  172. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -0
  173. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/docker/SKILL.md +0 -0
  174. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/docker/compose.md +0 -0
  175. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/docker/dockerfile.md +0 -0
  176. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/domain-modeling/ADR-FORMAT.md +0 -0
  177. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/domain-modeling/CONTEXT-FORMAT.md +0 -0
  178. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/domain-modeling/SKILL.md +0 -0
  179. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/git/SKILL.md +0 -0
  180. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/grill-me/SKILL.md +0 -0
  181. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/grill-with-docs/SKILL.md +0 -0
  182. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/grilling/SKILL.md +0 -0
  183. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/handoff/SKILL.md +0 -0
  184. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/improve-codebase-architecture/HTML-REPORT.md +0 -0
  185. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/improve-codebase-architecture/SKILL.md +0 -0
  186. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/ingest/SKILL.md +0 -0
  187. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/migrate-memory/SKILL.md +0 -0
  188. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/obsidian-memory/SKILL.md +0 -0
  189. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/prototype/LOGIC.md +0 -0
  190. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/prototype/SKILL.md +0 -0
  191. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/prototype/UI.md +0 -0
  192. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/SKILL.md +0 -0
  193. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/controllers.md +0 -0
  194. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/frontend.md +0 -0
  195. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/infra.md +0 -0
  196. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/models.md +0 -0
  197. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/testing.md +0 -0
  198. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/views.md +0 -0
  199. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/refactoring-protocol/SKILL.md +0 -0
  200. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/research/SKILL.md +0 -0
  201. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/rsi/SKILL.md +0 -0
  202. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/setup-agent-tracker/SKILL.md +0 -0
  203. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/setup-agent-tracker/domain.md +0 -0
  204. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/setup-agent-tracker/issue-tracker-github.md +0 -0
  205. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/setup-agent-tracker/issue-tracker-gitlab.md +0 -0
  206. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/setup-agent-tracker/issue-tracker-local.md +0 -0
  207. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/setup-agent-tracker/triage-labels.md +0 -0
  208. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/tdd/SKILL.md +0 -0
  209. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/tdd/mocking.md +0 -0
  210. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/tdd/tests.md +0 -0
  211. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/to-spec/SKILL.md +0 -0
  212. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/to-tickets/SKILL.md +0 -0
  213. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/triage/AGENT-BRIEF.md +0 -0
  214. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/triage/OUT-OF-SCOPE.md +0 -0
  215. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/triage/SKILL.md +0 -0
  216. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/wayfinder/SKILL.md +0 -0
  217. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/writing-great-skills/GLOSSARY.md +0 -0
  218. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/skills/writing-great-skills/SKILL.md +0 -0
  219. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/__init__.py +0 -0
  220. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__init__.py +0 -0
  221. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/base.py +0 -0
  222. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/doctor_checks.py +0 -0
  223. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/__init__.py +0 -0
  224. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/agent.py +0 -0
  225. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/cli_backend.py +0 -0
  226. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/diagnostics.py +0 -0
  227. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/diff.py +0 -0
  228. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/rule.py +0 -0
  229. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/domain/skill.py +0 -0
  230. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/__init__.py +0 -0
  231. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/_base.py +0 -0
  232. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/agent_registry.py +0 -0
  233. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/cli_registry.py +0 -0
  234. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/model_registry.py +0 -0
  235. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/rule_registry.py +0 -0
  236. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/registries/skill_registry.py +0 -0
  237. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/scripts/__init__.py +0 -0
  238. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/scripts/_claude_backend.py +0 -0
  239. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/scripts/_formatting.py +0 -0
  240. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/scripts/_opencode_backend.py +0 -0
  241. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/scripts/_pricing.py +0 -0
  242. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/scripts/cost_report.py +0 -0
  243. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/__init__.py +0 -0
  244. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/_memory_utils.py +0 -0
  245. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/counts.py +0 -0
  246. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/credentials.py +0 -0
  247. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/__init__.py +0 -0
  248. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/_checks.py +0 -0
  249. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/_display.py +0 -0
  250. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/_fix.py +0 -0
  251. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/diff.py +0 -0
  252. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/local_backend.py +0 -0
  253. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/memory_backend.py +0 -0
  254. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/memory_router.py +0 -0
  255. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/migrations/__init__.py +0 -0
  256. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/obsidian_backend.py +0 -0
  257. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/session_context.py +0 -0
  258. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/settings_writer.py +0 -0
  259. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/ui.py +0 -0
  260. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/user_config.py +0 -0
  261. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/validation.py +0 -0
  262. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/__init__.py +0 -0
  263. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/_wiki_utils.py +0 -0
  264. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_index.py +0 -0
  265. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_ingest.py +0 -0
  266. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_lint.py +0 -0
  267. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_query.py +0 -0
  268. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_storage.py +0 -0
  269. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes/services/wiki_backend.py +0 -0
  270. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes.egg-info/dependency_links.txt +0 -0
  271. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes.egg-info/entry_points.txt +0 -0
  272. {agent_notes-2.32.0 → agent_notes-2.33.0}/agent_notes.egg-info/requires.txt +0 -0
  273. {agent_notes-2.32.0 → agent_notes-2.33.0}/pyproject.toml +0 -0
  274. {agent_notes-2.32.0 → agent_notes-2.33.0}/setup.cfg +0 -0
  275. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/conftest.py +0 -0
  276. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/__init__.py +0 -0
  277. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/__init__.py +0 -0
  278. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_doctor_command.py +0 -0
  279. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_info_command.py +0 -0
  280. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_install_command.py +0 -0
  281. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_install_roundtrip.py +0 -0
  282. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_list_command.py +0 -0
  283. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_uninstall_command.py +0 -0
  284. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_uninstall_full_hooks.py +0 -0
  285. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_validate_command.py +0 -0
  286. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_validate_path_filter.py +0 -0
  287. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/commands/test_wizard_happy_path.py +0 -0
  288. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/memory/__init__.py +0 -0
  289. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/memory/test_memory_add_local_backend.py +0 -0
  290. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/memory/test_memory_command.py +0 -0
  291. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/scripts/__init__.py +0 -0
  292. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/functional/scripts/test_release_script.py +0 -0
  293. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/__init__.py +0 -0
  294. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/build_output/__init__.py +0 -0
  295. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/build_output/test_build_output.py +0 -0
  296. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/install/__init__.py +0 -0
  297. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/install/test_install_methods.py +0 -0
  298. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/plugin_builders/__init__.py +0 -0
  299. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/integration/plugin_builders/test_plugin_builders.py +0 -0
  300. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/plugins/__init__.py +0 -0
  301. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/plugins/claude/__init__.py +0 -0
  302. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/plugins/claude/test_agents.py +0 -0
  303. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/plugins/codex/__init__.py +0 -0
  304. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/plugins/codex/test_agents.py +0 -0
  305. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/plugins/test_skills.py +0 -0
  306. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/__init__.py +0 -0
  307. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/__init__.py +0 -0
  308. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_cost_report_subcommand.py +0 -0
  309. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_count_agents.py +0 -0
  310. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_guard_credentials.py +0 -0
  311. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_info.py +0 -0
  312. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_memory_add_description.py +0 -0
  313. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_memory_imports.py +0 -0
  314. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_memory_migrate.py +0 -0
  315. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_precompact_memory_bridge.py +0 -0
  316. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_imports.py +0 -0
  317. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_steps.py +0 -0
  318. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/commands/wizard/test_cost_report_step.py +0 -0
  319. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/registries/__init__.py +0 -0
  320. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/registries/test_cli_registry.py +0 -0
  321. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/__init__.py +0 -0
  322. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_cache_write_pricing.py +0 -0
  323. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_cost_report.py +0 -0
  324. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_cost_report_scoping.py +0 -0
  325. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_formatting_tty.py +0 -0
  326. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_opencode_backend_connection.py +0 -0
  327. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_opencode_backend_pricing.py +0 -0
  328. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/scripts/test_time_aggregation.py +0 -0
  329. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/__init__.py +0 -0
  330. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_credential_filter.py +0 -0
  331. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_credentials.py +0 -0
  332. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_codex.py +0 -0
  333. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_credential_guard.py +0 -0
  334. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_hook_quoting.py +0 -0
  335. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_hooks.py +0 -0
  336. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_precompact_hook.py +0 -0
  337. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_local_backend.py +0 -0
  338. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_memory_backend.py +0 -0
  339. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_memory_backend_io.py +0 -0
  340. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_memory_router.py +0 -0
  341. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_rendering_includes.py +0 -0
  342. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_session_context.py +0 -0
  343. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_settings_writer.py +0 -0
  344. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_skill_filtering.py +0 -0
  345. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_user_config_cost_report.py +0 -0
  346. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_validation.py +0 -0
  347. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_wiki_atomic_write.py +0 -0
  348. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_wiki_backend.py +0 -0
  349. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/services/test_wiki_imports.py +0 -0
  350. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/templates/__init__.py +0 -0
  351. {agent_notes-2.32.0 → agent_notes-2.33.0}/tests/unit/test_import_health.py +0 -0
  352. {agent_notes-2.32.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.32.0
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
@@ -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.6 reasons, Sonnet 4.6 executes, Haiku 4.5 scouts.**
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 ($15/1M tokens), Sonnet executes ($3/1M), Haiku scouts ($0.80/1M).
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
  ---
@@ -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.6 reasons, Sonnet 4.6 executes, Haiku 4.5 scouts.**
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 ($15/1M tokens), Sonnet executes ($3/1M), Haiku scouts ($0.80/1M).
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
  ---
@@ -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 build() -> None:
93
- """Build agent configuration files from source."""
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 ..config import ROOT
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
- print(f"\nGenerated {len(all_files)} files:")
126
-
127
- total_lines = 0
128
- for file_path in sorted(all_files):
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
@@ -104,7 +104,8 @@ def regenerate(scope: Optional[str] = None, cli: Optional[str] = None, local: bo
104
104
  {}, # empty tiers - state-driven only
105
105
  state=current_state,
106
106
  scope=scope,
107
- project_path=project_path
107
+ project_path=project_path,
108
+ profile_label=profile_label
108
109
  )
109
110
  # Count files for this CLI
110
111
  try:
@@ -136,24 +137,27 @@ def regenerate(scope: Optional[str] = None, cli: Optional[str] = None, local: bo
136
137
 
137
138
  # Update installed manifest to reflect current state
138
139
  try:
139
- # Get current role_models and overrides from state to preserve them
140
+ # Get current role_models/role_efforts and overrides from state to preserve them
140
141
  existing_role_models = {}
142
+ existing_role_efforts = {}
141
143
  folder_overrides = {}
142
144
  global_home_override = None
143
145
  for cli_name, backend_state in scope_state.clis.items():
144
146
  existing_role_models[cli_name] = backend_state.role_models
147
+ existing_role_efforts[cli_name] = backend_state.role_efforts
145
148
  if backend_state.local_dir_override:
146
149
  folder_overrides[cli_name] = backend_state.local_dir_override
147
150
  if backend_state.global_home_override:
148
151
  global_home_override = backend_state.global_home_override
149
152
 
150
- # Build new state with current files but preserve role_models
153
+ # Build new state with current files but preserve role_models/role_efforts
151
154
  new_state = build_install_state(
152
155
  mode=scope_state.mode,
153
156
  scope=scope,
154
157
  repo_root=PKG_DIR.parent,
155
158
  project_path=project_path,
156
159
  role_models=existing_role_models,
160
+ role_efforts=existing_role_efforts,
157
161
  profile_label=profile_label,
158
162
  folder_overrides=folder_overrides or None,
159
163
  global_home_override=global_home_override,