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.
Files changed (366) hide show
  1. {agent_notes-2.30.0 → agent_notes-2.33.0}/PKG-INFO +36 -21
  2. {agent_notes-2.30.0 → agent_notes-2.33.0}/README.md +35 -20
  3. agent_notes-2.33.0/agent_notes/VERSION +1 -0
  4. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/cli.py +1 -1
  5. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/build.py +46 -19
  6. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/config.py +173 -1
  7. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/install.py +17 -2
  8. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/migrate.py +5 -2
  9. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/regenerate.py +7 -3
  10. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/__init__.py +102 -28
  11. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/_common.py +10 -0
  12. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/execute.py +95 -16
  13. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/orchestrator.py +47 -11
  14. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/commands/debug.md +1 -1
  15. agent_notes-2.33.0/agent_notes/data/models/claude-fable-5.yaml +15 -0
  16. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-haiku-4-5.yaml +1 -1
  17. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-8.yaml +1 -1
  18. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-sonnet-4-6.yaml +1 -1
  19. agent_notes-2.33.0/agent_notes/data/models/claude-sonnet-5.yaml +15 -0
  20. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/plugin/claude.yaml +13 -4
  21. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/pricing.yaml +8 -0
  22. agent_notes-2.33.0/agent_notes/data/providers/anthropic.yaml +3 -0
  23. agent_notes-2.33.0/agent_notes/data/providers/openai.yaml +3 -0
  24. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/roles/orchestrator.yaml +3 -1
  25. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/roles/reasoner.yaml +3 -1
  26. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/roles/scout.yaml +3 -1
  27. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/roles/worker.yaml +3 -1
  28. agent_notes-2.33.0/agent_notes/data/rules/no-ai-attribution.md +27 -0
  29. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/chrome-test/SKILL.md +1 -1
  30. agent_notes-2.33.0/agent_notes/data/skills/code-review/SKILL.md +90 -0
  31. agent_notes-2.33.0/agent_notes/data/skills/codebase-design/DEEPENING.md +37 -0
  32. agent_notes-2.33.0/agent_notes/data/skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
  33. agent_notes-2.33.0/agent_notes/data/skills/codebase-design/SKILL.md +115 -0
  34. agent_notes-2.33.0/agent_notes/data/skills/diagnosing-bugs/SKILL.md +135 -0
  35. agent_notes-2.33.0/agent_notes/data/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
  36. agent_notes-2.33.0/agent_notes/data/skills/domain-modeling/ADR-FORMAT.md +47 -0
  37. agent_notes-2.33.0/agent_notes/data/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  38. agent_notes-2.33.0/agent_notes/data/skills/domain-modeling/SKILL.md +75 -0
  39. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/git/SKILL.md +1 -0
  40. agent_notes-2.33.0/agent_notes/data/skills/grill-me/SKILL.md +8 -0
  41. agent_notes-2.33.0/agent_notes/data/skills/grill-with-docs/SKILL.md +8 -0
  42. agent_notes-2.33.0/agent_notes/data/skills/grilling/SKILL.md +13 -0
  43. agent_notes-2.33.0/agent_notes/data/skills/handoff/SKILL.md +17 -0
  44. agent_notes-2.33.0/agent_notes/data/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
  45. agent_notes-2.33.0/agent_notes/data/skills/improve-codebase-architecture/SKILL.md +67 -0
  46. agent_notes-2.33.0/agent_notes/data/skills/prototype/LOGIC.md +79 -0
  47. agent_notes-2.33.0/agent_notes/data/skills/prototype/SKILL.md +27 -0
  48. agent_notes-2.33.0/agent_notes/data/skills/prototype/UI.md +112 -0
  49. agent_notes-2.33.0/agent_notes/data/skills/research/SKILL.md +13 -0
  50. agent_notes-2.33.0/agent_notes/data/skills/setup-agent-tracker/SKILL.md +117 -0
  51. agent_notes-2.33.0/agent_notes/data/skills/setup-agent-tracker/domain.md +51 -0
  52. agent_notes-2.33.0/agent_notes/data/skills/setup-agent-tracker/issue-tracker-github.md +45 -0
  53. agent_notes-2.33.0/agent_notes/data/skills/setup-agent-tracker/issue-tracker-gitlab.md +46 -0
  54. agent_notes-2.33.0/agent_notes/data/skills/setup-agent-tracker/issue-tracker-local.md +30 -0
  55. agent_notes-2.33.0/agent_notes/data/skills/setup-agent-tracker/triage-labels.md +15 -0
  56. agent_notes-2.33.0/agent_notes/data/skills/tdd/SKILL.md +37 -0
  57. agent_notes-2.33.0/agent_notes/data/skills/tdd/mocking.md +59 -0
  58. agent_notes-2.33.0/agent_notes/data/skills/tdd/tests.md +77 -0
  59. agent_notes-2.33.0/agent_notes/data/skills/to-spec/SKILL.md +76 -0
  60. agent_notes-2.33.0/agent_notes/data/skills/to-tickets/SKILL.md +108 -0
  61. agent_notes-2.33.0/agent_notes/data/skills/triage/AGENT-BRIEF.md +207 -0
  62. agent_notes-2.33.0/agent_notes/data/skills/triage/OUT-OF-SCOPE.md +105 -0
  63. agent_notes-2.33.0/agent_notes/data/skills/triage/SKILL.md +113 -0
  64. agent_notes-2.33.0/agent_notes/data/skills/wayfinder/SKILL.md +128 -0
  65. agent_notes-2.33.0/agent_notes/data/skills/writing-great-skills/GLOSSARY.md +201 -0
  66. agent_notes-2.33.0/agent_notes/data/skills/writing-great-skills/SKILL.md +84 -0
  67. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/base.cpython-314.pyc +0 -0
  68. agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
  69. agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-314.pyc +0 -0
  70. agent_notes-2.33.0/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
  71. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/claude.py +4 -1
  72. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/codex.py +5 -11
  73. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/opencode.py +9 -1
  74. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/model.py +1 -1
  75. agent_notes-2.33.0/agent_notes/domain/provider.py +11 -0
  76. agent_notes-2.33.0/agent_notes/domain/role.py +20 -0
  77. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/state.py +1 -0
  78. agent_notes-2.33.0/agent_notes/registries/provider_registry.py +62 -0
  79. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/role_registry.py +3 -1
  80. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/fs.py +6 -1
  81. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/install_executor.py +7 -3
  82. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/install_plan.py +15 -0
  83. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/install_state_builder.py +9 -1
  84. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/installer.py +4 -1
  85. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/model_resolver.py +11 -3
  86. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/rendering.py +176 -20
  87. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/state_store.py +3 -0
  88. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes.egg-info/PKG-INFO +36 -21
  89. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes.egg-info/SOURCES.txt +45 -8
  90. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes.egg-info/top_level.txt +1 -0
  91. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_config_command.py +63 -0
  92. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_regenerate_command.py +45 -0
  93. agent_notes-2.33.0/tests/unit/commands/test_install_profile_rerender.py +53 -0
  94. agent_notes-2.33.0/tests/unit/commands/test_wizard_confirm_build_order.py +158 -0
  95. agent_notes-2.33.0/tests/unit/commands/test_wizard_effort_selection.py +61 -0
  96. agent_notes-2.33.0/tests/unit/commands/test_wizard_install_summary_display.py +71 -0
  97. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_orchestrator_skip.py +3 -3
  98. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_preflight.py +112 -11
  99. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_role_model_default.py +1 -1
  100. agent_notes-2.33.0/tests/unit/commands/test_wizard_role_ordering.py +137 -0
  101. agent_notes-2.33.0/tests/unit/registries/test_provider_registry.py +57 -0
  102. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/registries/test_registries.py +52 -0
  103. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_build_functions.py +37 -0
  104. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_fs.py +35 -0
  105. agent_notes-2.33.0/tests/unit/services/test_generate_agent_files_pins.py +226 -0
  106. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_plan.py +59 -0
  107. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_model_resolver_characterization.py +9 -6
  108. agent_notes-2.33.0/tests/unit/services/test_resolve_effort.py +383 -0
  109. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_session_context.py +4 -4
  110. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_state_store.py +45 -0
  111. agent_notes-2.33.0/tests/unit/templates/test_claude_frontmatter.py +46 -0
  112. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/templates/test_codex_frontmatter.py +28 -9
  113. agent_notes-2.33.0/tests/unit/templates/test_opencode_frontmatter.py +33 -0
  114. agent_notes-2.30.0/agent_notes/VERSION +0 -1
  115. agent_notes-2.30.0/agent_notes/data/skills/caveman/SKILL.md +0 -28
  116. agent_notes-2.30.0/agent_notes/data/skills/code-review/SKILL.md +0 -72
  117. agent_notes-2.30.0/agent_notes/data/skills/debugging-protocol/SKILL.md +0 -70
  118. agent_notes-2.30.0/agent_notes/data/skills/grill-me/SKILL.md +0 -29
  119. agent_notes-2.30.0/agent_notes/data/skills/grill-with-docs/SKILL.md +0 -84
  120. agent_notes-2.30.0/agent_notes/data/skills/handoff/SKILL.md +0 -26
  121. agent_notes-2.30.0/agent_notes/data/skills/improve-codebase-architecture/SKILL.md +0 -51
  122. agent_notes-2.30.0/agent_notes/data/skills/prototype/LOGIC.md +0 -47
  123. agent_notes-2.30.0/agent_notes/data/skills/prototype/SKILL.md +0 -29
  124. agent_notes-2.30.0/agent_notes/data/skills/prototype/UI.md +0 -45
  125. agent_notes-2.30.0/agent_notes/data/skills/setup-project-context/SKILL.md +0 -67
  126. agent_notes-2.30.0/agent_notes/data/skills/tdd/SKILL.md +0 -73
  127. agent_notes-2.30.0/agent_notes/data/skills/to-issues/SKILL.md +0 -61
  128. agent_notes-2.30.0/agent_notes/data/skills/to-prd/SKILL.md +0 -49
  129. agent_notes-2.30.0/agent_notes/data/skills/write-a-skill/SKILL.md +0 -72
  130. agent_notes-2.30.0/agent_notes/data/skills/zoom-out/SKILL.md +0 -7
  131. agent_notes-2.30.0/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
  132. agent_notes-2.30.0/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-314.pyc +0 -0
  133. agent_notes-2.30.0/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
  134. agent_notes-2.30.0/agent_notes/domain/role.py +0 -13
  135. {agent_notes-2.30.0 → agent_notes-2.33.0}/LICENSE +0 -0
  136. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/__init__.py +0 -0
  137. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/__main__.py +0 -0
  138. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/__init__.py +0 -0
  139. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/_install_helpers.py +0 -0
  140. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/doctor.py +0 -0
  141. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/hook.py +0 -0
  142. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/info.py +0 -0
  143. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/list.py +0 -0
  144. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/__init__.py +0 -0
  145. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/_common.py +0 -0
  146. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/notes.py +0 -0
  147. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/reset.py +0 -0
  148. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/transfer.py +0 -0
  149. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/vault.py +0 -0
  150. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/memory/wiki.py +0 -0
  151. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/set_role.py +0 -0
  152. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/uninstall.py +0 -0
  153. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/validate.py +0 -0
  154. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/commands/wizard/cost_report.py +0 -0
  155. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/config.py +0 -0
  156. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/constants.py +0 -0
  157. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/agents.yaml +0 -0
  158. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/analyst.md +0 -0
  159. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/api-reviewer.md +0 -0
  160. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/architect.md +0 -0
  161. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/coder.md +0 -0
  162. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/database-specialist.md +0 -0
  163. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/debugger.md +0 -0
  164. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/devil.md +0 -0
  165. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/devops.md +0 -0
  166. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/explorer.md +0 -0
  167. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/integrations.md +0 -0
  168. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/lead.md +0 -0
  169. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/performance-profiler.md +0 -0
  170. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/refactorer.md +0 -0
  171. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/reviewer.md +0 -0
  172. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/security-auditor.md +0 -0
  173. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/cost_reporting.md +0 -0
  174. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/execution.md +0 -0
  175. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/guardrails.md +0 -0
  176. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/hard_limits.md +0 -0
  177. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/phase0.md +0 -0
  178. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/pipelines.md +0 -0
  179. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/review.md +0 -0
  180. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/verification.md +0 -0
  181. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/shared/wiki_compile.md +0 -0
  182. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/system-auditor.md +0 -0
  183. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/tech-writer.md +0 -0
  184. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/test-runner.md +0 -0
  185. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/test-writer.md +0 -0
  186. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/agents/wiki-compiler.md +0 -0
  187. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/cli/claude.yaml +0 -0
  188. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/cli/codex.yaml +0 -0
  189. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/cli/copilot.yaml +0 -0
  190. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/cli/opencode.yaml +0 -0
  191. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/commands/brainstorm.md +0 -0
  192. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/commands/review.md +0 -0
  193. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/global-claude.md +0 -0
  194. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/global-codex.md +0 -0
  195. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/global-copilot.md +0 -0
  196. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/global-opencode.md +0 -0
  197. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/hooks/session-context.md.tpl +0 -0
  198. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-1.yaml +0 -0
  199. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-5.yaml +0 -0
  200. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-6.yaml +0 -0
  201. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-opus-4-7.yaml +0 -0
  202. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-sonnet-4-5.yaml +0 -0
  203. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/claude-sonnet-4.yaml +0 -0
  204. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/gpt-5-4-mini.yaml +0 -0
  205. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/gpt-5-4.yaml +0 -0
  206. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/models/gpt-5-5.yaml +0 -0
  207. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/plugin/opencode-index.js.template +0 -0
  208. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/plugin/opencode.yaml +0 -0
  209. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/rules/code-quality.md +0 -0
  210. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/rules/safety.md +0 -0
  211. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/brainstorming/SKILL.md +0 -0
  212. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/docker/SKILL.md +0 -0
  213. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/docker/compose.md +0 -0
  214. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/docker/dockerfile.md +0 -0
  215. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/ingest/SKILL.md +0 -0
  216. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/migrate-memory/SKILL.md +0 -0
  217. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/obsidian-memory/SKILL.md +0 -0
  218. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/SKILL.md +0 -0
  219. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/controllers.md +0 -0
  220. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/frontend.md +0 -0
  221. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/infra.md +0 -0
  222. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/models.md +0 -0
  223. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/testing.md +0 -0
  224. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rails/views.md +0 -0
  225. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/refactoring-protocol/SKILL.md +0 -0
  226. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/skills/rsi/SKILL.md +0 -0
  227. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/__init__.py +0 -0
  228. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/__pycache__/__init__.cpython-312.pyc +0 -0
  229. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/__pycache__/__init__.cpython-314.pyc +0 -0
  230. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__init__.py +0 -0
  231. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-312.pyc +0 -0
  232. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-314.pyc +0 -0
  233. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-312.pyc +0 -0
  234. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/codex.cpython-312.pyc +0 -0
  235. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-312.pyc +0 -0
  236. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/data/templates/frontmatter/base.py +0 -0
  237. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/doctor_checks.py +0 -0
  238. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/__init__.py +0 -0
  239. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/agent.py +0 -0
  240. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/cli_backend.py +0 -0
  241. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/diagnostics.py +0 -0
  242. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/diff.py +0 -0
  243. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/rule.py +0 -0
  244. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/domain/skill.py +0 -0
  245. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/__init__.py +0 -0
  246. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/_base.py +0 -0
  247. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/agent_registry.py +0 -0
  248. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/cli_registry.py +0 -0
  249. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/model_registry.py +0 -0
  250. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/rule_registry.py +0 -0
  251. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/registries/skill_registry.py +0 -0
  252. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/scripts/__init__.py +0 -0
  253. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/scripts/_claude_backend.py +0 -0
  254. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/scripts/_formatting.py +0 -0
  255. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/scripts/_opencode_backend.py +0 -0
  256. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/scripts/_pricing.py +0 -0
  257. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/scripts/cost_report.py +0 -0
  258. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/__init__.py +0 -0
  259. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/_memory_utils.py +0 -0
  260. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/counts.py +0 -0
  261. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/credentials.py +0 -0
  262. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/__init__.py +0 -0
  263. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/_checks.py +0 -0
  264. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/_display.py +0 -0
  265. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/diagnostics/_fix.py +0 -0
  266. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/diff.py +0 -0
  267. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/local_backend.py +0 -0
  268. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/memory_backend.py +0 -0
  269. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/memory_router.py +0 -0
  270. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/migrations/__init__.py +0 -0
  271. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/obsidian_backend.py +0 -0
  272. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/session_context.py +0 -0
  273. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/settings_writer.py +0 -0
  274. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/ui.py +0 -0
  275. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/user_config.py +0 -0
  276. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/validation.py +0 -0
  277. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/__init__.py +0 -0
  278. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/_wiki_utils.py +0 -0
  279. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_index.py +0 -0
  280. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_ingest.py +0 -0
  281. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_lint.py +0 -0
  282. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_query.py +0 -0
  283. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki/wiki_storage.py +0 -0
  284. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes/services/wiki_backend.py +0 -0
  285. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes.egg-info/dependency_links.txt +0 -0
  286. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes.egg-info/entry_points.txt +0 -0
  287. {agent_notes-2.30.0 → agent_notes-2.33.0}/agent_notes.egg-info/requires.txt +0 -0
  288. {agent_notes-2.30.0 → agent_notes-2.33.0}/pyproject.toml +0 -0
  289. {agent_notes-2.30.0 → agent_notes-2.33.0}/setup.cfg +0 -0
  290. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/conftest.py +0 -0
  291. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/__init__.py +0 -0
  292. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/__init__.py +0 -0
  293. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_doctor_command.py +0 -0
  294. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_info_command.py +0 -0
  295. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_install_command.py +0 -0
  296. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_install_roundtrip.py +0 -0
  297. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_list_command.py +0 -0
  298. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_uninstall_command.py +0 -0
  299. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_uninstall_full_hooks.py +0 -0
  300. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_validate_command.py +0 -0
  301. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_validate_path_filter.py +0 -0
  302. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/commands/test_wizard_happy_path.py +0 -0
  303. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/memory/__init__.py +0 -0
  304. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/memory/test_memory_add_local_backend.py +0 -0
  305. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/memory/test_memory_command.py +0 -0
  306. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/scripts/__init__.py +0 -0
  307. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/functional/scripts/test_release_script.py +0 -0
  308. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/__init__.py +0 -0
  309. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/build_output/__init__.py +0 -0
  310. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/build_output/test_build_output.py +0 -0
  311. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/install/__init__.py +0 -0
  312. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/install/test_install_methods.py +0 -0
  313. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/plugin_builders/__init__.py +0 -0
  314. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/integration/plugin_builders/test_plugin_builders.py +0 -0
  315. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/plugins/__init__.py +0 -0
  316. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/plugins/claude/__init__.py +0 -0
  317. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/plugins/claude/test_agents.py +0 -0
  318. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/plugins/codex/__init__.py +0 -0
  319. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/plugins/codex/test_agents.py +0 -0
  320. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/plugins/test_skills.py +0 -0
  321. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/__init__.py +0 -0
  322. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/__init__.py +0 -0
  323. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_cost_report_subcommand.py +0 -0
  324. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_count_agents.py +0 -0
  325. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_guard_credentials.py +0 -0
  326. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_info.py +0 -0
  327. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_memory_add_description.py +0 -0
  328. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_memory_imports.py +0 -0
  329. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_memory_migrate.py +0 -0
  330. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_precompact_memory_bridge.py +0 -0
  331. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_imports.py +0 -0
  332. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/test_wizard_steps.py +0 -0
  333. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/commands/wizard/test_cost_report_step.py +0 -0
  334. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/registries/__init__.py +0 -0
  335. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/registries/test_cli_registry.py +0 -0
  336. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/__init__.py +0 -0
  337. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_cache_write_pricing.py +0 -0
  338. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_cost_report.py +0 -0
  339. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_cost_report_scoping.py +0 -0
  340. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_formatting_tty.py +0 -0
  341. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_opencode_backend_connection.py +0 -0
  342. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_opencode_backend_pricing.py +0 -0
  343. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/scripts/test_time_aggregation.py +0 -0
  344. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/__init__.py +0 -0
  345. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_credential_filter.py +0 -0
  346. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_credentials.py +0 -0
  347. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_codex.py +0 -0
  348. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_credential_guard.py +0 -0
  349. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_hook_quoting.py +0 -0
  350. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_hooks.py +0 -0
  351. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_installer_precompact_hook.py +0 -0
  352. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_local_backend.py +0 -0
  353. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_memory_backend.py +0 -0
  354. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_memory_backend_io.py +0 -0
  355. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_memory_router.py +0 -0
  356. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_rendering_includes.py +0 -0
  357. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_settings_writer.py +0 -0
  358. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_skill_filtering.py +0 -0
  359. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_user_config_cost_report.py +0 -0
  360. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_validation.py +0 -0
  361. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_wiki_atomic_write.py +0 -0
  362. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_wiki_backend.py +0 -0
  363. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/services/test_wiki_imports.py +0 -0
  364. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/templates/__init__.py +0 -0
  365. {agent_notes-2.30.0 → agent_notes-2.33.0}/tests/unit/test_import_health.py +0 -0
  366. {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.30.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
@@ -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
- - 47+ on-demand skills (Rails, Docker, Git, Kamal, Process)
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.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
  ---
@@ -282,7 +294,7 @@ agent-notes memory lint # health-check
282
294
  <details>
283
295
  <summary>Skills</summary>
284
296
 
285
- 47+ on-demand knowledge modules across Rails, Docker, Kamal, Git, and Process. Run `agent-notes list skills` for the current list, or browse `agent_notes/data/skills/`.
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
- | Verbosity | Responses are bloated; context window fills with noise | `/caveman`, `/setup-project-context` |
302
- | Broken code | Claude codes without a feedback loop or evidence trail | `/tdd` (improved), `/debugging-protocol` (improved) |
303
- | Ball of mud | Architecture drifts; modules grow shallow and tangled | `/improve-codebase-architecture`, `/zoom-out` |
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 problem is fully resolved before touching code
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
- - `/caveman` — Ultra-compressed reply mode (~75% token savings) for rapid iteration
310
- - `/setup-project-context` — Bootstraps a CONTEXT.md domain glossary (ubiquitous language)
311
- - `/tdd` — RED-GREEN-REFACTOR with tracer-bullet vertical slices; horizontal-slicing anti-pattern added
312
- - `/debugging-protocol` — Phase 1 rewritten as "build a feedback loop first" with 9 strategies
313
- - `/improve-codebase-architecture` — Deletion test to find shallow modules; surfaces deepening opportunities
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-prd` — Synthesize conversation into a Product Requirements Document
317
- - `/to-issues` — Break a plan/PRD into vertical-slice issues (HITL/AFK classification)
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
- - `/write-a-skill` — Meta-skill for creating new skills with proper structure
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, verbosity, broken code, architectural degradation), and several core skills (tdd, grill-me, grill-with-docs, improve-codebase-architecture, zoom-out, caveman)
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
- - 47+ on-demand skills (Rails, Docker, Git, Kamal, Process)
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.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
  ---
@@ -250,7 +262,7 @@ agent-notes memory lint # health-check
250
262
  <details>
251
263
  <summary>Skills</summary>
252
264
 
253
- 47+ on-demand knowledge modules across Rails, Docker, Kamal, Git, and Process. Run `agent-notes list skills` for the current list, or browse `agent_notes/data/skills/`.
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
- | Verbosity | Responses are bloated; context window fills with noise | `/caveman`, `/setup-project-context` |
270
- | Broken code | Claude codes without a feedback loop or evidence trail | `/tdd` (improved), `/debugging-protocol` (improved) |
271
- | Ball of mud | Architecture drifts; modules grow shallow and tangled | `/improve-codebase-architecture`, `/zoom-out` |
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 problem is fully resolved before touching code
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
- - `/caveman` — Ultra-compressed reply mode (~75% token savings) for rapid iteration
278
- - `/setup-project-context` — Bootstraps a CONTEXT.md domain glossary (ubiquitous language)
279
- - `/tdd` — RED-GREEN-REFACTOR with tracer-bullet vertical slices; horizontal-slicing anti-pattern added
280
- - `/debugging-protocol` — Phase 1 rewritten as "build a feedback loop first" with 9 strategies
281
- - `/improve-codebase-architecture` — Deletion test to find shallow modules; surfaces deepening opportunities
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-prd` — Synthesize conversation into a Product Requirements Document
285
- - `/to-issues` — Break a plan/PRD into vertical-slice issues (HITL/AFK classification)
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
- - `/write-a-skill` — Meta-skill for creating new skills with proper structure
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, verbosity, broken code, architectural degradation), and several core skills (tdd, grill-me, grill-with-docs, improve-codebase-architecture, zoom-out, caveman)
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 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
@@ -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 note in list(cat_dir.glob("*.md")):
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