agent-notes 2.23.0__tar.gz → 2.24.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 (264) hide show
  1. {agent_notes-2.23.0 → agent_notes-2.24.0}/PKG-INFO +9 -4
  2. {agent_notes-2.23.0 → agent_notes-2.24.0}/README.md +8 -3
  3. agent_notes-2.24.0/agent_notes/VERSION +1 -0
  4. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/cli.py +10 -1
  5. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/doctor.py +11 -0
  6. agent_notes-2.24.0/agent_notes/commands/hook.py +42 -0
  7. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/__init__.py +2 -5
  8. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/notes.py +2 -1
  9. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/constants.py +10 -2
  10. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/agents.yaml +1 -1
  11. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/execution.md +6 -2
  12. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/hard_limits.md +8 -0
  13. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/global-claude.md +1 -15
  14. agent_notes-2.24.0/agent_notes/data/skills/handoff/SKILL.md +26 -0
  15. agent_notes-2.24.0/agent_notes/data/skills/migrate-memory/SKILL.md +172 -0
  16. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/obsidian-memory/SKILL.md +1 -1
  17. agent_notes-2.24.0/agent_notes/data/skills/prototype/LOGIC.md +47 -0
  18. agent_notes-2.24.0/agent_notes/data/skills/prototype/SKILL.md +29 -0
  19. agent_notes-2.24.0/agent_notes/data/skills/prototype/UI.md +45 -0
  20. agent_notes-2.24.0/agent_notes/data/skills/to-issues/SKILL.md +61 -0
  21. agent_notes-2.24.0/agent_notes/data/skills/to-prd/SKILL.md +49 -0
  22. agent_notes-2.24.0/agent_notes/data/skills/write-a-skill/SKILL.md +72 -0
  23. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/__init__.py +1 -1
  24. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/state.py +1 -1
  25. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/_memory_utils.py +12 -0
  26. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/installer.py +21 -1
  27. agent_notes-2.24.0/agent_notes/services/migrations/__init__.py +1 -0
  28. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/obsidian_backend.py +66 -20
  29. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/settings_writer.py +6 -9
  30. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki/_wiki_utils.py +11 -0
  31. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki/wiki_ingest.py +7 -0
  32. agent_notes-2.24.0/agent_notes/services/wiki/wiki_lint.py +176 -0
  33. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki/wiki_storage.py +3 -0
  34. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes.egg-info/PKG-INFO +9 -4
  35. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes.egg-info/SOURCES.txt +12 -0
  36. agent_notes-2.24.0/tests/unit/commands/test_memory_add_description.py +42 -0
  37. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_memory_imports.py +1 -2
  38. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_memory_migrate.py +31 -30
  39. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_wizard_steps.py +4 -4
  40. agent_notes-2.24.0/tests/unit/services/test_installer_hooks.py +132 -0
  41. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_memory_backend_io.py +164 -30
  42. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_settings_writer.py +94 -0
  43. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_wiki_backend.py +162 -0
  44. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/test_memory_dir_for_backend.py +2 -2
  45. agent_notes-2.23.0/agent_notes/VERSION +0 -1
  46. agent_notes-2.23.0/agent_notes/services/wiki/wiki_lint.py +0 -101
  47. {agent_notes-2.23.0 → agent_notes-2.24.0}/LICENSE +0 -0
  48. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/__init__.py +0 -0
  49. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/__main__.py +0 -0
  50. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/__init__.py +0 -0
  51. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/_install_helpers.py +0 -0
  52. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/build.py +0 -0
  53. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/config.py +0 -0
  54. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/info.py +0 -0
  55. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/install.py +0 -0
  56. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/list.py +0 -0
  57. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/_common.py +0 -0
  58. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/migrate.py +0 -0
  59. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/reset.py +0 -0
  60. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/transfer.py +0 -0
  61. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/vault.py +0 -0
  62. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/memory/wiki.py +0 -0
  63. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/regenerate.py +0 -0
  64. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/set_role.py +0 -0
  65. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/uninstall.py +0 -0
  66. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/validate.py +0 -0
  67. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/wizard/__init__.py +0 -0
  68. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/wizard/_common.py +0 -0
  69. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/wizard/execute.py +0 -0
  70. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/commands/wizard/orchestrator.py +0 -0
  71. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/config.py +0 -0
  72. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/analyst.md +0 -0
  73. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/api-reviewer.md +0 -0
  74. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/architect.md +0 -0
  75. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/coder.md +0 -0
  76. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/database-specialist.md +0 -0
  77. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/debugger.md +0 -0
  78. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/devil.md +0 -0
  79. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/devops.md +0 -0
  80. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/explorer.md +0 -0
  81. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/integrations.md +0 -0
  82. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/lead.md +0 -0
  83. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/performance-profiler.md +0 -0
  84. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/refactorer.md +0 -0
  85. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/reviewer.md +0 -0
  86. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/security-auditor.md +0 -0
  87. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/cost_reporting.md +0 -0
  88. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/guardrails.md +0 -0
  89. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/phase0.md +0 -0
  90. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/pipelines.md +0 -0
  91. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/review.md +0 -0
  92. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/verification.md +0 -0
  93. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/shared/wiki_compile.md +0 -0
  94. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/system-auditor.md +0 -0
  95. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/tech-writer.md +0 -0
  96. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/test-runner.md +0 -0
  97. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/test-writer.md +0 -0
  98. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/agents/wiki-compiler.md +0 -0
  99. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/cli/claude.yaml +0 -0
  100. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/cli/copilot.yaml +0 -0
  101. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/cli/opencode.yaml +0 -0
  102. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/commands/brainstorm.md +0 -0
  103. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/commands/debug.md +0 -0
  104. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/commands/review.md +0 -0
  105. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/global-copilot.md +0 -0
  106. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/global-opencode.md +0 -0
  107. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/hooks/session-context.md.tpl +0 -0
  108. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-haiku-4-5.yaml +0 -0
  109. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-opus-4-1.yaml +0 -0
  110. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-opus-4-5.yaml +0 -0
  111. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-opus-4-6.yaml +0 -0
  112. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-opus-4-7.yaml +0 -0
  113. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-sonnet-4-5.yaml +0 -0
  114. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-sonnet-4-6.yaml +0 -0
  115. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/models/claude-sonnet-4.yaml +0 -0
  116. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/plugin/claude.yaml +0 -0
  117. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/plugin/opencode-index.js.template +0 -0
  118. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/plugin/opencode.yaml +0 -0
  119. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/pricing.yaml +0 -0
  120. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/roles/orchestrator.yaml +0 -0
  121. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/roles/reasoner.yaml +0 -0
  122. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/roles/scout.yaml +0 -0
  123. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/roles/worker.yaml +0 -0
  124. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/rules/code-quality.md +0 -0
  125. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/rules/safety.md +0 -0
  126. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/brainstorming/SKILL.md +0 -0
  127. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/caveman/SKILL.md +0 -0
  128. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/code-review/SKILL.md +0 -0
  129. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/debugging-protocol/SKILL.md +0 -0
  130. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/docker/SKILL.md +0 -0
  131. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/docker/compose.md +0 -0
  132. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/docker/dockerfile.md +0 -0
  133. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/git/SKILL.md +0 -0
  134. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/grill-me/SKILL.md +0 -0
  135. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/grill-with-docs/SKILL.md +0 -0
  136. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/improve-codebase-architecture/SKILL.md +0 -0
  137. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/ingest/SKILL.md +0 -0
  138. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/SKILL.md +0 -0
  139. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/controllers.md +0 -0
  140. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/frontend.md +0 -0
  141. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/infra.md +0 -0
  142. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/models.md +0 -0
  143. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/testing.md +0 -0
  144. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/rails/views.md +0 -0
  145. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/refactoring-protocol/SKILL.md +0 -0
  146. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/setup-project-context/SKILL.md +0 -0
  147. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/tdd/SKILL.md +0 -0
  148. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/skills/zoom-out/SKILL.md +0 -0
  149. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/__init__.py +0 -0
  150. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/__pycache__/__init__.cpython-314.pyc +0 -0
  151. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/frontmatter/__init__.py +0 -0
  152. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-314.pyc +0 -0
  153. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
  154. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
  155. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/frontmatter/claude.py +0 -0
  156. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/data/templates/frontmatter/opencode.py +0 -0
  157. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/doctor_checks.py +0 -0
  158. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/agent.py +0 -0
  159. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/cli_backend.py +0 -0
  160. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/diagnostics.py +0 -0
  161. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/diff.py +0 -0
  162. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/model.py +0 -0
  163. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/role.py +0 -0
  164. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/rule.py +0 -0
  165. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/domain/skill.py +0 -0
  166. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/__init__.py +0 -0
  167. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/_base.py +0 -0
  168. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/agent_registry.py +0 -0
  169. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/cli_registry.py +0 -0
  170. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/model_registry.py +0 -0
  171. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/role_registry.py +0 -0
  172. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/rule_registry.py +0 -0
  173. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/registries/skill_registry.py +0 -0
  174. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/scripts/__init__.py +0 -0
  175. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/scripts/_claude_backend.py +0 -0
  176. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/scripts/_formatting.py +0 -0
  177. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/scripts/_opencode_backend.py +0 -0
  178. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/scripts/_pricing.py +0 -0
  179. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/scripts/cost_report.py +0 -0
  180. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/__init__.py +0 -0
  181. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/counts.py +0 -0
  182. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/credentials.py +0 -0
  183. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/diagnostics/__init__.py +0 -0
  184. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/diagnostics/_checks.py +0 -0
  185. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/diagnostics/_display.py +0 -0
  186. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/diagnostics/_fix.py +0 -0
  187. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/diff.py +0 -0
  188. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/fs.py +0 -0
  189. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/install_state_builder.py +0 -0
  190. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/local_backend.py +0 -0
  191. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/memory_router.py +0 -0
  192. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/rendering.py +0 -0
  193. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/session_context.py +0 -0
  194. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/state_store.py +0 -0
  195. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/ui.py +0 -0
  196. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/user_config.py +0 -0
  197. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/validation.py +0 -0
  198. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki/__init__.py +0 -0
  199. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki/wiki_index.py +0 -0
  200. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki/wiki_query.py +0 -0
  201. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes/services/wiki_backend.py +0 -0
  202. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes.egg-info/dependency_links.txt +0 -0
  203. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes.egg-info/entry_points.txt +0 -0
  204. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes.egg-info/requires.txt +0 -0
  205. {agent_notes-2.23.0 → agent_notes-2.24.0}/agent_notes.egg-info/top_level.txt +0 -0
  206. {agent_notes-2.23.0 → agent_notes-2.24.0}/pyproject.toml +0 -0
  207. {agent_notes-2.23.0 → agent_notes-2.24.0}/setup.cfg +0 -0
  208. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/conftest.py +0 -0
  209. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/__init__.py +0 -0
  210. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/__init__.py +0 -0
  211. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_config_command.py +0 -0
  212. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_doctor_command.py +0 -0
  213. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_info_command.py +0 -0
  214. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_install_command.py +0 -0
  215. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_list_command.py +0 -0
  216. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_regenerate_command.py +0 -0
  217. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_uninstall_command.py +0 -0
  218. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/commands/test_validate_command.py +0 -0
  219. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/memory/__init__.py +0 -0
  220. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/memory/test_memory_command.py +0 -0
  221. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/scripts/__init__.py +0 -0
  222. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/functional/scripts/test_release_script.py +0 -0
  223. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/__init__.py +0 -0
  224. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/build_output/__init__.py +0 -0
  225. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/build_output/test_build_output.py +0 -0
  226. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/install/__init__.py +0 -0
  227. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/install/test_install_methods.py +0 -0
  228. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/plugin_builders/__init__.py +0 -0
  229. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/integration/plugin_builders/test_plugin_builders.py +0 -0
  230. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/plugins/__init__.py +0 -0
  231. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/plugins/claude/__init__.py +0 -0
  232. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/plugins/claude/test_agents.py +0 -0
  233. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/plugins/test_skills.py +0 -0
  234. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/__init__.py +0 -0
  235. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/__init__.py +0 -0
  236. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_cost_report_subcommand.py +0 -0
  237. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_count_agents.py +0 -0
  238. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_info.py +0 -0
  239. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_wizard_imports.py +0 -0
  240. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_wizard_orchestrator_skip.py +0 -0
  241. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/commands/test_wizard_preflight.py +0 -0
  242. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/registries/__init__.py +0 -0
  243. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/registries/test_registries.py +0 -0
  244. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/scripts/__init__.py +0 -0
  245. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/scripts/test_cost_report.py +0 -0
  246. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/scripts/test_cost_report_scoping.py +0 -0
  247. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/scripts/test_formatting_tty.py +0 -0
  248. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/scripts/test_time_aggregation.py +0 -0
  249. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/__init__.py +0 -0
  250. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_build_functions.py +0 -0
  251. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_credential_filter.py +0 -0
  252. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_credentials.py +0 -0
  253. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_fs.py +0 -0
  254. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_installer_plan.py +0 -0
  255. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_local_backend.py +0 -0
  256. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_memory_backend.py +0 -0
  257. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_memory_router.py +0 -0
  258. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_rendering_includes.py +0 -0
  259. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_session_context.py +0 -0
  260. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_skill_filtering.py +0 -0
  261. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_state_store.py +0 -0
  262. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_validation.py +0 -0
  263. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/services/test_wiki_imports.py +0 -0
  264. {agent_notes-2.23.0 → agent_notes-2.24.0}/tests/unit/test_import_health.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-notes
3
- Version: 2.23.0
3
+ Version: 2.24.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
@@ -42,7 +42,7 @@ agent-notes doctor
42
42
 
43
43
  **What's Included**
44
44
  - 19 specialized AI subagents (Opus reasons, Sonnet executes, Haiku explores)
45
- - 42+ on-demand skills (Rails, Docker, Git, Kamal, Process)
45
+ - 47+ on-demand skills (Rails, Docker, Git, Kamal, Process)
46
46
  - Global rules and guardrails
47
47
  - Agent memory with 3 storage options (Local, Obsidian, Wiki)
48
48
  - Configuration for Claude Code, OpenCode, and GitHub Copilot
@@ -267,7 +267,7 @@ Implements Karpathy's LLM Wiki pattern (v1). Auto-creates a folder per project (
267
267
 
268
268
  - **Query** — Search wiki pages, synthesize answers with citations, optionally file answers back as new pages
269
269
 
270
- - **Lint** — Health-check for contradictions, stale claims, orphan pages, missing cross-references
270
+ - **Lint** — Health-check for contradictions, stale pages, data gaps, orphan pages, missing cross-references
271
271
 
272
272
  **Commands:**
273
273
  ```bash
@@ -312,7 +312,7 @@ The installed `CLAUDE.md` already points agents to your vault. At the start of a
312
312
  <details>
313
313
  <summary>Skills</summary>
314
314
 
315
- 42+ on-demand knowledge modules across Rails, Docker, Kamal, Git, and Process. Run `agent-notes list skills` for the current list, or browse `agent_notes/data/skills/`.
315
+ 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/`.
316
316
 
317
317
  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.
318
318
 
@@ -342,6 +342,11 @@ Load the docker-compose skill for multi-service setup
342
342
  - `/debugging-protocol` — Phase 1 rewritten as "build a feedback loop first" with 9 strategies
343
343
  - `/improve-codebase-architecture` — Deletion test to find shallow modules; surfaces deepening opportunities
344
344
  - `/zoom-out` — Quick orientation map of an unfamiliar code area
345
+ - `/handoff` — Compact conversation into a handoff document for a fresh agent session
346
+ - `/to-prd` — Synthesize conversation into a Product Requirements Document
347
+ - `/to-issues` — Break a plan/PRD into vertical-slice issues (HITL/AFK classification)
348
+ - `/prototype` — Throwaway prototypes: terminal app for logic or UI variations for visual
349
+ - `/write-a-skill` — Meta-skill for creating new skills with proper structure
345
350
 
346
351
  </details>
347
352
 
@@ -12,7 +12,7 @@ agent-notes doctor
12
12
 
13
13
  **What's Included**
14
14
  - 19 specialized AI subagents (Opus reasons, Sonnet executes, Haiku explores)
15
- - 42+ on-demand skills (Rails, Docker, Git, Kamal, Process)
15
+ - 47+ on-demand skills (Rails, Docker, Git, Kamal, Process)
16
16
  - Global rules and guardrails
17
17
  - Agent memory with 3 storage options (Local, Obsidian, Wiki)
18
18
  - Configuration for Claude Code, OpenCode, and GitHub Copilot
@@ -237,7 +237,7 @@ Implements Karpathy's LLM Wiki pattern (v1). Auto-creates a folder per project (
237
237
 
238
238
  - **Query** — Search wiki pages, synthesize answers with citations, optionally file answers back as new pages
239
239
 
240
- - **Lint** — Health-check for contradictions, stale claims, orphan pages, missing cross-references
240
+ - **Lint** — Health-check for contradictions, stale pages, data gaps, orphan pages, missing cross-references
241
241
 
242
242
  **Commands:**
243
243
  ```bash
@@ -282,7 +282,7 @@ The installed `CLAUDE.md` already points agents to your vault. At the start of a
282
282
  <details>
283
283
  <summary>Skills</summary>
284
284
 
285
- 42+ on-demand knowledge modules across Rails, Docker, Kamal, Git, and Process. Run `agent-notes list skills` for the current list, or browse `agent_notes/data/skills/`.
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/`.
286
286
 
287
287
  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
288
 
@@ -312,6 +312,11 @@ Load the docker-compose skill for multi-service setup
312
312
  - `/debugging-protocol` — Phase 1 rewritten as "build a feedback loop first" with 9 strategies
313
313
  - `/improve-codebase-architecture` — Deletion test to find shallow modules; surfaces deepening opportunities
314
314
  - `/zoom-out` — Quick orientation map of an unfamiliar code area
315
+ - `/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)
318
+ - `/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
315
320
 
316
321
  </details>
317
322
 
@@ -0,0 +1 @@
1
+ 2.24.0
@@ -275,6 +275,12 @@ def main():
275
275
  help="Memory action")
276
276
  p_memory.add_argument("name", nargs="?", help="Agent name / note title (for show/reset/add)")
277
277
  p_memory.add_argument("extra", nargs="*", help="Additional args (for add: body [type] [agent] [project])")
278
+ p_memory.add_argument("--description", default="", help="One-liner description for index display")
279
+
280
+ # hook
281
+ p_hook = subparsers.add_parser("hook", help="Claude Code hook integrations")
282
+ p_hook.add_argument("subaction", choices=["memory-bridge"],
283
+ help="Hook to run")
278
284
 
279
285
  # cost-report
280
286
  p_cost_report = subparsers.add_parser("cost-report", help="Report token usage and cost for the current AI session")
@@ -335,10 +341,13 @@ def main():
335
341
  regenerate(scope=args.scope, cli=args.cli, local=args.local)
336
342
  elif args.command == "memory":
337
343
  from .commands.memory import memory
338
- memory(args.action, args.name, getattr(args, "extra", None))
344
+ memory(args.action, args.name, getattr(args, "extra", None), description=getattr(args, "description", ""))
339
345
  elif args.command == "config":
340
346
  from .commands.config import config
341
347
  config(action=args.action, args=getattr(args, "extra", None) or [], cli_filter=args.cli)
348
+ elif args.command == "hook":
349
+ from .commands.hook import hook
350
+ hook(args.subaction)
342
351
  elif args.command == "cost-report":
343
352
  # Rebuild sys.argv slice so cost_report.main() can parse it normally
344
353
  argv = []
@@ -61,6 +61,17 @@ def _check_session_hook(scope: str, issues: list) -> None:
61
61
  "SessionStart hook not found — run: agent-notes install to re-add the hook",
62
62
  ))
63
63
 
64
+ from ..constants import Hooks
65
+ from ..services.state_store import load_state
66
+ state = load_state()
67
+ if state and state.memory.backend in ("obsidian", "wiki"):
68
+ if not has_hook(settings_path, "SessionStart", Hooks.MEMORY_BRIDGE):
69
+ issues.append(Issue(
70
+ "missing_hook",
71
+ str(settings_path),
72
+ "memory-bridge SessionStart hook not found — run: agent-notes install to re-add",
73
+ ))
74
+
64
75
 
65
76
  def check_version_drift(scope: str, issues: list, fix_actions: list) -> None:
66
77
  """Check if the installed package version matches the current running version."""
@@ -0,0 +1,42 @@
1
+ """Hook command - Claude Code hook integrations."""
2
+
3
+ from pathlib import Path
4
+
5
+
6
+ def hook(subaction: str) -> None:
7
+ """Handle hook subactions."""
8
+ if subaction == "memory-bridge":
9
+ _memory_bridge()
10
+
11
+
12
+ def _memory_bridge() -> None:
13
+ """SessionStart hook that prints the agent-notes memory index.
14
+
15
+ Unconditionally loads and prints the memory index so it is visible in
16
+ context at the start of every Claude Code session.
17
+ """
18
+ try:
19
+ from .memory._common import _load_memory_config
20
+ from ..constants import Obsidian, Wiki
21
+
22
+ backend, path = _load_memory_config()
23
+
24
+ if backend == "none" or backend is None:
25
+ return
26
+
27
+ if backend == "obsidian":
28
+ index_file = Path(path) / Obsidian.INDEX
29
+ elif backend == "wiki":
30
+ index_file = Path(path) / Wiki.DIR / Wiki.INDEX
31
+ else:
32
+ # local and any unknown backends: use Index.md at root
33
+ index_file = Path(path) / "Index.md"
34
+
35
+ if not index_file.exists():
36
+ return
37
+
38
+ content = index_file.read_text(encoding="utf-8")
39
+ print("<!-- agent-notes memory index (auto-loaded) -->")
40
+ print(content)
41
+ except Exception:
42
+ return
@@ -8,7 +8,6 @@ from .vault import do_vault, do_init, do_index
8
8
  from .notes import do_add, do_list, do_show, do_size
9
9
  from .transfer import do_export, do_import
10
10
  from .wiki import do_ingest, do_query, do_lint, do_scan_raw
11
- from .migrate import do_migrate
12
11
  from .reset import do_reset
13
12
 
14
13
 
@@ -47,7 +46,7 @@ Examples:
47
46
  print(help_text)
48
47
 
49
48
 
50
- def memory(action: str = "list", name: Optional[str] = None, extra: Optional[list] = None) -> None:
49
+ def memory(action: str = "list", name: Optional[str] = None, extra: Optional[list] = None, description: str = "") -> None:
51
50
  """Manage agent memory."""
52
51
  if action == "list":
53
52
  do_list()
@@ -66,7 +65,7 @@ def memory(action: str = "list", name: Optional[str] = None, extra: Optional[lis
66
65
  note_type = extra[1] if extra and len(extra) > 1 else "context"
67
66
  agent = extra[2] if extra and len(extra) > 2 else ""
68
67
  project = extra[3] if extra and len(extra) > 3 else ""
69
- do_add(name, body, note_type=note_type, agent=agent, project=project)
68
+ do_add(name, body, note_type=note_type, agent=agent, project=project, description=description)
70
69
  elif action == "size":
71
70
  do_size()
72
71
  elif action == "show":
@@ -80,8 +79,6 @@ def memory(action: str = "list", name: Optional[str] = None, extra: Optional[lis
80
79
  do_export()
81
80
  elif action == "import":
82
81
  do_import()
83
- elif action == "migrate":
84
- do_migrate()
85
82
  elif action == "ingest":
86
83
  if not name:
87
84
  do_scan_raw()
@@ -7,7 +7,7 @@ from . import _common
7
7
  from ...config import MEMORY_DIR, Color
8
8
 
9
9
 
10
- def do_add(title: str, body: str, note_type: str = "context", agent: str = "", project: str = "", tags: Optional[list] = None) -> None:
10
+ def do_add(title: str, body: str, note_type: str = "context", agent: str = "", project: str = "", tags: Optional[list] = None, description: str = "") -> None:
11
11
  """Add a note to memory (obsidian or wiki storage)."""
12
12
  backend, path = _common._load_memory_config()
13
13
  if backend == "none":
@@ -40,6 +40,7 @@ def do_add(title: str, body: str, note_type: str = "context", agent: str = "", p
40
40
  note_type=note_type,
41
41
  agent=agent,
42
42
  project=project,
43
+ description=description,
43
44
  tags=tags or [],
44
45
  )
45
46
  print(f"{Color.GREEN}Note saved: {note_path}{Color.NC}")
@@ -20,5 +20,13 @@ class Wiki:
20
20
  class Obsidian:
21
21
  """Obsidian backend folder structure constants."""
22
22
  INDEX = "Index.md"
23
- SUBFOLDER = "notes"
24
- CATEGORIES = ["Patterns", "Decisions", "Mistakes", "Context", "Sessions"]
23
+ SUBFOLDER = "projects"
24
+ CATEGORIES = ["Patterns", "Decisions", "Mistakes", "Context", "Feedback", "Sessions"]
25
+ INDEX_SECTIONS = ["Decisions", "Patterns", "Context", "Mistakes", "Feedback"]
26
+ SESSION_CAP = 5
27
+
28
+
29
+ class Hooks:
30
+ """Hook command strings used in Claude Code settings.json."""
31
+ MEMORY_BRIDGE = "agent-notes hook memory-bridge"
32
+ COST_REPORT = "agent-notes cost-report"
@@ -317,7 +317,7 @@ agents:
317
317
 
318
318
  debugger:
319
319
  description: "Investigates bugs. Reproduces, isolates the failure, identifies root cause. Does not apply fixes — hands off to coder. Read-only on source. Triggers: bug, broken, error, crash, regression, flaky, root cause, why does, investigate."
320
- role: reasoner
320
+ role: worker
321
321
  mode: subagent
322
322
  color: orange
323
323
  effort: high
@@ -34,7 +34,7 @@ For each subtask, pick the cheapest capable agent:
34
34
  - **Free** (do it yourself): one Read/Grep/Glob answers it.
35
35
  - **Cheap** (`explorer`, Haiku): read-only discovery, structure mapping, pattern search. One `explorer` call beats multiple self-reads.
36
36
  - **Medium** (`reviewer`, `security-auditor`, `system-auditor`, `database-specialist`, `performance-profiler`, `api-reviewer`): focused analysis of known files.
37
- - **Reasoner** (`architect`, `debugger`, Opus): deep system design, complex root-cause analysis. Use only when the problem requires multi-step reasoning that Sonnet cannot handle.
37
+ - **Reasoner** (`architect`, Opus): deep system design, complex root-cause analysis. Use only when the problem requires multi-step reasoning that Sonnet cannot handle.
38
38
  - **Expensive** (`coder`, `test-writer`, `test-runner`): writes files, open-ended work.
39
39
 
40
40
  Rules:
@@ -75,7 +75,7 @@ Never spawn one agent per bullet point from the user's prompt. Combine related s
75
75
  - `coder` — all file edits and implementation work
76
76
  - `reviewer` — code quality checks after implementation
77
77
  - `architect` — system design, module boundaries, refactor planning (Opus, expensive — use sparingly)
78
- - `debugger` — complex bug investigation, root-cause analysis (Opus, expensive — hand fix to `coder`)
78
+ - `debugger` — bug investigation, root-cause analysis (Sonnet — hand fix to `coder`)
79
79
  - `security-auditor` — auth, input handling, data access
80
80
  - `test-writer` — create tests, `test-runner` — fix failing tests
81
81
  - `system-auditor` — codebase health: N+1, duplication, dead code
@@ -87,3 +87,7 @@ Never spawn one agent per bullet point from the user's prompt. Combine related s
87
87
  Skip agents for: simple questions (answer directly), single-file edits (coder alone), or two-grep lookups (do it yourself).
88
88
 
89
89
  Give each agent a specific task with all context (paths, criteria). Always include the cost report at the end of every response.
90
+
91
+ ### Permission pre-check (HARD RULE)
92
+
93
+ Before dispatching writing agents (`coder`, `test-writer`, `devops`, `refactorer`, `tech-writer`) in background: confirm Write/Edit/Bash permissions are granted. Background agents cannot surface permission prompts — they fail silently. Prefer foreground for writing agents, or ask the user to pre-approve. If a background agent fails on permissions, explain the blocker — do NOT write files yourself.
@@ -18,3 +18,11 @@ If you feel the urge to "just quickly check a file" — STOP. Dispatch `explorer
18
18
  Exception: trivial requests (factual questions, conversational replies, single-line answers) may be handled inline with no tools.
19
19
 
20
20
  **Exception — Phase 4 verification reads**: During Phase 4.3 cross-agent consistency checks, the lead MAY read up to 3 files that were modified by agents in the current session. This is targeted verification, not exploration.
21
+
22
+ ## Output discipline
23
+
24
+ - Responses: 1-3 sentences per status update. State results and decisions, not process.
25
+ - Plans: structured bullet lists with file paths. No prose paragraphs.
26
+ - Agent briefings: context + task + acceptance criteria. No commentary or justification.
27
+ - Never narrate internal deliberation — report outcomes only.
28
+ - Cost table: once at end of response, never mid-response.
@@ -8,7 +8,7 @@ You are a team lead that plans and coordinates work across specialized agents.
8
8
 
9
9
  <!-- include: hard_limits -->
10
10
 
11
- ### Credentials handling (HARD RULE)
11
+ ## Credentials handling (HARD RULE)
12
12
 
13
13
  The lead MUST NEVER read, print, log, or include API keys / credentials / secrets in any output, even if the user asks. The credentials file at `~/.agent-notes/credentials.toml` is opaque — your only legitimate operations are:
14
14
 
@@ -62,13 +62,6 @@ After receiving output from any agent, scan for a `## Discoveries` section. For
62
62
 
63
63
  <!-- include: guardrails -->
64
64
 
65
- ## Coding philosophy
66
-
67
- - Read existing code before writing new code. Match project patterns.
68
- - Minimal changes: only what was requested. Do not refactor beyond scope.
69
- - Fix root causes, not symptoms.
70
- - One approach, commit to it. Course-correct only on new evidence.
71
-
72
65
  ## Behavior
73
66
 
74
67
  - Investigate before answering. Never speculate about code you haven't read.
@@ -76,13 +69,6 @@ After receiving output from any agent, scan for a `## Discoveries` section. For
76
69
  - No comments or docs on code you didn't change.
77
70
  - When the task is genuinely unclear and you cannot make a reasonable assumption, ask one clarifying question instead of guessing.
78
71
 
79
- ## Safety
80
-
81
- - Confirm before: `git push --force`, `rm -rf`, `DROP TABLE`, branch deletion.
82
- - Never commit: `.env`, `*.pem`, credentials, API keys, secrets.
83
- - Never bypass: `--no-verify`, `--force` without explicit user request.
84
- - Never force-push to main/master.
85
-
86
72
  ## Commits
87
73
 
88
74
  - Load the `git` skill when asked to commit and follow its workflow.
@@ -0,0 +1,26 @@
1
+ ---
2
+ name: handoff
3
+ description: "Compact the current conversation into a handoff document for another agent to pick up. Use when the session is getting long, context is degrading, or you need to transfer work to a fresh session."
4
+ group: process
5
+ argument-hint: "What will the next session be used for?"
6
+ ---
7
+
8
+ # Handoff
9
+
10
+ Write a handoff document summarising the current conversation so a fresh agent can continue the work. Save it to a path produced by `mktemp -t handoff-XXXXXX.md` (read the file before you write to it).
11
+
12
+ ## What to include
13
+
14
+ 1. **Goal**: What the user is trying to accomplish (1-2 sentences)
15
+ 2. **Current state**: What has been done so far, what works, what doesn't
16
+ 3. **Next steps**: What the next session should focus on
17
+ 4. **Key decisions**: Decisions made during this session that the next agent needs to know
18
+ 5. **Relevant files**: Paths to files that were modified or are relevant
19
+ 6. **Skills to use**: Suggest which skills the next session should invoke
20
+
21
+ ## Rules
22
+
23
+ - Do not duplicate content already captured in other artifacts (PRDs, plans, ADRs, issues, commits, diffs). Reference them by path or URL instead.
24
+ - Keep it concise — the handoff should fit in a single context window read.
25
+ - If the user passed arguments, treat them as a description of what the next session will focus on and tailor the doc accordingly.
26
+ - If using the obsidian memory backend, also save a session note via `agent-notes memory add` before creating the handoff.
@@ -0,0 +1,172 @@
1
+ ---
2
+ name: migrate-memory
3
+ description: "Reconcile the Obsidian vault or Wiki knowledge base to the latest canonical format. Use after upgrading agent-notes or when vault structure looks outdated or inconsistent."
4
+ group: process
5
+ requires_memory: obsidian, wiki
6
+ ---
7
+
8
+ # Migrate Memory
9
+
10
+ Reconcile the memory store to the latest format. This skill transforms any state — old layout, missing fields, wrong folder names — into the canonical structure. Works for both Obsidian and Wiki backends.
11
+
12
+ ## When to use
13
+
14
+ - After upgrading agent-notes
15
+ - When the user says "migrate memory" or `/migrate-memory`
16
+ - When vault structure looks outdated or inconsistent
17
+
18
+ ## Step 1: Detect backend
19
+
20
+ ```bash
21
+ agent-notes memory vault
22
+ ```
23
+
24
+ This returns the backend type and vault path. Branch to the appropriate section below.
25
+
26
+ ---
27
+
28
+ ## Obsidian backend
29
+
30
+ ### Reconcile folder structure
31
+
32
+ The canonical vault layout is:
33
+
34
+ ```
35
+ <vault-root>/projects/<project-name>/
36
+ ├── Patterns/
37
+ ├── Decisions/
38
+ ├── Mistakes/
39
+ ├── Context/
40
+ ├── Feedback/
41
+ ├── Sessions/
42
+ └── Index.md
43
+ ```
44
+
45
+ Reconciliation rules:
46
+ - If the project lives under a `notes/` parent and `projects/` does NOT exist → rename `notes/` → `projects/`
47
+ - If BOTH `notes/` and `projects/` exist → merge: move all contents from `notes/<project>/` into `projects/<project>/`, skip files that already exist in the destination, then delete the empty `notes/` directory
48
+ - At the end: only `projects/` must exist. `notes/` must be gone.
49
+ - Create any missing category folders: Patterns, Decisions, Mistakes, Context, Feedback, Sessions
50
+ - If `Index.md` is missing, create it with the standard header
51
+
52
+ ### Reconcile note frontmatter
53
+
54
+ Every `.md` file inside a category folder (NOT Index.md) must have this frontmatter:
55
+
56
+ ```yaml
57
+ ---
58
+ created_at: <ISO 8601 UTC, "Z" suffix>
59
+ type: <pattern|decision|mistake|context|session|feedback>
60
+ description: "<one-line summary optimized for index routing>"
61
+ session: <YYYY-MM-DD_session-id> # absent on session notes themselves
62
+ agent: <agent-name> # optional
63
+ ---
64
+ ```
65
+
66
+ Reconciliation rules:
67
+ - `created_at` — if missing, derive from filename date prefix (`YYYY-MM-DD_slug.md` → that date at midnight UTC). If no date in filename, use file modification time
68
+ - `type` — if missing, derive from parent folder name (lowercase). `Patterns/` → `pattern`, etc.
69
+ - `description` — if missing, derive from the first non-heading, non-empty line of the body. Cap at 100 characters, break at word boundary. If no suitable line, use the filename slug with hyphens replaced by spaces
70
+ - `session` — leave as-is if present; do not add if absent
71
+ - `agent` — leave as-is if present; do not add if absent
72
+ - Do NOT remove extra frontmatter fields — only add/fix the required ones
73
+
74
+ ### Reconcile filenames
75
+
76
+ Canonical filename format: `YYYY-MM-DD_<slug>.md`
77
+ - `<slug>` is kebab-case, derived from the note title
78
+ - If a file doesn't match this pattern, rename it to match (derive date from `created_at` frontmatter)
79
+ - On collision, append `_HHMMSS` before `.md`
80
+
81
+ ### Regenerate Index.md
82
+
83
+ After all notes are reconciled, regenerate `Index.md`:
84
+ - List notes grouped by section in this order: Decisions, Patterns, Context, Mistakes, Feedback
85
+ - Within each section, newest first (by `created_at`)
86
+ - Each entry: `- [[relative-path|title]] — description`
87
+ - Sessions section: last 5 sessions only
88
+
89
+ ---
90
+
91
+ ## Wiki backend
92
+
93
+ ### Reconcile folder structure
94
+
95
+ The canonical wiki layout is:
96
+
97
+ ```
98
+ <vault-root>/knowledge/
99
+ ├── .obsidianignore
100
+ ├── raw/ # immutable source archive
101
+ └── wiki/
102
+ ├── index.md
103
+ ├── log.md
104
+ ├── sources/
105
+ ├── concepts/
106
+ ├── entities/
107
+ ├── synthesis/
108
+ └── sessions/
109
+ ```
110
+
111
+ Reconciliation rules:
112
+ - Create any missing folders: `raw/`, `wiki/`, and all page type folders (`sources/`, `concepts/`, `entities/`, `synthesis/`, `sessions/`)
113
+ - If `.obsidianignore` is missing, create it with content: `raw/`
114
+ - If `wiki/index.md` is missing, create it with the standard header
115
+ - If `wiki/log.md` is missing, create it empty
116
+
117
+ ### Reconcile wiki page frontmatter
118
+
119
+ Every `.md` file inside `wiki/sources/`, `wiki/concepts/`, `wiki/entities/`, `wiki/synthesis/`, and `wiki/sessions/` must have this frontmatter:
120
+
121
+ ```yaml
122
+ ---
123
+ created_at: <ISO 8601 UTC, "Z" suffix>
124
+ updated_at: <ISO 8601 UTC, "Z" suffix>
125
+ type: <sources|concepts|entities|synthesis|sessions>
126
+ tags: ["tag1", "tag2"] # optional
127
+ aliases: ["alias1"] # optional
128
+ sources: ["raw/source-file.md"] # optional
129
+ agent: <agent-name> # optional
130
+ project: <project-name> # optional
131
+ confidence: "<high|medium|low>" # optional
132
+ ---
133
+ ```
134
+
135
+ Reconciliation rules:
136
+ - `created_at` — if missing, use file modification time in ISO 8601 UTC
137
+ - `updated_at` — if missing, set equal to `created_at`
138
+ - `type` — if missing, derive from parent folder name. `concepts/` → `concepts`, etc.
139
+ - `tags`, `aliases`, `sources`, `agent`, `project`, `confidence` — leave as-is if present; do not add if absent
140
+ - Do NOT remove extra frontmatter fields — only add/fix the required ones
141
+
142
+ ### Reconcile wiki filenames
143
+
144
+ Canonical filename: `<kebab-case-slug>.md` (no date prefix for wiki pages)
145
+ - Slug derived from the H1 heading or title
146
+ - Report any non-compliant filenames
147
+
148
+ ### Regenerate wiki/index.md
149
+
150
+ After all pages are reconciled, regenerate `wiki/index.md`:
151
+ - Group by page type in this order: Sources, Concepts, Entities, Synthesis, Sessions
152
+ - Each section as a markdown table: `| Page | Tags | Updated |`
153
+ - Each row: `| [[slug]] — description | #tag1 #tag2 | YYYY-MM-DD |`
154
+ - Description: first sentence of body content, capped at 80 characters
155
+
156
+ ---
157
+
158
+ ## Report
159
+
160
+ Print a summary of changes made:
161
+ - Backend: obsidian or wiki
162
+ - Folders: created / renamed / merged / removed
163
+ - Notes with updated frontmatter (count)
164
+ - Notes already compliant (count)
165
+ - Filenames: all OK or list non-compliant
166
+ - Index regenerated: yes/no
167
+
168
+ ## Constraints
169
+
170
+ - Never delete individual notes. Only add/fix metadata, rename, and merge folders.
171
+ - Preserve note body content exactly — only touch frontmatter and filenames.
172
+ - When merging folders, skip files that already exist at the destination (do not overwrite).
@@ -107,7 +107,7 @@ agent-notes memory vault # confirm storage and path
107
107
 
108
108
  The vault is structured as:
109
109
  ```
110
- vault/agent-notes/notes/
110
+ vault/agent-notes/projects/
111
111
  ├── <project-name>/
112
112
  │ ├── Patterns/ — reusable solutions YYYY-MM-DD_<slug>.md
113
113
  │ ├── Decisions/ — architectural choices YYYY-MM-DD_<slug>.md
@@ -0,0 +1,47 @@
1
+ # Logic Prototype
2
+
3
+ A tiny interactive terminal app to drive a state model by hand. Use when the question is about business logic, state transitions, or data shape.
4
+
5
+ ## When this is the right shape
6
+
7
+ - "Does this state machine handle the edge case where X then Y?"
8
+ - "Does this data model let me represent the case where...?"
9
+ - "I want to feel out what the API should look like before writing it."
10
+
11
+ If the question is visual → use [UI.md](UI.md).
12
+
13
+ ## Process
14
+
15
+ ### 1. State the question
16
+ Write down the state model and question being prototyped. One paragraph at the top of the file.
17
+
18
+ ### 2. Pick the language
19
+ Use the host project's language. Match existing tooling conventions.
20
+
21
+ ### 3. Isolate logic in a portable module
22
+ Put logic behind a small, pure interface that could be lifted into the real codebase:
23
+ - **Pure reducer** — `(state, action) => state` for discrete events
24
+ - **State machine** — explicit states and transitions
25
+ - **Pure functions** over a plain data type
26
+ - **Class/module** with clear method surface for genuine ongoing state
27
+
28
+ Keep it pure: no I/O, no terminal code. The TUI imports it; nothing flows back.
29
+
30
+ ### 4. Build the smallest TUI
31
+ On every tick, clear screen and re-render:
32
+ 1. **Current state** — pretty-printed, bold field names, dim less important context
33
+ 2. **Keyboard shortcuts** — listed at bottom: `[a] add user [d] delete user [q] quit`
34
+
35
+ Loop: initialize → read keystroke → dispatch → re-render → repeat until quit.
36
+
37
+ ### 5. One command to run
38
+ Add a script to the project's task runner.
39
+
40
+ ### 6. Capture the answer
41
+ When done, record what it taught in NOTES.md, commit message, or ADR. The logic module is worth keeping; the TUI shell gets deleted.
42
+
43
+ ## Anti-patterns
44
+ - Don't add tests — a prototype that needs tests is no longer a prototype
45
+ - Don't wire to the real database — use in-memory
46
+ - Don't generalise — answer one question
47
+ - Don't blur logic and TUI — keep the TUI as a thin shell over a pure module
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: prototype
3
+ description: "Build a throwaway prototype to answer a design question. Routes between a terminal app for logic/state questions or multiple UI variations for visual questions. Use when user wants to prototype, sanity-check a data model, mock up UI, or says 'prototype this'."
4
+ group: process
5
+ ---
6
+
7
+ # Prototype
8
+
9
+ A prototype is **throwaway code that answers a question**. The question decides the shape.
10
+
11
+ ## Pick a branch
12
+
13
+ - **"Does this logic / state model feel right?"** → [LOGIC.md](LOGIC.md). Build a tiny interactive terminal app.
14
+ - **"What should this look like?"** → [UI.md](UI.md). Generate radically different UI variations switchable via URL param.
15
+
16
+ If ambiguous, default to whichever matches the surrounding code (backend module → logic; page/component → UI).
17
+
18
+ ## Rules for both branches
19
+
20
+ 1. **Throwaway and clearly marked.** Locate near where it will be used but name it obviously.
21
+ 2. **One command to run.** Use the project's existing task runner.
22
+ 3. **No persistence by default.** State lives in memory.
23
+ 4. **Skip the polish.** No tests, no error handling beyond runnable, no abstractions.
24
+ 5. **Surface the state.** After every action, print or render the full relevant state.
25
+ 6. **Delete or absorb when done.** Either delete or fold the validated decision into real code.
26
+
27
+ ## When done
28
+
29
+ Capture the answer somewhere durable (commit message, ADR, issue, or NOTES.md next to the prototype). The answer is the only thing worth keeping.