agentrules 3.4.1__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 (219) hide show
  1. agentrules-3.4.1/LICENSE +21 -0
  2. agentrules-3.4.1/PKG-INFO +385 -0
  3. agentrules-3.4.1/README.md +347 -0
  4. agentrules-3.4.1/pyproject.toml +103 -0
  5. agentrules-3.4.1/setup.cfg +4 -0
  6. agentrules-3.4.1/src/agentrules/__init__.py +10 -0
  7. agentrules-3.4.1/src/agentrules/__main__.py +6 -0
  8. agentrules-3.4.1/src/agentrules/cli/__init__.py +7 -0
  9. agentrules-3.4.1/src/agentrules/cli/app.py +64 -0
  10. agentrules-3.4.1/src/agentrules/cli/bootstrap.py +34 -0
  11. agentrules-3.4.1/src/agentrules/cli/commands/__init__.py +3 -0
  12. agentrules-3.4.1/src/agentrules/cli/commands/analyze.py +57 -0
  13. agentrules-3.4.1/src/agentrules/cli/commands/configure.py +92 -0
  14. agentrules-3.4.1/src/agentrules/cli/commands/execplan.py +531 -0
  15. agentrules-3.4.1/src/agentrules/cli/commands/execplan_registry.py +264 -0
  16. agentrules-3.4.1/src/agentrules/cli/commands/keys.py +19 -0
  17. agentrules-3.4.1/src/agentrules/cli/commands/scaffold.py +78 -0
  18. agentrules-3.4.1/src/agentrules/cli/commands/snapshot.py +215 -0
  19. agentrules-3.4.1/src/agentrules/cli/commands/tree.py +109 -0
  20. agentrules-3.4.1/src/agentrules/cli/context.py +37 -0
  21. agentrules-3.4.1/src/agentrules/cli/services/__init__.py +3 -0
  22. agentrules-3.4.1/src/agentrules/cli/services/codex_runtime.py +292 -0
  23. agentrules-3.4.1/src/agentrules/cli/services/configuration.py +230 -0
  24. agentrules-3.4.1/src/agentrules/cli/services/output_validation.py +60 -0
  25. agentrules-3.4.1/src/agentrules/cli/services/pipeline_runner.py +239 -0
  26. agentrules-3.4.1/src/agentrules/cli/services/tree_preview.py +90 -0
  27. agentrules-3.4.1/src/agentrules/cli/ui/__init__.py +3 -0
  28. agentrules-3.4.1/src/agentrules/cli/ui/analysis_view.py +214 -0
  29. agentrules-3.4.1/src/agentrules/cli/ui/event_sink.py +184 -0
  30. agentrules-3.4.1/src/agentrules/cli/ui/main_menu.py +74 -0
  31. agentrules-3.4.1/src/agentrules/cli/ui/settings/__init__.py +22 -0
  32. agentrules-3.4.1/src/agentrules/cli/ui/settings/codex.py +322 -0
  33. agentrules-3.4.1/src/agentrules/cli/ui/settings/exclusions/__init__.py +159 -0
  34. agentrules-3.4.1/src/agentrules/cli/ui/settings/exclusions/editor.py +45 -0
  35. agentrules-3.4.1/src/agentrules/cli/ui/settings/exclusions/preview.py +129 -0
  36. agentrules-3.4.1/src/agentrules/cli/ui/settings/exclusions/summary.py +80 -0
  37. agentrules-3.4.1/src/agentrules/cli/ui/settings/logging.py +64 -0
  38. agentrules-3.4.1/src/agentrules/cli/ui/settings/menu.py +65 -0
  39. agentrules-3.4.1/src/agentrules/cli/ui/settings/models/__init__.py +343 -0
  40. agentrules-3.4.1/src/agentrules/cli/ui/settings/models/researcher.py +192 -0
  41. agentrules-3.4.1/src/agentrules/cli/ui/settings/models/utils.py +240 -0
  42. agentrules-3.4.1/src/agentrules/cli/ui/settings/outputs.py +217 -0
  43. agentrules-3.4.1/src/agentrules/cli/ui/settings/providers.py +98 -0
  44. agentrules-3.4.1/src/agentrules/cli/ui/styles.py +165 -0
  45. agentrules-3.4.1/src/agentrules/config/__init__.py +5 -0
  46. agentrules-3.4.1/src/agentrules/config/agents.py +535 -0
  47. agentrules-3.4.1/src/agentrules/config/exclusions.py +46 -0
  48. agentrules-3.4.1/src/agentrules/config/prompts/__init__.py +13 -0
  49. agentrules-3.4.1/src/agentrules/config/prompts/final_analysis_prompt.py +478 -0
  50. agentrules-3.4.1/src/agentrules/config/prompts/phase_1_prompts.py +154 -0
  51. agentrules-3.4.1/src/agentrules/config/prompts/phase_2_prompts.py +188 -0
  52. agentrules-3.4.1/src/agentrules/config/prompts/phase_3_prompts.py +131 -0
  53. agentrules-3.4.1/src/agentrules/config/prompts/phase_4_prompts.py +50 -0
  54. agentrules-3.4.1/src/agentrules/config/prompts/phase_5_prompts.py +44 -0
  55. agentrules-3.4.1/src/agentrules/config/tools.py +44 -0
  56. agentrules-3.4.1/src/agentrules/core/__init__.py +5 -0
  57. agentrules-3.4.1/src/agentrules/core/agent_tools/tool_manager.py +184 -0
  58. agentrules-3.4.1/src/agentrules/core/agent_tools/web_search/__init__.py +12 -0
  59. agentrules-3.4.1/src/agentrules/core/agent_tools/web_search/tavily.py +111 -0
  60. agentrules-3.4.1/src/agentrules/core/agents/__init__.py +17 -0
  61. agentrules-3.4.1/src/agentrules/core/agents/anthropic/__init__.py +5 -0
  62. agentrules-3.4.1/src/agentrules/core/agents/anthropic/architect.py +513 -0
  63. agentrules-3.4.1/src/agentrules/core/agents/anthropic/capabilities.py +135 -0
  64. agentrules-3.4.1/src/agentrules/core/agents/anthropic/client.py +59 -0
  65. agentrules-3.4.1/src/agentrules/core/agents/anthropic/prompting.py +35 -0
  66. agentrules-3.4.1/src/agentrules/core/agents/anthropic/request_builder.py +134 -0
  67. agentrules-3.4.1/src/agentrules/core/agents/anthropic/response_parser.py +77 -0
  68. agentrules-3.4.1/src/agentrules/core/agents/anthropic/tooling.py +23 -0
  69. agentrules-3.4.1/src/agentrules/core/agents/base.py +213 -0
  70. agentrules-3.4.1/src/agentrules/core/agents/codex/__init__.py +54 -0
  71. agentrules-3.4.1/src/agentrules/core/agents/codex/architect.py +308 -0
  72. agentrules-3.4.1/src/agentrules/core/agents/codex/client.py +424 -0
  73. agentrules-3.4.1/src/agentrules/core/agents/codex/errors.py +34 -0
  74. agentrules-3.4.1/src/agentrules/core/agents/codex/models.py +305 -0
  75. agentrules-3.4.1/src/agentrules/core/agents/codex/process.py +159 -0
  76. agentrules-3.4.1/src/agentrules/core/agents/codex/protocol.py +92 -0
  77. agentrules-3.4.1/src/agentrules/core/agents/codex/request_builder.py +114 -0
  78. agentrules-3.4.1/src/agentrules/core/agents/codex/response_parser.py +147 -0
  79. agentrules-3.4.1/src/agentrules/core/agents/deepseek/__init__.py +6 -0
  80. agentrules-3.4.1/src/agentrules/core/agents/deepseek/architect.py +503 -0
  81. agentrules-3.4.1/src/agentrules/core/agents/deepseek/client.py +45 -0
  82. agentrules-3.4.1/src/agentrules/core/agents/deepseek/compat.py +45 -0
  83. agentrules-3.4.1/src/agentrules/core/agents/deepseek/config.py +61 -0
  84. agentrules-3.4.1/src/agentrules/core/agents/deepseek/prompting.py +47 -0
  85. agentrules-3.4.1/src/agentrules/core/agents/deepseek/request_builder.py +73 -0
  86. agentrules-3.4.1/src/agentrules/core/agents/deepseek/response_parser.py +68 -0
  87. agentrules-3.4.1/src/agentrules/core/agents/deepseek/tooling.py +34 -0
  88. agentrules-3.4.1/src/agentrules/core/agents/factory/__init__.py +3 -0
  89. agentrules-3.4.1/src/agentrules/core/agents/factory/factory.py +170 -0
  90. agentrules-3.4.1/src/agentrules/core/agents/gemini/__init__.py +25 -0
  91. agentrules-3.4.1/src/agentrules/core/agents/gemini/architect.py +558 -0
  92. agentrules-3.4.1/src/agentrules/core/agents/gemini/capabilities.py +201 -0
  93. agentrules-3.4.1/src/agentrules/core/agents/gemini/client.py +46 -0
  94. agentrules-3.4.1/src/agentrules/core/agents/gemini/errors.py +10 -0
  95. agentrules-3.4.1/src/agentrules/core/agents/gemini/legacy.py +54 -0
  96. agentrules-3.4.1/src/agentrules/core/agents/gemini/prompting.py +36 -0
  97. agentrules-3.4.1/src/agentrules/core/agents/gemini/response_parser.py +79 -0
  98. agentrules-3.4.1/src/agentrules/core/agents/gemini/tooling.py +28 -0
  99. agentrules-3.4.1/src/agentrules/core/agents/openai/__init__.py +13 -0
  100. agentrules-3.4.1/src/agentrules/core/agents/openai/architect.py +558 -0
  101. agentrules-3.4.1/src/agentrules/core/agents/openai/client.py +28 -0
  102. agentrules-3.4.1/src/agentrules/core/agents/openai/compat.py +41 -0
  103. agentrules-3.4.1/src/agentrules/core/agents/openai/config.py +58 -0
  104. agentrules-3.4.1/src/agentrules/core/agents/openai/request_builder.py +162 -0
  105. agentrules-3.4.1/src/agentrules/core/agents/openai/response_parser.py +151 -0
  106. agentrules-3.4.1/src/agentrules/core/agents/xai/__init__.py +5 -0
  107. agentrules-3.4.1/src/agentrules/core/agents/xai/architect.py +471 -0
  108. agentrules-3.4.1/src/agentrules/core/agents/xai/client.py +45 -0
  109. agentrules-3.4.1/src/agentrules/core/agents/xai/config.py +73 -0
  110. agentrules-3.4.1/src/agentrules/core/agents/xai/prompting.py +47 -0
  111. agentrules-3.4.1/src/agentrules/core/agents/xai/request_builder.py +87 -0
  112. agentrules-3.4.1/src/agentrules/core/agents/xai/response_parser.py +83 -0
  113. agentrules-3.4.1/src/agentrules/core/agents/xai/tooling.py +29 -0
  114. agentrules-3.4.1/src/agentrules/core/analysis/__init__.py +23 -0
  115. agentrules-3.4.1/src/agentrules/core/analysis/events.py +32 -0
  116. agentrules-3.4.1/src/agentrules/core/analysis/final_analysis.py +109 -0
  117. agentrules-3.4.1/src/agentrules/core/analysis/phase_1.py +406 -0
  118. agentrules-3.4.1/src/agentrules/core/analysis/phase_2.py +212 -0
  119. agentrules-3.4.1/src/agentrules/core/analysis/phase_3.py +412 -0
  120. agentrules-3.4.1/src/agentrules/core/analysis/phase_4.py +83 -0
  121. agentrules-3.4.1/src/agentrules/core/analysis/phase_5.py +102 -0
  122. agentrules-3.4.1/src/agentrules/core/configuration/__init__.py +69 -0
  123. agentrules-3.4.1/src/agentrules/core/configuration/constants.py +35 -0
  124. agentrules-3.4.1/src/agentrules/core/configuration/environment.py +79 -0
  125. agentrules-3.4.1/src/agentrules/core/configuration/manager.py +379 -0
  126. agentrules-3.4.1/src/agentrules/core/configuration/model_presets.py +475 -0
  127. agentrules-3.4.1/src/agentrules/core/configuration/models.py +84 -0
  128. agentrules-3.4.1/src/agentrules/core/configuration/repository.py +46 -0
  129. agentrules-3.4.1/src/agentrules/core/configuration/serde.py +201 -0
  130. agentrules-3.4.1/src/agentrules/core/configuration/services/__init__.py +13 -0
  131. agentrules-3.4.1/src/agentrules/core/configuration/services/codex.py +120 -0
  132. agentrules-3.4.1/src/agentrules/core/configuration/services/exclusions.py +115 -0
  133. agentrules-3.4.1/src/agentrules/core/configuration/services/features.py +32 -0
  134. agentrules-3.4.1/src/agentrules/core/configuration/services/logging.py +15 -0
  135. agentrules-3.4.1/src/agentrules/core/configuration/services/outputs.py +88 -0
  136. agentrules-3.4.1/src/agentrules/core/configuration/services/phase_models.py +17 -0
  137. agentrules-3.4.1/src/agentrules/core/configuration/services/providers.py +59 -0
  138. agentrules-3.4.1/src/agentrules/core/configuration/utils.py +184 -0
  139. agentrules-3.4.1/src/agentrules/core/execplan/__init__.py +49 -0
  140. agentrules-3.4.1/src/agentrules/core/execplan/creator.py +583 -0
  141. agentrules-3.4.1/src/agentrules/core/execplan/identity.py +56 -0
  142. agentrules-3.4.1/src/agentrules/core/execplan/locks.py +44 -0
  143. agentrules-3.4.1/src/agentrules/core/execplan/milestones.py +768 -0
  144. agentrules-3.4.1/src/agentrules/core/execplan/paths.py +176 -0
  145. agentrules-3.4.1/src/agentrules/core/execplan/registry.py +724 -0
  146. agentrules-3.4.1/src/agentrules/core/execplan/templates/EXECPLAN_TEMPLATE.md +53 -0
  147. agentrules-3.4.1/src/agentrules/core/execplan/templates/MILESTONE_FILE_TEMPLATE.md +57 -0
  148. agentrules-3.4.1/src/agentrules/core/logging/__init__.py +13 -0
  149. agentrules-3.4.1/src/agentrules/core/logging/config.py +76 -0
  150. agentrules-3.4.1/src/agentrules/core/pipeline/__init__.py +29 -0
  151. agentrules-3.4.1/src/agentrules/core/pipeline/config.py +71 -0
  152. agentrules-3.4.1/src/agentrules/core/pipeline/factory.py +33 -0
  153. agentrules-3.4.1/src/agentrules/core/pipeline/orchestrator.py +135 -0
  154. agentrules-3.4.1/src/agentrules/core/pipeline/output.py +262 -0
  155. agentrules-3.4.1/src/agentrules/core/pipeline/snapshot.py +61 -0
  156. agentrules-3.4.1/src/agentrules/core/streaming/__init__.py +9 -0
  157. agentrules-3.4.1/src/agentrules/core/streaming/types.py +38 -0
  158. agentrules-3.4.1/src/agentrules/core/types/__init__.py +52 -0
  159. agentrules-3.4.1/src/agentrules/core/types/agent_config.py +9 -0
  160. agentrules-3.4.1/src/agentrules/core/types/models.py +469 -0
  161. agentrules-3.4.1/src/agentrules/core/types/tool_config.py +36 -0
  162. agentrules-3.4.1/src/agentrules/core/utils/async_stream.py +68 -0
  163. agentrules-3.4.1/src/agentrules/core/utils/constants.py +20 -0
  164. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/__init__.py +14 -0
  165. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/constants.py +54 -0
  166. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/discovery.py +48 -0
  167. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/metadata.py +29 -0
  168. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/models.py +29 -0
  169. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/__init__.py +35 -0
  170. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/clojure.py +62 -0
  171. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/dart.py +49 -0
  172. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/dotnet.py +43 -0
  173. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/elixir.py +38 -0
  174. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/generic.py +18 -0
  175. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/go.py +69 -0
  176. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/helpers.py +11 -0
  177. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/java.py +78 -0
  178. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/javascript.py +38 -0
  179. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/php.py +38 -0
  180. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/python.py +212 -0
  181. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/ruby.py +74 -0
  182. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/swift.py +41 -0
  183. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/parsers/toml_based.py +84 -0
  184. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/registry.py +56 -0
  185. agentrules-3.4.1/src/agentrules/core/utils/dependency_scanner/scan.py +60 -0
  186. agentrules-3.4.1/src/agentrules/core/utils/file_creation/agent_scaffold.py +200 -0
  187. agentrules-3.4.1/src/agentrules/core/utils/file_creation/atomic_write.py +32 -0
  188. agentrules-3.4.1/src/agentrules/core/utils/file_creation/cursorignore.py +287 -0
  189. agentrules-3.4.1/src/agentrules/core/utils/file_creation/phases_output.py +250 -0
  190. agentrules-3.4.1/src/agentrules/core/utils/file_creation/snapshot_artifact.py +382 -0
  191. agentrules-3.4.1/src/agentrules/core/utils/file_creation/snapshot_policy.py +46 -0
  192. agentrules-3.4.1/src/agentrules/core/utils/file_creation/templates/MILESTONE_TEMPLATE.md +246 -0
  193. agentrules-3.4.1/src/agentrules/core/utils/file_creation/templates/PLANS.md +294 -0
  194. agentrules-3.4.1/src/agentrules/core/utils/file_system/__init__.py +13 -0
  195. agentrules-3.4.1/src/agentrules/core/utils/file_system/file_retriever.py +354 -0
  196. agentrules-3.4.1/src/agentrules/core/utils/file_system/gitignore.py +40 -0
  197. agentrules-3.4.1/src/agentrules/core/utils/file_system/tree_generator.py +304 -0
  198. agentrules-3.4.1/src/agentrules/core/utils/formatters/__init__.py +6 -0
  199. agentrules-3.4.1/src/agentrules/core/utils/formatters/clean_agentrules.py +175 -0
  200. agentrules-3.4.1/src/agentrules/core/utils/model_config_helper.py +86 -0
  201. agentrules-3.4.1/src/agentrules/core/utils/offline.py +123 -0
  202. agentrules-3.4.1/src/agentrules/core/utils/parsers/__init__.py +7 -0
  203. agentrules-3.4.1/src/agentrules/core/utils/parsers/agent_parser.py +627 -0
  204. agentrules-3.4.1/src/agentrules/core/utils/provider_capabilities.py +49 -0
  205. agentrules-3.4.1/src/agentrules/core/utils/release_metadata.py +122 -0
  206. agentrules-3.4.1/src/agentrules/core/utils/structured_outputs.py +561 -0
  207. agentrules-3.4.1/src/agentrules/core/utils/system_prompt.py +93 -0
  208. agentrules-3.4.1/src/agentrules/core/utils/token_estimator.py +201 -0
  209. agentrules-3.4.1/src/agentrules/core/utils/token_packer.py +216 -0
  210. agentrules-3.4.1/src/agentrules.egg-info/PKG-INFO +385 -0
  211. agentrules-3.4.1/src/agentrules.egg-info/SOURCES.txt +217 -0
  212. agentrules-3.4.1/src/agentrules.egg-info/dependency_links.txt +1 -0
  213. agentrules-3.4.1/src/agentrules.egg-info/entry_points.txt +2 -0
  214. agentrules-3.4.1/src/agentrules.egg-info/requires.txt +25 -0
  215. agentrules-3.4.1/src/agentrules.egg-info/top_level.txt +1 -0
  216. agentrules-3.4.1/tests/test_cli_services.py +282 -0
  217. agentrules-3.4.1/tests/test_env.py +33 -0
  218. agentrules-3.4.1/tests/test_openai_responses.py +113 -0
  219. agentrules-3.4.1/tests/test_smoke_discovery.py +7 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Trevor Nichols
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,385 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentrules
3
+ Version: 3.4.1
4
+ Summary: AGENTS.md/CLAUDE.md generator and ExecPlan harness for coding agents
5
+ Author: trevor-nichols
6
+ License-Expression: MIT
7
+ Keywords: cursor,ai,analysis,cli,agents
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.11
10
+ Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Operating System :: OS Independent
12
+ Requires-Python: >=3.11.9
13
+ Description-Content-Type: text/markdown
14
+ License-File: LICENSE
15
+ Requires-Dist: anthropic>=0.78.0
16
+ Requires-Dist: rich
17
+ Requires-Dist: openai
18
+ Requires-Dist: google-genai>=1.51.0
19
+ Requires-Dist: protobuf>=4.25
20
+ Requires-Dist: python-dotenv
21
+ Requires-Dist: tavily-python>=0.7.14
22
+ Requires-Dist: typer>=0.12
23
+ Requires-Dist: questionary>=2.0
24
+ Requires-Dist: platformdirs>=4.0
25
+ Requires-Dist: pathspec>=0.12
26
+ Requires-Dist: PyYAML>=6.0
27
+ Requires-Dist: tomli; python_version < "3.11"
28
+ Requires-Dist: tomli-w
29
+ Requires-Dist: tiktoken>=0.7.0
30
+ Provides-Extra: dev
31
+ Requires-Dist: pytest; extra == "dev"
32
+ Requires-Dist: pytest-asyncio; extra == "dev"
33
+ Requires-Dist: pytest-mock; extra == "dev"
34
+ Requires-Dist: flask; extra == "dev"
35
+ Requires-Dist: ruff>=0.6; extra == "dev"
36
+ Requires-Dist: pyright>=1.1.380; extra == "dev"
37
+ Dynamic: license-file
38
+
39
+ # 🤖 AgentRules Architect v3
40
+
41
+ <div align="center">
42
+
43
+ [![MIT License](https://img.shields.io/badge/License-MIT-green.svg)](https://choosealicense.com/licenses/mit/)
44
+ [![OpenAI](https://img.shields.io/badge/OpenAI-supported-blue.svg)](https://openai.com/)
45
+ [![Codex Runtime](https://img.shields.io/badge/Codex%20app--server-supported-orange.svg)](https://github.com/openai/codex)
46
+ [![Anthropic](https://img.shields.io/badge/Anthropic-supported-purple.svg)](https://www.anthropic.com/)
47
+ [![DeepSeek](https://img.shields.io/badge/DeepSeek-supported-red.svg)](https://deepseek.com/)
48
+ [![Google](https://img.shields.io/badge/Google-supported-green.svg)](https://ai.google.dev/)
49
+ [![xAI](https://img.shields.io/badge/xAI-supported-black.svg)](https://x.ai/)
50
+ [![Built By](https://img.shields.io/badge/Built%20By-trevor-nichols-orange.svg)](https://github.com/trevor-nichols)
51
+
52
+ **Your multi-provider AI code analysis and AGENTS.md generator 🚀**
53
+
54
+ [Demo](#-cli-demo) • [Highlights](#-v3-highlights) • [Features](#-feature-overview) • [Requirements](#-requirements) • [Installation](#-installation) • [Codex Runtime](#-configure-codex-runtime-optional) • [CLI](#-cli-at-a-glance) • [Configuration](#-configuration--preferences) • [Architecture](#-project-architecture) • [Outputs](#-output-artifacts) • [Development](#-development-workflow)
55
+
56
+ </div>
57
+
58
+ ## 🎥 CLI Demo
59
+
60
+ ![AgentRules CLI demo](docs/assets/media/demo.gif)
61
+
62
+ ## Why AgentRules Architect?
63
+
64
+ Version 3 rebrands the project from **CursorRules Architect** to **AgentRules Architect** to match the standardized `AGENTS.md` contract used across modern AI coding agents. The rename comes with a fresh Typer-powered CLI, a persistent configuration service, broader provider support across Anthropic, OpenAI, Google, DeepSeek, xAI, and the local Codex app-server runtime, and a tooling layer that keeps the six-phase analysis reliably consistent yet flexibly extensible to your project's unique needs.
65
+
66
+ ## 🔥 v3 Highlights
67
+
68
+ - ✨ **Rebrand & packaging** – ships with console-script and `python -m agentrules` entry points when installed from source.
69
+ - 🧭 **Typer CLI overhaul** – `agentrules` launches an interactive main menu with subcommands for `analyze`, `configure`, and `keys`.
70
+ - 🗂️ **Persistent settings** – API keys, model presets, logging, and output preferences live in `~/.config/agentrules/config.toml` (override with `AGENTRULES_CONFIG_DIR`).
71
+ - 🧠 **Expanded provider matrix** – the preset catalog spans Anthropic, OpenAI, Google, DeepSeek, xAI, and Codex runtime presets, with phase-by-phase model selection from the CLI or config file.
72
+ - 🧰 **Codex runtime support** – route phases through local `codex app-server` with ChatGPT auth via `CODEX_HOME` (no AgentRules-stored OpenAI API key required).
73
+ - 🔌 **Unified tool management** – the new `ToolManager` adapts JSON tool schemas for each provider; Tavily web search is available to researcher agents with one toggle.
74
+ - ✅ **Test & quality backbone** – 200+ unit/integration tests, Pyright, Ruff, and offline stubs provide confidence without hitting live APIs.
75
+
76
+ ## ✨ Feature Overview
77
+
78
+ - 🌐 Multi-provider orchestration with consistent streaming telemetry.
79
+ - 🔍 Six-phase pipeline: discovery → planning → deep dives → synthesis → consolidation → final AGENTS.md generation.
80
+ - 🧩 Researcher tooling via Tavily search with provider-aware tool translation.
81
+ - 📊 Rich terminal UI (Rich) showing per-agent progress, duration, and failures in real time.
82
+ - 🪵 Configurable outputs: `AGENTS.md`, `SNAPSHOT.md` (enabled by default), `.cursorignore`, optional `.agent/` scaffold templates, and per-phase markdown/json snapshots.
83
+ - 🔧 Declarative model presets plus runtime overrides via CLI or TOML.
84
+
85
+ ## 🧮 Analysis Pipeline
86
+
87
+ All CLI entry points ultimately execute the `AnalysisPipeline` orchestrator (`src/agentrules/core/pipeline`) that wires the six analysis phases together and streams progress events to the Rich console.
88
+
89
+ 1. **Phase 1 – Initial Discovery** (`core/analysis/phase_1.py`) inventories the repo tree, surfaces tech stack signals, and collects dependency metadata that later phases reuse.
90
+ 2. **Phase 2 – Methodical Planning** (`core/analysis/phase_2.py`) asks the configured model to draft an XML-ish agent plan, then parses it into structured agent definitions (with a safe fallback extractor).
91
+ 3. **Phase 3 – Deep Analysis** (`core/analysis/phase_3.py`) spins up specialized architects per agent definition, hydrates them with file excerpts, and runs them in parallel; if no plan exists it falls back to three default agents.
92
+ 4. **Phase 4 – Synthesis** (`core/analysis/phase_4.py`) stitches together Phase 3 findings, elevates cross-cutting insights, and flags follow-up prompts for the final steps.
93
+ 5. **Phase 5 – Consolidation** (`core/analysis/phase_5.py`) produces a canonical report object that downstream tooling (rules generator, metrics, exporters) consumes.
94
+ 6. **Final Analysis** (`core/analysis/final_analysis.py`) produces the narrative summary that drives `AGENTS.md`, output toggles, and console highlights.
95
+
96
+ The pipeline captures metrics (elapsed time, agent counts) and hands them to the output writer so offline runs and full analyses share the same persistence path.
97
+
98
+ ## 🛠 Requirements
99
+
100
+ - Python **3.11.9+** (matches Pyright target and packaged metadata).
101
+ - API key(s) for at least one provider:
102
+ - Anthropic
103
+ - OpenAI
104
+ - DeepSeek
105
+ - Google
106
+ - xAI
107
+ - Tavily (optional, enables live web search tooling)
108
+ - Optional local runtime provider:
109
+ - Codex CLI (`codex`) for `codex app-server` integration
110
+ - Current preset IDs live in `src/agentrules/config/agents.py`.
111
+ - Core dependencies: `anthropic`, `openai`, `google-genai>=1.51.0`, `tavily-python`, `tiktoken`, `rich`, `typer`, `questionary`, `platformdirs`, `pathspec`, `python-dotenv`, `protobuf`.
112
+ - Dev tooling: `pytest`, `pytest-asyncio`, `pytest-mock`, `flask`, `ruff`, `pyright`.
113
+
114
+ ## 📦 Installation
115
+
116
+ ### Install from PyPI
117
+
118
+ ```bash
119
+ pip install agentrules
120
+ ```
121
+
122
+ ### Install from source
123
+
124
+ ```bash
125
+ git clone https://github.com/trevor-nichols/agentrules-architect.git
126
+ cd agentrules-architect
127
+ python -m venv .venv
128
+ source .venv/bin/activate
129
+ pip install -e ".[dev]"
130
+ ```
131
+
132
+ Need a one-liner? Use the helper script:
133
+
134
+ ```bash
135
+ ./scripts/bootstrap_env.sh # set PYTHON_BIN=/abs/path/to/python to override interpreter
136
+ ```
137
+
138
+ ### Quick smoke test
139
+
140
+ ```bash
141
+ agentrules --version
142
+ agentrules analyze /path/to/project
143
+ ```
144
+
145
+ Prefer module execution during development? Invoke the CLI with Python’s module flag—the package ships a `__main__` entry point:
146
+
147
+ ```bash
148
+ python -m agentrules analyze /path/to/project
149
+ ```
150
+
151
+ Need to install directly from GitHub instead of PyPI?
152
+
153
+ ```bash
154
+ pip install "git+https://github.com/trevor-nichols/agentrules-architect.git#egg=agentrules"
155
+ ```
156
+
157
+ ## 🔐 Configure API Keys
158
+
159
+ Run the interactive configurator to store credentials securely:
160
+
161
+ ```bash
162
+ agentrules configure
163
+ ```
164
+
165
+ - Keys are saved to `~/.config/agentrules/config.toml` (override with `AGENTRULES_CONFIG_DIR`).
166
+ - Values are mirrored into environment variables on the next launch.
167
+ - Use `agentrules configure --provider openai` for quick single-key updates.
168
+ - Show current status with:
169
+
170
+ ```bash
171
+ agentrules keys
172
+ ```
173
+
174
+ ## 🧰 Configure Codex Runtime (Optional)
175
+
176
+ AgentRules supports Codex as a local runtime provider via `codex app-server`, separate from API-key providers.
177
+
178
+ - Open `agentrules` -> `Settings` -> `Codex runtime`
179
+ - Configure:
180
+ - executable path (`codex` by default)
181
+ - `CODEX_HOME` strategy (`managed` or `inherit`)
182
+ - optional managed home override
183
+ - Use `Sign in with ChatGPT` to authenticate runtime-backed model access.
184
+
185
+ After runtime setup, choose Codex presets under `Settings -> Model presets per phase`.
186
+
187
+ See [docs/codex-runtime.md](docs/codex-runtime.md) for complete setup, auth flow, model catalog behavior, and live smoke instructions.
188
+
189
+ ## 🧭 CLI At A Glance
190
+
191
+ - `agentrules` – interactive main menu (analyze, configure models/outputs, check keys).
192
+ - `agentrules analyze /path/to/project` – full six-phase analysis.
193
+ - `agentrules analyze /path/to/project --rules-filename CLAUDE.md` – one-run override for output rules filename.
194
+ - `agentrules snapshot generate [path]` – create (or refresh) `SNAPSHOT.md` in the current directory by default.
195
+ - `agentrules snapshot sync [path]` – sync an existing snapshot as project files evolve (also creates if missing).
196
+ - `agentrules execplan new \"Title\"` – create a new ExecPlan markdown file under `.agent/exec_plans/active/<slug>/`.
197
+ - `agentrules execplan archive EP-YYYYMMDD-NNN [--date YYYYMMDD]` – archive a full ExecPlan directory under `.agent/exec_plans/archive/YYYY/MM/DD/EP-YYYYMMDD-NNN_<slug>/`.
198
+ - `agentrules execplan list [--path]` – list active ExecPlans with compact milestone progress (`completed/total`).
199
+ - `agentrules execplan milestone new EP-YYYYMMDD-NNN \"Title\" [--ms N]` – create a milestone under a specific ExecPlan (auto sequence by default, or explicit `MS###` when provided).
200
+ - `agentrules execplan milestone list EP-YYYYMMDD-NNN [--active-only]` – list milestones for one ExecPlan.
201
+ - `agentrules execplan milestone archive EP-YYYYMMDD-NNN --ms <N>` – archive an active milestone sequence.
202
+ - `agentrules execplan milestone remaining EP-YYYYMMDD-NNN [--path]` – show active milestones left for one ExecPlan.
203
+ - `agentrules execplan-registry [build|check|update]` – manage `.agent/exec_plans/registry.json` from ExecPlan front matter.
204
+ - `agentrules scaffold sync [--check|--force]` – sync `.agent/PLANS.md` and `.agent/templates/MILESTONE_TEMPLATE.md` with packaged defaults.
205
+ - `agentrules configure --models` – assign presets per phase with guided prompts; the Phase 1 → Researcher entry lets you toggle the agent On/Off once a Tavily key is configured.
206
+ - `agentrules configure --outputs` – toggle `.cursorignore`, `.agent/` scaffold generation, `phases_output/`, and custom rules filename.
207
+ - `agentrules configure --logging` – set verbosity (`quiet`, `standard`, `verbose`) or export via `AGENTRULES_LOG_LEVEL`.
208
+
209
+ ## 🧭 ExecPlan & Milestones
210
+
211
+ ExecPlans are long-horizon execution artifacts for work that is too large for a single prompt/session and too risky to run as ad hoc edits.
212
+ They give humans and agents a durable plan, explicit scope, and audit trail that can survive context switching across days or weeks.
213
+
214
+ This follows the same general planning pattern OpenAI now recommends for larger Codex work: start with an implementation plan, then execute it iteratively in smaller scoped chunks (see [OpenAI Codex docs](https://developers.openai.com/codex) and [How OpenAI uses Codex](https://openai.com/index/how-openai-uses-codex/)).
215
+
216
+ Think of the model in three layers:
217
+
218
+ - **ExecPlan (strategic layer)** – one high-level objective, constraints, success criteria, and overall rollout strategy.
219
+ - **Milestones (delivery layer)** – concrete sub-deliverables within that plan, sequenced (`MS001`, `MS002`, ...) and independently completable.
220
+ - **Task checklists (execution layer)** – fine-grained implementation/validation steps inside each plan or milestone document.
221
+
222
+ Why this exists:
223
+
224
+ - Keep long-running work coherent across multiple agent runs.
225
+ - Make progress and remaining scope visible at a glance.
226
+ - Reduce regressions by forcing explicit sequencing, verification, and rollback thinking.
227
+ - Preserve design decisions and rationale in one canonical place.
228
+
229
+ ExecPlans and milestones use canonical IDs and deterministic file locations:
230
+
231
+ - ExecPlan ID: `EP-YYYYMMDD-NNN`
232
+ - Milestone ID: `EP-YYYYMMDD-NNN/MS###`
233
+ - Active ExecPlan path: `.agent/exec_plans/active/<plan-slug>/EP-YYYYMMDD-NNN_<plan-slug>.md`
234
+ - Archived ExecPlan path: `.agent/exec_plans/archive/YYYY/MM/DD/EP-YYYYMMDD-NNN_<plan-slug>/EP-YYYYMMDD-NNN_<plan-slug>.md`
235
+ - Active milestone path: `.agent/exec_plans/active/<plan-slug>/milestones/active/MS###_<milestone-slug>.md`
236
+ - Archive milestone path: `.agent/exec_plans/active/<plan-slug>/milestones/archive/MS###_<milestone-slug>.md`
237
+
238
+ Milestone creation is parent-first and sequence-safe:
239
+
240
+ - Users provide parent ExecPlan ID + milestone title.
241
+ - CLI/API assign `MS###` automatically, or accept `--ms N` to request a specific sequence.
242
+ - Sequence is monotonic per plan across active and archived milestones (`MS001`, `MS002`, ...).
243
+ - `.agent/templates/MILESTONE_TEMPLATE.md` is a guidance scaffold for authors.
244
+ Generated milestone files come from an internal file template used by `execplan milestone new`.
245
+
246
+ Examples:
247
+
248
+ ```bash
249
+ # 1) Create an ExecPlan
250
+ agentrules execplan new "Auth Refresh" --date 20260207
251
+
252
+ # 2) Create milestones for that plan (auto-assigns MS001, then MS002, ...)
253
+ agentrules execplan milestone new EP-20260207-001 "Design callback flow"
254
+ agentrules execplan milestone new EP-20260207-001 "Implement callback flow"
255
+
256
+ # Optional: request an explicit sequence (must be unused)
257
+ agentrules execplan milestone new EP-20260207-001 "Backfill docs" --ms 5
258
+
259
+ # 3) List milestones (all or active-only)
260
+ agentrules execplan milestone list EP-20260207-001
261
+ agentrules execplan milestone list EP-20260207-001 --active-only
262
+
263
+ # Optional: compact "what's left" view for active milestones only
264
+ agentrules execplan milestone remaining EP-20260207-001
265
+
266
+ # 4) Archive a completed milestone
267
+ agentrules execplan milestone archive EP-20260207-001 --ms 1
268
+
269
+ # 5) Archive the completed ExecPlan directory
270
+ agentrules execplan archive EP-20260207-001 --date 20260212
271
+
272
+ # Optional: list all active plans with compact milestone progress
273
+ agentrules execplan list
274
+ ```
275
+
276
+ ## ⚙️ Configuration & Preferences
277
+
278
+ - **Config file**: `~/.config/agentrules/config.toml`
279
+ - `providers` – API keys per provider.
280
+ - `codex` – local runtime settings (`cli_path`, `home_strategy`, `managed_home`).
281
+ - `models` – preset IDs applied to each phase (`phase1`, `phase2`, `final`, `researcher`, …).
282
+ - `outputs` – `generate_cursorignore`, `generate_agent_scaffold`, `generate_phase_outputs`, `generate_snapshot`, `rules_filename`, `snapshot_filename`.
283
+ - `generate_snapshot` defaults to `true` and writes `SNAPSHOT.md` at project root after each analysis run (toggle anytime in `agentrules configure --outputs`).
284
+ - `features` – `researcher_mode` (`on`/`off`) to control Phase 1 web research (managed from the Researcher row in the models wizard).
285
+ - `exclusions` – add/remove directories, files, or extensions; choose to respect `.gitignore`.
286
+ - **Runtime helpers** (via `agentrules/core/configuration/manager.py`):
287
+ - `ConfigManager.get_effective_exclusions()` resolves overrides with defaults from `config/exclusions.py`.
288
+ - `ConfigManager.should_generate_phase_outputs()` and related methods toggle output writers in `core/utils/file_creation`.
289
+ - **Environment variables**:
290
+ - `AGENTRULES_CONFIG_DIR` – alternate config root.
291
+ - `AGENTRULES_LOG_LEVEL` – overrides persisted verbosity.
292
+ - `AGENTRULES_RULES_FILENAME` – runtime override for generated rules filename (for example `CLAUDE.md`).
293
+ - `CODEX_HOME` – used when Codex `home_strategy = "inherit"`.
294
+ - **Rules filename precedence**:
295
+ 1. `agentrules analyze --rules-filename <name>`
296
+ 2. `AGENTRULES_RULES_FILENAME`
297
+ 3. `outputs.rules_filename` in `config.toml` (set via `agentrules configure --outputs`)
298
+ 4. `AGENTS.md` default
299
+
300
+ ## 🧠 Model Presets & Providers
301
+
302
+ Presets live in `config/agents.py` via the `MODEL_PRESETS` dictionary. Each preset bundles:
303
+
304
+ - Provider (`ModelProvider`)
305
+ - Model name plus reasoning/temperature configuration
306
+ - Human-readable label and description for the CLI wizard
307
+
308
+ The app currently exposes presets across these providers:
309
+
310
+ - Anthropic
311
+ - OpenAI
312
+ - Codex App Server (local runtime)
313
+ - Google
314
+ - DeepSeek
315
+ - xAI
316
+
317
+ Choose any available preset per phase through the CLI (`agentrules configure --models`) or by editing `config.toml` / `config/agents.py`. At runtime the values populate `MODEL_CONFIG`, which the pipeline consumes while resolving phase architects (`src/agentrules/core/agents/factory/factory.py`).
318
+
319
+ > **Preset tip:** Legacy-friendly presets stay under the `gpt5-*` keys (backed by the `gpt-5` model name) so existing `config.toml` files continue to work, while the newer GPT‑5.1 presets live under the `gpt51-*` keys and GPT‑5.2 presets under `gpt52-*`. Mixing them per phase or per-agent is fully supported.
320
+
321
+ ## 🧠 Reasoning & Advanced Configuration
322
+
323
+ - **Reasoning modes:** Anthropic presets use fixed-budget or adaptive thinking depending on the Claude family, Gemini presets use provider-native thinking controls, OpenAI presets map to reasoning effort or temperature based on model family, and DeepSeek/xAI presets keep their provider-native reasoning behavior (`src/agentrules/core/types/models.py`).
324
+ - **Codex runtime modes:** Codex presets route the same model families through `codex app-server`, with runtime-discovered model/effort variants available from the live model catalog.
325
+ - **Agent planning:** Phase 2 generates agent manifests that Phase 3 converts into live architects; when parsing fails the fallback extractor and default agents keep the pipeline running (`core/analysis/phase_2.py`, `core/analysis/phase_3.py`).
326
+ - **Provider-specific tools:** `create_researcher_config` enables Tavily-backed tool use for whichever preset you promote to the Researcher role, and the CLI’s Researcher row simply flips that on/off (`core/types/models.py`, `config/tools.py`).
327
+ - **Prompt customization:** Fine-tune behaviour by editing the phase prompts under `src/agentrules/config/prompts/`—heavy modifications should stay aligned with the YAML/XML formats expected by the parser utilities.
328
+ - **Token-aware runs:** Architects now emit token preflight logs using configured context limits/estimators, and Phase 3 uses limit-aware batching plus summarization when a model’s max input tokens are provided.
329
+ - **Direct overrides:** Advanced users can swap presets or tweak reasoning levels by modifying `MODEL_PRESETS`/`MODEL_PRESET_DEFAULTS` in `config/agents.py`; the configuration manager merges those with TOML overrides at runtime.
330
+
331
+ ## 🔍 Tooling & Research Agents
332
+
333
+ - `core/agent_tools/tool_manager.py` normalizes JSON tool schemas for each provider.
334
+ - `config/tools.py` exposes `TOOL_SETS` and a `with_tools_enabled` helper for models that accept function/tool calls.
335
+ - Tavily search (`tavily_web_search`) ships as the default researcher tool. Add `TAVILY_API_KEY` in the provider settings to automatically enable the Researcher agent, then pick the model (or flip it back `Off`) from the models wizard’s Researcher entry. When disabled—or when no key is present—documentation research is skipped; our contributor smoke tests use deterministic stubs to keep CI free of external calls. The dependency agent automatically downgrades from “knowledge gaps” mode to its legacy full catalog so downstream agents still receive usable dependency data when research is unavailable.
336
+
337
+ ## 🧱 Project Architecture
338
+
339
+ - `agentrules/` – Typer CLI, interactive Questionary flows, Rich UI, configuration services, and pipeline runner (`agentrules/SNAPSHOT.md`).
340
+ - `core/` – provider-specific architects (`core/agents`), analysis phases (`core/analysis`), tool adapters (`core/agent_tools`), streaming primitives, and filesystem utilities (`core/SNAPSHOT.md`).
341
+ - `config/` – preset definitions, exclusions, prompts, and tool bindings (`config/SNAPSHOT.md`).
342
+ - `tests/` – live smoke tests, deterministic offline stubs for CI, provider fixtures, and unit coverage for helpers and phases.
343
+ - `pyproject.toml` – package metadata, scripts, Ruff/Pyright config, and dependency declarations.
344
+
345
+ ## 🧾 Output Artifacts
346
+
347
+ By default the pipeline produces:
348
+
349
+ - `AGENTS.md` (or your custom rules filename) – cleaned, standardized agent instructions.
350
+ - `SNAPSHOT.md` – full project tree snapshot (no depth limit by default) generated at the project root after the pipeline finishes.
351
+ - `.cursorignore` – generated when enabled to keep editor agents focused on relevant files.
352
+ - `.agent/` scaffold – generated when enabled (`.agent/PLANS.md` and `.agent/templates/MILESTONE_TEMPLATE.md`).
353
+ - `phases_output/` – per-phase markdown/JSON snapshots for auditing and downstream automation.
354
+ - Want a concrete sample? See `docs/examples/phases_output/` for a full run’s phase artifacts.
355
+ - Rich console logs summarizing model usage, timing, and file counts.
356
+
357
+ Toggle outputs with `agentrules configure --outputs` or via the config TOML.
358
+
359
+ ## 🛠 Development Workflow
360
+
361
+ - Install dev extras: `pip install -e .[dev]`
362
+ - Format & lint: `ruff format . && ruff check .`
363
+ - Static typing: `pyright`
364
+ - Run targeted tests: `python tests/phase_3_test/run_test.py`
365
+ - Deterministic smoke runs (CI/local without API calls): `agentrules analyze --offline tests/tests_input`
366
+ - Full suite: `python -m unittest discover tests -v`
367
+ - Releases are tag-driven: bump `[project].version` in `pyproject.toml`, commit, create matching `vX.Y.Z` tag, and push it.
368
+ - GitHub Actions now publishes package artifacts with Trusted Publishing (OIDC) via `.github/workflows/publish-pypi.yml` (no long-lived PyPI API token).
369
+ - Run a safe preflight publish first from Actions with `workflow_dispatch` and `repository = testpypi`; publish to production PyPI on tag push or manual `repository = pypi`.
370
+ - Keep docs and presets in sync when adding providers (`config/agents.py`, `config/tools.py`, `core/agents/*`).
371
+
372
+ ### Release Process (PyPI)
373
+
374
+ 1. Update `[project].version` in `pyproject.toml`, then commit and push.
375
+ 2. Run `.github/workflows/publish-pypi.yml` manually with `repository = testpypi` to validate package upload first.
376
+ 3. Create and push matching tag `vX.Y.Z` to trigger Trusted Publishing to PyPI.
377
+ 4. The same tag also triggers `.github/workflows/release.yml` for GitHub Release artifact/notes.
378
+
379
+ ## 🤝 Contributing
380
+
381
+ See `CONTRIBUTING.md` for detailed guidelines on workflows, testing, and pull request expectations. Issues and PRs are welcome—just ensure Ruff/Pyright/tests pass before submitting.
382
+
383
+ ## 📄 License
384
+
385
+ Released under the MIT License. See `LICENSE` for details.