axe-cli 1.7.3__tar.gz → 1.7.5__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 (154) hide show
  1. axe_cli-1.7.5/PKG-INFO +1386 -0
  2. axe_cli-1.7.5/README.md +1353 -0
  3. {axe_cli-1.7.3 → axe_cli-1.7.5}/pyproject.toml +2 -2
  4. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/agents/default/agent.yaml +2 -2
  5. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/llm.py +35 -1
  6. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/skills/axe-cli-help/SKILL.md +3 -3
  7. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/axe/auto_init.py +47 -40
  8. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/shell/__init__.py +42 -4
  9. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/shell/slash.py +6 -6
  10. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/shell/visualize.py +16 -1
  11. axe_cli-1.7.3/PKG-INFO +0 -34
  12. axe_cli-1.7.3/README.md +0 -1
  13. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/CHANGELOG.md +0 -0
  14. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/__init__.py +0 -0
  15. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/acp/AGENTS.md +0 -0
  16. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/acp/__init__.py +0 -0
  17. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/acp/convert.py +0 -0
  18. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/acp/kaos.py +0 -0
  19. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/acp/mcp.py +0 -0
  20. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/acp/server.py +0 -0
  21. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/acp/session.py +0 -0
  22. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/acp/tools.py +0 -0
  23. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/acp/types.py +0 -0
  24. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/agents/default/sub.yaml +0 -0
  25. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/agents/default/system.md +0 -0
  26. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/agents/okabe/agent.yaml +0 -0
  27. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/agentspec.py +0 -0
  28. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/app.py +0 -0
  29. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/auth/oauth.py +0 -0
  30. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/auth/platforms.py +0 -0
  31. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/cli/__init__.py +0 -0
  32. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/cli/__main__.py +0 -0
  33. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/cli/info.py +0 -0
  34. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/cli/mcp.py +0 -0
  35. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/cli/toad.py +0 -0
  36. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/config.py +0 -0
  37. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/constant.py +0 -0
  38. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/exception.py +0 -0
  39. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/metadata.py +0 -0
  40. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/prompts/__init__.py +0 -0
  41. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/prompts/compact.md +0 -0
  42. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/prompts/init.md +0 -0
  43. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/py.typed +0 -0
  44. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/session.py +0 -0
  45. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/share.py +0 -0
  46. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/skill/__init__.py +0 -0
  47. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/skill/flow/__init__.py +0 -0
  48. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/skill/flow/d2.py +0 -0
  49. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/skill/flow/mermaid.py +0 -0
  50. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/skills/skill-creator/SKILL.md +0 -0
  51. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/soul/__init__.py +0 -0
  52. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/soul/agent.py +0 -0
  53. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/soul/approval.py +0 -0
  54. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/soul/axesoul.py +0 -0
  55. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/soul/compaction.py +0 -0
  56. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/soul/context.py +0 -0
  57. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/soul/denwarenji.py +0 -0
  58. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/soul/message.py +0 -0
  59. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/soul/slash.py +0 -0
  60. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/soul/toolset.py +0 -0
  61. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/token_counter.py +0 -0
  62. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/AGENTS.md +0 -0
  63. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/__init__.py +0 -0
  64. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/axe/__init__.py +0 -0
  65. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/axe/context.py +0 -0
  66. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/axe/impact.py +0 -0
  67. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/axe/index.py +0 -0
  68. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/axe/prewarm.py +0 -0
  69. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/axe/search.py +0 -0
  70. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/axe/structure.py +0 -0
  71. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/axe/warm.py +0 -0
  72. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/display.py +0 -0
  73. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/dmail/__init__.py +0 -0
  74. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/dmail/dmail.md +0 -0
  75. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/__init__.py +0 -0
  76. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/glob.md +0 -0
  77. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/glob.py +0 -0
  78. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/grep.md +0 -0
  79. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/grep_local.py +0 -0
  80. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/read.md +0 -0
  81. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/read.py +0 -0
  82. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/read_media.md +0 -0
  83. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/read_media.py +0 -0
  84. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/replace.md +0 -0
  85. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/replace.py +0 -0
  86. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/utils.py +0 -0
  87. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/write.md +0 -0
  88. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/file/write.py +0 -0
  89. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/multiagent/__init__.py +0 -0
  90. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/multiagent/create.md +0 -0
  91. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/multiagent/create.py +0 -0
  92. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/multiagent/task.md +0 -0
  93. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/multiagent/task.py +0 -0
  94. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/shell/__init__.py +0 -0
  95. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/shell/bash.md +0 -0
  96. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/shell/powershell.md +0 -0
  97. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/test.py +0 -0
  98. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/think/__init__.py +0 -0
  99. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/think/think.md +0 -0
  100. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/todo/__init__.py +0 -0
  101. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/todo/set_todo_list.md +0 -0
  102. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/utils.py +0 -0
  103. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/web/__init__.py +0 -0
  104. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/web/fetch.md +0 -0
  105. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/web/fetch.py +0 -0
  106. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/web/search.md +0 -0
  107. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/tools/web/search.py +0 -0
  108. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/__init__.py +0 -0
  109. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/acp/__init__.py +0 -0
  110. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/print/__init__.py +0 -0
  111. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/print/visualize.py +0 -0
  112. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/shell/console.py +0 -0
  113. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/shell/debug.py +0 -0
  114. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/shell/keyboard.py +0 -0
  115. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/shell/oauth.py +0 -0
  116. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/shell/prompt.py +0 -0
  117. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/shell/replay.py +0 -0
  118. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/shell/setup.py +0 -0
  119. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/shell/update.py +0 -0
  120. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/ui/shell/usage.py +0 -0
  121. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/__init__.py +0 -0
  122. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/aiohttp.py +0 -0
  123. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/aioqueue.py +0 -0
  124. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/broadcast.py +0 -0
  125. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/changelog.py +0 -0
  126. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/clipboard.py +0 -0
  127. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/datetime.py +0 -0
  128. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/diff.py +0 -0
  129. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/environment.py +0 -0
  130. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/envvar.py +0 -0
  131. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/frontmatter.py +0 -0
  132. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/logging.py +0 -0
  133. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/media_tags.py +0 -0
  134. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/message.py +0 -0
  135. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/path.py +0 -0
  136. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/pyinstaller.py +0 -0
  137. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/rich/__init__.py +0 -0
  138. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/rich/columns.py +0 -0
  139. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/rich/markdown.py +0 -0
  140. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/rich/markdown_sample.md +0 -0
  141. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/rich/markdown_sample_short.md +0 -0
  142. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/rich/syntax.py +0 -0
  143. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/signals.py +0 -0
  144. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/slashcmd.py +0 -0
  145. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/string.py +0 -0
  146. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/term.py +0 -0
  147. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/utils/typing.py +0 -0
  148. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/wire/__init__.py +0 -0
  149. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/wire/file.py +0 -0
  150. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/wire/jsonrpc.py +0 -0
  151. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/wire/protocol.py +0 -0
  152. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/wire/serde.py +0 -0
  153. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/wire/server.py +0 -0
  154. {axe_cli-1.7.3 → axe_cli-1.7.5}/src/axe_cli/wire/types.py +0 -0
axe_cli-1.7.5/PKG-INFO ADDED
@@ -0,0 +1,1386 @@
1
+ Metadata-Version: 2.3
2
+ Name: axe-cli
3
+ Version: 1.7.5
4
+ Summary: axe, yerrrr
5
+ Requires-Dist: agent-client-protocol==0.7.0
6
+ Requires-Dist: axe-dig
7
+ Requires-Dist: aiofiles>=24.0,<26.0
8
+ Requires-Dist: aiohttp==3.13.3
9
+ Requires-Dist: typer==0.21.1
10
+ Requires-Dist: kosong[contrib]==0.41.0
11
+ Requires-Dist: loguru>=0.6.0,<0.8
12
+ Requires-Dist: prompt-toolkit==3.0.52
13
+ Requires-Dist: pillow==12.1.0
14
+ Requires-Dist: pyyaml==6.0.3
15
+ Requires-Dist: rich==14.2.0
16
+ Requires-Dist: ripgrepy==2.2.0
17
+ Requires-Dist: streamingjson==0.0.5
18
+ Requires-Dist: trafilatura==2.0.0
19
+ Requires-Dist: lxml==6.0.2
20
+ Requires-Dist: tenacity==9.1.2
21
+ Requires-Dist: fastmcp==2.12.5
22
+ Requires-Dist: pydantic==2.12.5
23
+ Requires-Dist: httpx[socks]==0.28.1
24
+ Requires-Dist: pykaos==0.6.0
25
+ Requires-Dist: batrachian-toad==0.5.23 ; python_full_version >= '3.14'
26
+ Requires-Dist: tomlkit==0.14.0
27
+ Requires-Dist: jinja2==3.1.6
28
+ Requires-Dist: pyobjc-framework-cocoa>=12.1 ; sys_platform == 'darwin'
29
+ Requires-Dist: keyring>=25.7.0
30
+ Requires-Dist: tiktoken>=0.8.0
31
+ Requires-Python: >=3.12
32
+ Description-Content-Type: text/markdown
33
+
34
+ # axe
35
+
36
+ **The AI agent built for real codebases.**
37
+
38
+ While other AI coding tools burn tokens on bloat to charge you more, axe gives you surgical precision. Built for large-scale projects, battle-tested internally for 6 months, and powered by the world's most advanced code retrieval engine.
39
+
40
+ ---
41
+
42
+ ## What is axe?
43
+
44
+ axe is an AI agent that runs in your terminal, helping you complete software development tasks and terminal operations. It can read and edit code, execute shell commands, search and fetch web pages, and autonomously plan and adjust actions during execution.
45
+
46
+ **axe is suited for:**
47
+ - Writing and modifying code: Implementing new features, fixing bugs, refactoring code
48
+ - Understanding projects: Exploring unfamiliar codebases, answering architecture and implementation questions
49
+ - Automating tasks: Batch processing files, running builds and tests, executing scripts
50
+ - Research and data analysis: Web research, log analysis, data processing
51
+
52
+ axe provides a shell-like interactive experience in the terminal. You can describe your needs in natural language or **press Ctrl+X** to switch to shell mode and execute commands directly.
53
+
54
+ ---
55
+
56
+ ## Why axe exists
57
+
58
+ **The problem:** Claude Code and OpenAI Codex dump your entire codebase into context, charging you for irrelevant noise. They're built for vibe coding—one-shot weekend projects where "good enough" is the goal.
59
+
60
+ **The reality:** Real engineering happens in 100K+ line codebases where precision matters. You need to understand execution flow, trace bugs through call graphs, profile memory bottlenecks, and refactor without breaking half your tests.
61
+
62
+ **The solution:** axe combines AI agents with **axe-dig**, our 5-layer code intelligence engine that extracts meaning instead of dumping text. The result:
63
+
64
+ - **95% fewer tokens** while preserving everything needed to understand code
65
+ - **Semantic search** that finds code by behavior, not just keywords
66
+ - **Execution tracing** (coming soon) that shows you what values flowed through functions
67
+ - **Flame graphs & memory profiling** (coming soon) to debug performance, not just logic
68
+ - **Call graph analysis** to refactor safely and understand impact
69
+
70
+ This isn't a toy for side projects. This is the tool our internal team has used for 6 months to ship production code faster.
71
+
72
+ ---
73
+
74
+ ## Common Use Cases
75
+
76
+ axe can help you complete various software development and general tasks. Here are some typical scenarios.
77
+
78
+ ### Implementing new features
79
+
80
+ When you need to add new features to your project, simply describe your requirements in natural language. axe will automatically read relevant code, understand the project structure, and then make modifications.
81
+
82
+ ```
83
+ Add pagination to the user list page, showing 20 records per page
84
+ ```
85
+
86
+ axe typically works through a "Read → Edit → Verify" workflow:
87
+ 1. **Read**: Search and read relevant code, understand existing implementation
88
+ 2. **Edit**: Write or modify code, following the project's coding style
89
+ 3. **Verify**: Run tests or builds to ensure changes don't introduce issues
90
+
91
+ If you're not satisfied with the changes, you can tell axe to adjust:
92
+
93
+ ```
94
+ The pagination component style doesn't match the rest of the project, reference the Button component's style
95
+ ```
96
+
97
+ ### Fixing bugs
98
+
99
+ Describe the problem you're encountering, and axe will help you locate the cause and fix it:
100
+
101
+ ```
102
+ After user login, when redirecting to the home page, it occasionally shows logged out status. Help me investigate
103
+ ```
104
+
105
+ For problems with clear error messages, you can paste the error log directly:
106
+
107
+ ```
108
+ When running npm test, I get this error:
109
+
110
+ TypeError: Cannot read property 'map' of undefined
111
+ at UserList.render (src/components/UserList.jsx:15:23)
112
+
113
+ Please fix it
114
+ ```
115
+
116
+ You can also have axe run commands to reproduce and verify the issue:
117
+
118
+ ```
119
+ Run the tests, and if there are any failing cases, fix them
120
+ ```
121
+
122
+ ### Understanding projects
123
+
124
+ axe can help you explore and understand unfamiliar codebases:
125
+
126
+ ```
127
+ What's the overall architecture of this project? Where is the entry file?
128
+ ```
129
+
130
+ ```
131
+ How is the user authentication flow implemented? What files are involved?
132
+ ```
133
+
134
+ ```
135
+ Explain what the src/core/scheduler.py file does
136
+ ```
137
+
138
+ If you encounter parts you don't understand while reading code, you can ask anytime:
139
+
140
+ ```
141
+ What's the difference between useCallback and useMemo? Why use useCallback here?
142
+ ```
143
+
144
+ ### Automating small tasks
145
+
146
+ axe can perform various repetitive small tasks:
147
+
148
+ ```
149
+ Change all var declarations to const or let in .js files under the src directory
150
+ ```
151
+
152
+ ```
153
+ Add documentation comments to all public functions without docstrings
154
+ ```
155
+
156
+ ```
157
+ Generate unit tests for this API module
158
+ ```
159
+
160
+ ```
161
+ Update all dependencies in package.json to the latest version, then run tests to make sure there are no issues
162
+ ```
163
+
164
+ ### Automating general tasks
165
+
166
+ Beyond code-related tasks, axe can also handle general scenarios.
167
+
168
+ **Research tasks:**
169
+ ```
170
+ Research Python async web frameworks for me, compare the pros and cons of FastAPI, Starlette, and Sanic
171
+ ```
172
+
173
+ **Data analysis:**
174
+ ```
175
+ Analyze the access logs in the logs directory, count the call frequency and average response time for each endpoint
176
+ ```
177
+
178
+ **Batch file processing:**
179
+ ```
180
+ Convert all PNG images in the images directory to JPEG format, save to the output directory
181
+ ```
182
+
183
+ ---
184
+
185
+ ## Quick start
186
+
187
+ ### Install
188
+ ```bash
189
+ pip install axe-cli axe-dig
190
+ ```
191
+
192
+ ### Index your codebase
193
+ ```bash
194
+ cd /path/to/your/project
195
+ axe
196
+ ```
197
+
198
+ On first run, axe-dig automatically indexes your codebase (30-60 seconds for typical projects). After that, queries are instant.
199
+
200
+ ### Start using
201
+ ```bash
202
+ # Find code by behavior
203
+ /skill:code-search "database connection pooling"
204
+
205
+ # Understand a function without reading the whole file
206
+ /skill:code-context get_user_by_id
207
+
208
+ # See who calls a function before refactoring
209
+ /skill:code-impact authenticate_request
210
+
211
+ # Make surgical edits
212
+ StrReplaceFile src/auth.py "old code" "new code"
213
+
214
+ # Toggle to shell mode
215
+ [Ctrl+X]
216
+ pytest tests/
217
+ [Ctrl+X]
218
+ ```
219
+
220
+ ---
221
+
222
+ ## What makes axe different
223
+
224
+ ### 1. Precision over bloat
225
+ Other tools: "Here's your entire 50-file module. Claude, figure it out."
226
+ **axe**: "Here are the 6 lines that affect your bug, the call graph showing who uses this function, and the data flow proving where the null came from."
227
+
228
+ **How?** axe-dig builds 5 analysis layers:
229
+ ```
230
+ ┌─────────────────────────────────────────────────────────────┐
231
+ │ Layer 5: Program Dependence → "What affects line 42?" │
232
+ │ Layer 4: Data Flow → "Where does this value go?" │
233
+ │ Layer 3: Control Flow → "How complex is this?" │
234
+ │ Layer 2: Call Graph → "Who calls this function?" │
235
+ │ Layer 1: AST → "What functions exist?" │
236
+ └─────────────────────────────────────────────────────────────┘
237
+ ```
238
+
239
+ Different tasks need different depth. Browsing? Layer 1. Refactoring? Layer 2. Debugging a null pointer? Layer 5 shows only the relevant lines.
240
+
241
+ ### 2. Semantic code search
242
+ Find code by **what it does**, not what it's named.
243
+
244
+ ```bash
245
+ # Traditional grep: finds literal text matches
246
+ grep "jwt" src/ # Misses verify_access_token()
247
+
248
+ # axe semantic search: understands behavior
249
+ /skill:code-search "validate JWT tokens and check expiration"
250
+ # Finds verify_access_token() because the call graph and
251
+ # data flow reveal it's doing JWT validation
252
+ ```
253
+
254
+ ### 3. Built for debugging (coming soon)
255
+ Debugging isn't just about bad code—it's about bad logic, performance bottlenecks, and understanding what actually happened at runtime.
256
+
257
+ **Coming features:**
258
+ - **Execution tracing**: See exact values that flowed through each function call
259
+ - **Flame graphs**: Visualize where your code spends time
260
+ - **Memory profiling**: Find leaks and allocation hotspots
261
+ - **Call stack reconstruction**: Understand how you got to that error state
262
+
263
+ ### 4. Token cost transparency
264
+ We don't make money by wasting your tokens. Every query shows exactly how many tokens were used:
265
+
266
+ ```
267
+ ✓ Context extracted: 175 tokens (was 21,000 raw)
268
+ ✓ Savings: 99.2%
269
+ ```
270
+
271
+ ### 5. Shell mode integration
272
+ Hit **Ctrl+X** to switch to normal shell. Run your tests, check git status, install packages. Hit **Ctrl+X** again to toggle back to axe.
273
+
274
+ No more juggling terminal windows. No more context switching.
275
+
276
+ ---
277
+
278
+ ## Core capabilities
279
+
280
+ ### Code intelligence tools
281
+ Powered by axe-dig's 5-layer analysis:
282
+
283
+ | Tool | What it does | Use case |
284
+ |------|-------------|----------|
285
+ | **CodeSearch** | Semantic search by behavior | "Find JWT validation logic" |
286
+ | **CodeContext** | LLM-ready function summaries (95% token savings) | Understand unfamiliar code |
287
+ | **CodeStructure** | Navigate functions/classes in files/dirs | Explore new codebases |
288
+ | **CodeImpact** | Reverse call graph (who calls this?) | Safe refactoring |
289
+
290
+ ### File operations
291
+ - `ReadFile` / `WriteFile` / `StrReplaceFile` - Standard file I/O
292
+ - `Grep` - Exact file locations + line numbers (use after CodeSearch)
293
+ - `Glob` - Pattern matching
294
+ - `ReadMediaFile` - Images, PDFs, videos
295
+
296
+ ### Multi-agent workflows
297
+ - `Task` - Spawn subagents for parallel work
298
+ - `CreateSubagent` - Custom agent specs
299
+ - `SetTodoList` - Track multi-step tasks
300
+
301
+ ### Shell integration
302
+ - `Shell` - Execute commands
303
+ - **Ctrl+X** - Toggle between axe and normal shell mode
304
+
305
+ ---
306
+
307
+ ## Real example: Debug a null pointer
308
+
309
+ **Without axe:**
310
+ 1. Read the 150-line function top to bottom
311
+ 2. Trace every variable assignment manually
312
+ 3. Miss the bug because it's hidden in control flow
313
+ 4. Spend 30 minutes and burn 21,000 tokens
314
+
315
+ **With axe:**
316
+ ```bash
317
+ # Ask axe to debug
318
+ "Why is user null on line 42 in src/auth.py?"
319
+
320
+ # axe uses CodeImpact + data flow analysis internally
321
+ # Shows you only the 6 lines that matter:
322
+
323
+ 3: user = db.get_user(username)
324
+ 7: if user is None:
325
+ 12: raise NotFound
326
+ 28: token = create_token(user) # ← BUG: skipped null check
327
+ 35: session.token = token
328
+ 42: return session
329
+
330
+ ✓ 175 tokens used (was 21,000)
331
+ ✓ Bug found in 30 seconds
332
+ ```
333
+
334
+ The bug is obvious: line 28 uses `user` without going through the null check path.
335
+
336
+ ---
337
+
338
+ ## Powered by SRSWTI Inc.
339
+
340
+ **Building the world's fastest retrieval and inference engines.**
341
+
342
+ ### Bodega's Own
343
+ Exclusive models trained/optimized for Bodega Inference Engine. Note: Our models are also available on Hugging Face.
344
+
345
+ #### Raptor Series
346
+ Ultra-compact reasoning models designed for efficiency and edge deployment.
347
+
348
+ - **bodega-raptor-0.9b** - 900M params. Runs on mobile/Pi with 100+ tok/s. Handles document classification, query reformulation, and lightweight reasoning at the edge.
349
+ - **bodega-raptor-90m** - Extreme edge variant. Sub-100M params for amazing tool calling support and reasoning.
350
+ - **bodega-raptor-1b-reasoning-opus4.5-distill** - Distilled from Claude Opus 4.5 reasoning patterns. Enhanced logical deduction chains.
351
+ - **bodega-raptor-8b-mxfp4** - Balanced power/performance for laptops.
352
+ - **bodega-raptor-15b-6bit** - Better raptor.
353
+
354
+ #### Flagship Models
355
+ Frontier intelligence, distilled and optimized.
356
+
357
+ - **deepseek-v3.2-speciale-distilled-raptor-32b-4bit** - DeepSeek V3.2 distilled to 32B with Raptor reasoning. Exceptional math/code generation in 5-7GB footprint. 120 tok/s on M1 Max.
358
+ - **bodega-centenario-21b-mxfp4** - Production workhorse. 21B params optimized for sustained inference workloads. Behemoth in all categories.
359
+ - **bodega-solomon-9b** - Multimodal and best for agentic coding.
360
+
361
+ #### Axe-Turbo Series
362
+ Agentic Coding Models.
363
+
364
+ - **axe-turbo-1b** - 1B params, 150 tok/s, sub-50ms first token. Edge-first architecture.
365
+ - **axe-turbo-31b** - for High-capacity workloads. Baller coding model, exceptional agentic capabilities.
366
+
367
+ #### Specialized Models
368
+ Task-specific optimization.
369
+
370
+ - **bodega-vertex-4b** - 4B params. Optimized for structured data.
371
+ - **blackbird-she-doesnt-refuse-21b** - Uncensored 21B variant for unrestricted generation.
372
+
373
+ ---
374
+
375
+ ## Sessions and Context Management
376
+
377
+ axe automatically saves your conversation history, allowing you to continue previous work at any time.
378
+
379
+ ### Session resuming
380
+
381
+ Each time you start axe, a new session is created. If you want to continue a previous conversation, there are several ways:
382
+
383
+ **Continue the most recent session:**
384
+
385
+ Use the `--continue` flag to continue the most recent session in the current working directory:
386
+
387
+ ```bash
388
+ axe --continue
389
+ ```
390
+
391
+ **Switch to a specific session:**
392
+
393
+ Use the `--session` flag to switch to a session with a specific ID:
394
+
395
+ ```bash
396
+ axe --session abc123
397
+ ```
398
+
399
+ **Switch sessions during runtime:**
400
+
401
+ Enter `/sessions` (or `/resume`) to view all sessions in the current working directory, and use arrow keys to select the session you want to switch to:
402
+
403
+ ```
404
+ /sessions
405
+ ```
406
+
407
+ The list shows each session's title and last update time, helping you find the conversation you want to continue.
408
+
409
+ ### Startup replay
410
+
411
+ When you continue an existing session, axe will replay the previous conversation history so you can quickly understand the context. During replay, previous messages and AI responses will be displayed.
412
+
413
+ ### Clear and compact
414
+
415
+ As the conversation progresses, the context grows longer. axe will automatically compress the context when needed to ensure the conversation can continue.
416
+
417
+ You can also manually manage the context using slash commands:
418
+
419
+ **Clear context:**
420
+
421
+ Enter `/clear` to clear all context in the current session and start a fresh conversation:
422
+
423
+ ```
424
+ /clear
425
+ ```
426
+
427
+ After clearing, the AI will forget all previous conversation content. You usually don't need to use this command; for new tasks, starting a new session is a better choice.
428
+
429
+ **Compact context:**
430
+
431
+ Enter `/compact` to have the AI summarize the current conversation and replace the original context with the summary:
432
+
433
+ ```
434
+ /compact
435
+ ```
436
+
437
+ Compacting preserves key information while reducing token consumption. This is useful when the conversation is long but you still want to retain some context.
438
+
439
+ ---
440
+
441
+ ## Agent Skills
442
+
443
+ Agent Skills is an open format for adding specialized knowledge and workflows to AI agents. axe supports loading Agent Skills to extend AI capabilities.
444
+
445
+ ### What are Agent Skills?
446
+
447
+ A skill is a directory containing a `SKILL.md` file. When axe starts, it discovers all skills and injects their names, paths, and descriptions into the system prompt. The AI will decide on its own whether to read the specific SKILL.md file to get detailed guidance based on the current task's needs.
448
+
449
+ For example, you can create a "code style" skill to tell the AI your project's naming conventions, comment styles, etc.; or create a "security audit" skill to have the AI focus on specific security issues when reviewing code.
450
+
451
+ ### Skill discovery
452
+
453
+ axe uses a layered loading mechanism to discover skills, loading in the following priority order (later ones override skills with the same name):
454
+
455
+ **Built-in skills**
456
+
457
+ Skills shipped with the package, providing basic capabilities.
458
+
459
+ **User-level skills**
460
+
461
+ Stored in the user's home directory, effective across all projects. axe checks the following directories in priority order and uses the first one that exists:
462
+
463
+ - `~/.config/agents/skills/` (recommended)
464
+ - `~/.agents/skills/`
465
+ - `~/.axe/skills/`
466
+ - `~/.claude/skills/`
467
+ - `~/.codex/skills/`
468
+
469
+ **Project-level skills**
470
+
471
+ Stored in the project directory, only effective within that project's working directory. axe checks the following directories in priority order and uses the first one that exists:
472
+
473
+ - `.agents/skills/` (recommended)
474
+ - `.axe/skills/`
475
+ - `.claude/skills/`
476
+ - `.codex/skills/`
477
+
478
+ You can also specify other directories with the `--skills-dir` flag, which skips user-level and project-level skill discovery:
479
+
480
+ ```bash
481
+ axe --skills-dir /path/to/my-skills
482
+ ```
483
+
484
+ ### Built-in skills
485
+
486
+ axe includes the following built-in skills:
487
+
488
+ - **axe-cli-help**: axe CLI help. Answers questions about axe installation, configuration, slash commands, keyboard shortcuts, MCP integration, providers, environment variables, and more.
489
+ - **skill-creator**: Guide for creating skills. When you need to create a new skill (or update an existing skill) to extend axe's capabilities, you can use this skill to get detailed creation guidance and best practices.
490
+
491
+ ### Creating a skill
492
+
493
+ Creating a skill only requires two steps:
494
+
495
+ 1. Create a subdirectory in the skills directory
496
+ 2. Create a SKILL.md file in the subdirectory
497
+
498
+ **Directory structure:**
499
+
500
+ A skill directory needs at least a SKILL.md file, and can also include auxiliary directories to organize more complex content:
501
+
502
+ ```
503
+ ~/.config/agents/skills/
504
+ └── my-skill/
505
+ ├── SKILL.md # Required: main file
506
+ ├── scripts/ # Optional: script files
507
+ ├── references/ # Optional: reference documents
508
+ └── assets/ # Optional: other resources
509
+ ```
510
+
511
+ **SKILL.md format:**
512
+
513
+ SKILL.md uses YAML frontmatter to define metadata, followed by prompt content in Markdown format:
514
+
515
+ ```yaml
516
+ ---
517
+ name: code-style
518
+ description: My project's code style guidelines
519
+ ---
520
+
521
+ ## Code Style
522
+
523
+ In this project, please follow these conventions:
524
+
525
+ - Use 4-space indentation
526
+ - Variable names use camelCase
527
+ - Function names use snake_case
528
+ - Every function needs a docstring
529
+ - Lines should not exceed 100 characters
530
+ ```
531
+
532
+ **Frontmatter fields:**
533
+
534
+ | Field | Description | Required |
535
+ |-------|-------------|----------|
536
+ | name | Skill name, 1-64 characters, only lowercase letters, numbers, and hyphens allowed; defaults to directory name if omitted | No |
537
+ | description | Skill description, 1-1024 characters, explaining the skill's purpose and use cases; shows "No description provided." if omitted | No |
538
+ | license | License name or file reference | No |
539
+ | compatibility | Environment requirements, up to 500 characters | No |
540
+ | metadata | Additional key-value attributes | No |
541
+
542
+ **Best practices:**
543
+
544
+ - Keep SKILL.md under 500 lines, move detailed content to scripts/, references/, or assets/ directories
545
+ - Use relative paths in SKILL.md to reference other files
546
+ - Provide clear step-by-step instructions, input/output examples, and edge case explanations
547
+
548
+ ### Example skills
549
+
550
+ **PowerPoint creation:**
551
+
552
+ ```yaml
553
+ ---
554
+ name: pptx
555
+ description: Create and edit PowerPoint presentations
556
+ ---
557
+
558
+ ## PPT Creation Workflow
559
+
560
+ When creating presentations, follow these steps:
561
+
562
+ 1. Analyze content structure, plan slide outline
563
+ 2. Choose appropriate color scheme and fonts
564
+ 3. Use python-pptx library to generate .pptx files
565
+
566
+ ## Design Principles
567
+
568
+ - Each slide focuses on one topic
569
+ - Keep text concise, use bullet points instead of long paragraphs
570
+ - Maintain clear visual hierarchy with distinct titles, body, and notes
571
+ - Use consistent colors, avoid more than 3 main colors
572
+ ```
573
+
574
+ **Python project standards:**
575
+
576
+ ```yaml
577
+ ---
578
+ name: python-project
579
+ description: Python project development standards, including code style, testing, and dependency management
580
+ ---
581
+
582
+ ## Python Development Standards
583
+
584
+ - Use Python 3.14+
585
+ - Use ruff for code formatting and linting
586
+ - Use pyright for type checking
587
+ - Use pytest for testing
588
+ - Use uv for dependency management
589
+
590
+ Code style:
591
+ - Line length limit 100 characters
592
+ - Use type annotations
593
+ - Public functions need docstrings
594
+ ```
595
+
596
+ **Git commit conventions:**
597
+
598
+ ```yaml
599
+ ---
600
+ name: git-commits
601
+ description: Git commit message conventions using Conventional Commits format
602
+ ---
603
+
604
+ ## Git Commit Conventions
605
+
606
+ Use Conventional Commits format:
607
+
608
+ type(scope): description
609
+
610
+ Allowed types: feat, fix, docs, style, refactor, test, chore
611
+
612
+ Examples:
613
+ - feat(auth): add OAuth login support
614
+ - fix(api): fix user query returning null
615
+ - docs(readme): update installation instructions
616
+ ```
617
+
618
+ ### Using slash commands to load a skill
619
+
620
+ The `/skill:<name>` slash command lets you save commonly used prompt templates as skills and quickly invoke them when needed. When you enter the command, axe reads the corresponding SKILL.md file content and sends it to the Agent as a prompt.
621
+
622
+ For example:
623
+
624
+ - `/skill:code-style` - Load code style guidelines
625
+ - `/skill:pptx` - Load PPT creation workflow
626
+ - `/skill:git-commits fix user login issue` - Load Git commit conventions with an additional task description
627
+
628
+ You can append additional text after the slash command, which will be added to the skill prompt as the user's specific request.
629
+
630
+ **TIP:** For regular conversations, the Agent will automatically decide whether to read skill content based on context, so you don't need to invoke it manually.
631
+
632
+ Skills allow you to codify your team's best practices and project standards, ensuring the AI always follows consistent standards.
633
+
634
+ ### Flow skills
635
+
636
+ Flow skills are a special skill type that embed an Agent Flow diagram in SKILL.md, used to define multi-step automated workflows. Unlike standard skills, flow skills are invoked via `/flow:<name>` commands and automatically execute multiple conversation turns following the flow diagram.
637
+
638
+ **Creating a flow skill:**
639
+
640
+ To create a flow skill, set `type: flow` in the frontmatter and include a Mermaid or D2 code block in the content:
641
+
642
+ ```yaml
643
+ ---
644
+ name: code-review
645
+ description: Code review workflow
646
+ type: flow
647
+ ---
648
+
649
+ ```mermaid
650
+ flowchart TD
651
+ A([BEGIN]) --> B[Analyze code changes, list all modified files and features]
652
+ B --> C{Is code quality acceptable?}
653
+ C -->|Yes| D[Generate code review report]
654
+ C -->|No| E[List issues and propose improvements]
655
+ E --> B
656
+ D --> F([END])
657
+ ```
658
+ ```
659
+
660
+ **Flow diagram format:**
661
+
662
+ Both Mermaid and D2 formats are supported:
663
+
664
+ - **Mermaid**: Use ` ```mermaid ` code block, [Mermaid Playground](https://mermaid.live) can be used for editing and preview
665
+ - **D2**: Use ` ```d2 ` code block, [D2 Playground](https://play.d2lang.com) can be used for editing and preview
666
+
667
+ Flow diagrams must contain one BEGIN node and one END node. Regular node text is sent to the Agent as a prompt; decision nodes require the Agent to output `<choice>branch name</choice>` in the output to select the next step.
668
+
669
+ **Executing a flow skill:**
670
+
671
+ Flow skills can be invoked in two ways:
672
+
673
+ - `/flow:<name>` - Execute the flow. The Agent will start from the BEGIN node and process each node according to the flow diagram definition until reaching the END node
674
+ - `/skill:<name>` - Like a standard skill, sends the SKILL.md content to the Agent as a prompt (does not automatically execute the flow)
675
+
676
+ ```bash
677
+ # Execute the flow
678
+ /flow:code-review
679
+
680
+ # Load as a standard skill
681
+ /skill:code-review
682
+ ```
683
+
684
+ ---
685
+
686
+ ## Agents and Subagents
687
+
688
+ An agent defines the AI's behavior, including system prompts, available tools, and subagents. You can use built-in agents or create custom agents.
689
+
690
+ ### Built-in agents
691
+
692
+ axe provides two built-in agents. You can select one at startup with the `--agent` flag:
693
+
694
+ ```bash
695
+ axe --agent default
696
+ ```
697
+
698
+ **default**
699
+
700
+ The default agent, suitable for general use. Enabled tools:
701
+
702
+ - Task, SetTodoList, Shell, ReadFile, ReadMediaFile, Glob, Grep, WriteFile, StrReplaceFile
703
+ - CodeSearch, CodeContext, CodeStructure, CodeImpact (axe-dig tools)
704
+
705
+ **okabe**
706
+
707
+ An experimental agent for testing new prompts and tools. Adds SendDMail on top of default.
708
+
709
+ ### Custom agent files
710
+
711
+ Agents are defined in YAML format. Load a custom agent with the `--agent-file` flag:
712
+
713
+ ```bash
714
+ axe --agent-file /path/to/my-agent.yaml
715
+ ```
716
+
717
+ **Basic structure:**
718
+
719
+ ```yaml
720
+ version: 1
721
+ agent:
722
+ name: my-agent
723
+ system_prompt_path: ./system.md
724
+ tools:
725
+ - "axe_cli.tools.shell:Shell"
726
+ - "axe_cli.tools.file:ReadFile"
727
+ - "axe_cli.tools.file:WriteFile"
728
+ ```
729
+
730
+ **Inheritance and overrides:**
731
+
732
+ Use `extend` to inherit another agent's configuration and only override what you need to change:
733
+
734
+ ```yaml
735
+ version: 1
736
+ agent:
737
+ extend: default # Inherit from default agent
738
+ system_prompt_path: ./my-prompt.md # Override system prompt
739
+ exclude_tools: # Exclude certain tools
740
+ - "axe_cli.tools.web:SearchWeb"
741
+ - "axe_cli.tools.web:FetchURL"
742
+ ```
743
+
744
+ `extend: default` inherits from the built-in default agent. You can also specify a relative path to inherit from another agent file.
745
+
746
+ **Configuration fields:**
747
+
748
+ | Field | Description | Required |
749
+ |-------|-------------|----------|
750
+ | extend | Agent to inherit from, can be `default` or a relative path | No |
751
+ | name | Agent name | Yes (optional when inheriting) |
752
+ | system_prompt_path | System prompt file path, relative to agent file | Yes (optional when inheriting) |
753
+ | system_prompt_args | Custom arguments passed to system prompt, merged when inheriting | No |
754
+ | tools | Tool list, format is `module:ClassName` | Yes (optional when inheriting) |
755
+ | exclude_tools | Tools to exclude | No |
756
+ | subagents | Subagent definitions | No |
757
+
758
+ ### System prompt built-in parameters
759
+
760
+ The system prompt file is a Markdown template that can use `${VAR}` syntax to reference variables. Built-in variables include:
761
+
762
+ | Variable | Description |
763
+ |----------|-------------|
764
+ | ${AXE_NOW} | Current time (ISO format) |
765
+ | ${AXE_WORK_DIR} | Working directory path |
766
+ | ${AXE_WORK_DIR_LS} | Working directory file list |
767
+ | ${AXE_AGENTS_MD} | AGENTS.md file content (if exists) |
768
+ | ${AXE_SKILLS} | Loaded skills list |
769
+
770
+ You can also define custom parameters via `system_prompt_args`:
771
+
772
+ ```yaml
773
+ agent:
774
+ system_prompt_args:
775
+ MY_VAR: "custom value"
776
+ ```
777
+
778
+ Then use `${MY_VAR}` in the prompt.
779
+
780
+ **System prompt example:**
781
+
782
+ ```markdown
783
+ # My Agent
784
+
785
+ You are a helpful assistant. Current time: ${AXE_NOW}.
786
+
787
+ Working directory: ${AXE_WORK_DIR}
788
+
789
+ ${MY_VAR}
790
+ ```
791
+
792
+ ### Defining subagents in agent files
793
+
794
+ Subagents can handle specific types of tasks. After defining subagents in an agent file, the main agent can launch them via the Task tool:
795
+
796
+ ```yaml
797
+ version: 1
798
+ agent:
799
+ extend: default
800
+ subagents:
801
+ coder:
802
+ path: ./coder-sub.yaml
803
+ description: "Handle coding tasks"
804
+ reviewer:
805
+ path: ./reviewer-sub.yaml
806
+ description: "Code review expert"
807
+ ```
808
+
809
+ Subagent files are also standard agent format, typically inheriting from the main agent and excluding certain tools:
810
+
811
+ ```yaml
812
+ # coder-sub.yaml
813
+ version: 1
814
+ agent:
815
+ extend: ./agent.yaml # Inherit from main agent
816
+ system_prompt_args:
817
+ ROLE_ADDITIONAL: |
818
+ You are now running as a subagent...
819
+ exclude_tools:
820
+ - "axe_cli.tools.multiagent:Task" # Exclude Task tool to avoid nesting
821
+ ```
822
+
823
+ ### How subagents run
824
+
825
+ Subagents launched via the Task tool run in an isolated context and return results to the main agent when complete. Advantages of this approach:
826
+
827
+ - Isolated context, avoiding pollution of main agent's conversation history
828
+ - Multiple independent tasks can be processed in parallel
829
+ - Subagents can have targeted system prompts
830
+
831
+ ### Dynamic subagent creation
832
+
833
+ CreateSubagent is an advanced tool that allows AI to dynamically define new subagent types at runtime (not enabled by default). To use it, add to your agent file:
834
+
835
+ ```yaml
836
+ agent:
837
+ tools:
838
+ - "axe_cli.tools.multiagent:CreateSubagent"
839
+ ```
840
+
841
+ ---
842
+
843
+ ## Built-in Tools
844
+
845
+ The following are all built-in tools in axe.
846
+
847
+ ### Task
848
+ **Path:** `axe_cli.tools.multiagent:Task`
849
+ **Description:** Dispatch a subagent to execute a task. Subagents cannot access the main agent's context; all necessary information must be provided in the prompt.
850
+
851
+ | Parameter | Type | Description |
852
+ |-----------|------|-------------|
853
+ | description | string | Short task description (3-5 words) |
854
+ | subagent_name | string | Subagent name |
855
+ | prompt | string | Detailed task description |
856
+
857
+ ### SetTodoList
858
+ **Path:** `axe_cli.tools.todo:SetTodoList`
859
+ **Description:** Manage todo list, track task progress
860
+
861
+ | Parameter | Type | Description |
862
+ |-----------|------|-------------|
863
+ | todos | array | Todo list items |
864
+ | todos[].title | string | Todo item title |
865
+ | todos[].status | string | Status: pending, in_progress, done |
866
+
867
+ ### Shell
868
+ **Path:** `axe_cli.tools.shell:Shell`
869
+ **Description:** Execute shell commands. Requires user approval. Uses the appropriate shell for the OS (bash/zsh on Unix, PowerShell on Windows).
870
+
871
+ | Parameter | Type | Description |
872
+ |-----------|------|-------------|
873
+ | command | string | Command to execute |
874
+ | timeout | int | Timeout in seconds, default 60, max 300 |
875
+
876
+ ### ReadFile
877
+ **Path:** `axe_cli.tools.file:ReadFile`
878
+ **Description:** Read text file content. Max 1000 lines per read, max 2000 characters per line. Files outside working directory require absolute paths.
879
+
880
+ | Parameter | Type | Description |
881
+ |-----------|------|-------------|
882
+ | path | string | File path |
883
+ | line_offset | int | Starting line number, default 1 |
884
+ | n_lines | int | Number of lines to read, default/max 1000 |
885
+
886
+ ### ReadMediaFile
887
+ **Path:** `axe_cli.tools.file:ReadMediaFile`
888
+ **Description:** Read image or video files. Max file size 100MB. Only available when the model supports image/video input. Files outside working directory require absolute paths.
889
+
890
+ | Parameter | Type | Description |
891
+ |-----------|------|-------------|
892
+ | path | string | File path |
893
+
894
+ ### Glob
895
+ **Path:** `axe_cli.tools.file:Glob`
896
+ **Description:** Match files and directories by pattern. Returns max 1000 matches, patterns starting with ** not allowed.
897
+
898
+ | Parameter | Type | Description |
899
+ |-----------|------|-------------|
900
+ | pattern | string | Glob pattern (e.g., *.py, src/**/*.ts) |
901
+ | directory | string | Search directory, defaults to working directory |
902
+ | include_dirs | bool | Include directories, default true |
903
+
904
+ ### Grep
905
+ **Path:** `axe_cli.tools.file:Grep`
906
+ **Description:** Search file content with regular expressions, based on ripgrep
907
+
908
+ | Parameter | Type | Description |
909
+ |-----------|------|-------------|
910
+ | pattern | string | Regular expression pattern |
911
+ | path | string | Search path, defaults to current directory |
912
+ | glob | string | File filter (e.g., *.js) |
913
+ | type | string | File type (e.g., py, js, go) |
914
+ | output_mode | string | Output mode: files_with_matches (default), content, count_matches |
915
+ | -B | int | Show N lines before match |
916
+ | -A | int | Show N lines after match |
917
+ | -C | int | Show N lines before and after match |
918
+ | -n | bool | Show line numbers |
919
+ | -i | bool | Case insensitive |
920
+ | multiline | bool | Enable multiline matching |
921
+ | head_limit | int | Limit output lines |
922
+
923
+ ### WriteFile
924
+ **Path:** `axe_cli.tools.file:WriteFile`
925
+ **Description:** Write files. Requires user approval. Absolute paths are required when writing files outside the working directory.
926
+
927
+ | Parameter | Type | Description |
928
+ |-----------|------|-------------|
929
+ | path | string | Absolute path |
930
+ | content | string | File content |
931
+ | mode | string | overwrite (default) or append |
932
+
933
+ ### StrReplaceFile
934
+ **Path:** `axe_cli.tools.file:StrReplaceFile`
935
+ **Description:** Edit files using string replacement. Requires user approval. Absolute paths are required when editing files outside the working directory.
936
+
937
+ | Parameter | Type | Description |
938
+ |-----------|------|-------------|
939
+ | path | string | Absolute path |
940
+ | edit | object/array | Single edit or list of edits |
941
+ | edit.old | string | Original string to replace |
942
+ | edit.new | string | Replacement string |
943
+ | edit.replace_all | bool | Replace all matches, default false |
944
+
945
+ ### CodeSearch
946
+ **Path:** `axe_cli.tools.axe:CodeSearch`
947
+ **Description:** Semantic code search powered by axe-dig. Finds code by behavior, not just text matches.
948
+
949
+ ### CodeContext
950
+ **Path:** `axe_cli.tools.axe:CodeContext`
951
+ **Description:** Get LLM-ready function summaries with 95% token savings.
952
+
953
+ ### CodeStructure
954
+ **Path:** `axe_cli.tools.axe:CodeStructure`
955
+ **Description:** Navigate functions and classes in files or directories.
956
+
957
+ ### CodeImpact
958
+ **Path:** `axe_cli.tools.axe:CodeImpact`
959
+ **Description:** Reverse call graph analysis - see who calls a function before refactoring.
960
+
961
+ ### Tool security boundaries
962
+
963
+ **Working directory restrictions:**
964
+
965
+ - File reading and writing are typically done within the working directory
966
+ - Absolute paths are required when reading files outside the working directory
967
+ - Write and edit operations require user approval; absolute paths are required when operating on files outside the working directory
968
+
969
+ **Approval mechanism:**
970
+
971
+ The following operations require user approval:
972
+
973
+ | Operation | Approval required |
974
+ |-----------|-------------------|
975
+ | Shell command execution | Each execution |
976
+ | File write/edit | Each operation |
977
+ | MCP tool calls | Each call |
978
+
979
+ ---
980
+
981
+ ## Configuration
982
+
983
+ axe uses configuration files to manage API providers, models, services, and runtime parameters, supporting both TOML and JSON formats.
984
+
985
+ ### Config file location
986
+
987
+ The default configuration file is located at `~/.axe/config.toml`. On first run, if the configuration file doesn't exist, axe will automatically create a default configuration file.
988
+
989
+ You can specify a different configuration file (TOML or JSON format) with the `--config-file` flag:
990
+
991
+ ```bash
992
+ axe --config-file /path/to/config.toml
993
+ ```
994
+
995
+ When calling axe programmatically, you can also pass the complete configuration content directly via the `--config` flag:
996
+
997
+ ```bash
998
+ axe --config '{"default_model": "claude-sonnet-4", "providers": {...}, "models": {...}}'
999
+ ```
1000
+
1001
+ ### Config items
1002
+
1003
+ The configuration file contains the following top-level configuration items:
1004
+
1005
+ | Item | Type | Description |
1006
+ |------|------|-------------|
1007
+ | default_model | string | Default model name, must be a model defined in models |
1008
+ | default_thinking | boolean | Whether to enable thinking mode by default (defaults to false) |
1009
+ | providers | table | API provider configuration |
1010
+ | models | table | Model configuration |
1011
+ | loop_control | table | Agent loop control parameters |
1012
+ | services | table | External service configuration (search, fetch) |
1013
+ | mcp | table | MCP client configuration |
1014
+
1015
+ **Complete configuration example:**
1016
+
1017
+ ```toml
1018
+ default_model = "claude-sonnet-4"
1019
+ default_thinking = false
1020
+
1021
+ [providers.anthropic]
1022
+ type = "anthropic"
1023
+ base_url = "https://api.anthropic.com/v1"
1024
+ api_key = "sk-ant-xxx"
1025
+
1026
+ [models.claude-sonnet-4]
1027
+ provider = "anthropic"
1028
+ model = "claude-sonnet-4-20250514"
1029
+ max_context_size = 200000
1030
+
1031
+ [loop_control]
1032
+ max_steps_per_turn = 100
1033
+ max_retries_per_step = 3
1034
+ max_ralph_iterations = 0
1035
+ reserved_context_size = 50000
1036
+
1037
+ [services.search]
1038
+ base_url = "https://api.example.com/search"
1039
+ api_key = "sk-xxx"
1040
+
1041
+ [services.fetch]
1042
+ base_url = "https://api.example.com/fetch"
1043
+ api_key = "sk-xxx"
1044
+
1045
+ [mcp.client]
1046
+ tool_call_timeout_ms = 60000
1047
+ ```
1048
+
1049
+ ### providers
1050
+
1051
+ `providers` defines API provider connection information. Each provider uses a unique name as key.
1052
+
1053
+ | Field | Type | Required | Description |
1054
+ |-------|------|----------|-------------|
1055
+ | type | string | Yes | Provider type (e.g., anthropic, openai) |
1056
+ | base_url | string | Yes | API base URL |
1057
+ | api_key | string | Yes | API key |
1058
+ | env | table | No | Environment variables to set before creating provider instance |
1059
+ | custom_headers | table | No | Custom HTTP headers to attach to requests |
1060
+
1061
+ **Example:**
1062
+
1063
+ ```toml
1064
+ [providers.anthropic]
1065
+ type = "anthropic"
1066
+ base_url = "https://api.anthropic.com/v1"
1067
+ api_key = "sk-ant-xxx"
1068
+ custom_headers = { "X-Custom-Header" = "value" }
1069
+ ```
1070
+
1071
+ ### models
1072
+
1073
+ `models` defines available models. Each model uses a unique name as key.
1074
+
1075
+ | Field | Type | Required | Description |
1076
+ |-------|------|----------|-------------|
1077
+ | provider | string | Yes | Provider name to use, must be defined in providers |
1078
+ | model | string | Yes | Model identifier (model name used in API) |
1079
+ | max_context_size | integer | Yes | Maximum context length (in tokens) |
1080
+ | capabilities | array | No | Model capability list |
1081
+
1082
+ **Example:**
1083
+
1084
+ ```toml
1085
+ [models.claude-sonnet-4]
1086
+ provider = "anthropic"
1087
+ model = "claude-sonnet-4-20250514"
1088
+ max_context_size = 200000
1089
+ capabilities = ["thinking", "image_in", "video_in"]
1090
+ ```
1091
+
1092
+ ### loop_control
1093
+
1094
+ `loop_control` controls agent execution loop behavior.
1095
+
1096
+ | Field | Type | Default | Description |
1097
+ |-------|------|---------|-------------|
1098
+ | max_steps_per_turn | integer | 100 | Maximum steps per turn |
1099
+ | max_retries_per_step | integer | 3 | Maximum retries per step |
1100
+ | max_ralph_iterations | integer | 0 | Extra iterations after each user message; 0 disables; -1 is unlimited |
1101
+ | reserved_context_size | integer | 50000 | Reserved token count for LLM response generation; auto-compaction triggers when context_tokens + reserved_context_size >= max_context_size |
1102
+
1103
+ ### services
1104
+
1105
+ `services` configures external services used by axe.
1106
+
1107
+ **search service:**
1108
+
1109
+ Configures web search service. When enabled, the SearchWeb tool becomes available.
1110
+
1111
+ | Field | Type | Required | Description |
1112
+ |-------|------|----------|-------------|
1113
+ | base_url | string | Yes | Search service API URL |
1114
+ | api_key | string | Yes | API key |
1115
+ | custom_headers | table | No | Custom HTTP headers to attach to requests |
1116
+
1117
+ **fetch service:**
1118
+
1119
+ Configures web fetch service. When enabled, the FetchURL tool prioritizes using this service to fetch webpage content.
1120
+
1121
+ | Field | Type | Required | Description |
1122
+ |-------|------|----------|-------------|
1123
+ | base_url | string | Yes | Fetch service API URL |
1124
+ | api_key | string | Yes | API key |
1125
+ | custom_headers | table | No | Custom HTTP headers to attach to requests |
1126
+
1127
+ ### mcp
1128
+
1129
+ `mcp` configures MCP client behavior.
1130
+
1131
+ | Field | Type | Default | Description |
1132
+ |-------|------|---------|-------------|
1133
+ | client.tool_call_timeout_ms | integer | 60000 | MCP tool call timeout (milliseconds) |
1134
+
1135
+ ---
1136
+
1137
+ ## Architecture
1138
+
1139
+ ```
1140
+ ┌──────────────────────────────────────────────────────────────┐
1141
+ │ YOUR CODEBASE │
1142
+ │ 100K lines across 500 files │
1143
+ └───────────────────────┬──────────────────────────────────────┘
1144
+
1145
+
1146
+ ┌──────────────────────────────────────────────────────────────┐
1147
+ │ AXE-DIG ENGINE │
1148
+ │ 5-layer analysis + semantic embeddings │
1149
+ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌────────┐ │
1150
+ │ │ AST │→│ Calls │→│ CFG │→│ DFG │→│ PDG │ │
1151
+ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └────────┘ │
1152
+ │ │
1153
+ │ In-memory daemon: 100ms queries instead of 30s CLI spawns │
1154
+ └───────────────────────┬──────────────────────────────────────┘
1155
+
1156
+
1157
+ ┌──────────────────────────────────────────────────────────────┐
1158
+ │ AXE AGENT │
1159
+ │ • Understands code semantically (not just text) │
1160
+ │ • Extracts minimal context (95% token savings) │
1161
+ │ • Executes tools (file ops, shell, multi-agent) │
1162
+ │ • Interactive shell UI with Ctrl+X toggle │
1163
+ └──────────────────────────────────────────────────────────────┘
1164
+ ```
1165
+
1166
+ **The difference:**
1167
+ - **Other tools**: Dump 100K lines → Claude figures it out → Burn tokens
1168
+ - **axe**: Extract 5K tokens of pure signal → Surgical edits → Save money
1169
+
1170
+ ---
1171
+
1172
+ ## Workflow examples
1173
+
1174
+ ### Understanding unfamiliar code
1175
+ ```bash
1176
+ # See the structure first
1177
+ /skill:code-structure src/auth/
1178
+
1179
+ # Find specific functionality
1180
+ /skill:code-search "user session management"
1181
+
1182
+ # Get function context
1183
+ /skill:code-context create_session
1184
+ ```
1185
+
1186
+ ### Safe refactoring
1187
+ ```bash
1188
+ # Before changing a function, see who calls it
1189
+ /skill:code-impact validate_token
1190
+
1191
+ # Shows:
1192
+ # - 12 direct callers
1193
+ # - 3 indirect callers through middleware
1194
+ # - 8 test files that exercise this function
1195
+
1196
+ # Now you know what might break
1197
+ ```
1198
+
1199
+ ### Debugging
1200
+ ```bash
1201
+ # Find code related to the error
1202
+ /skill:code-search "handle database connection errors"
1203
+
1204
+ # Read the implementation
1205
+ ReadFile src/db/connection.py
1206
+
1207
+ # Make a fix
1208
+ StrReplaceFile src/db/connection.py "retry_count = 3" "retry_count = 5"
1209
+
1210
+ # Toggle to shell and test
1211
+ [Ctrl+X]
1212
+ pytest tests/test_db.py
1213
+ [Ctrl+X]
1214
+ ```
1215
+
1216
+ ---
1217
+
1218
+ ## Advanced features
1219
+
1220
+ ### Multi-agent workflows
1221
+ Spawn subagents for parallel tasks:
1222
+
1223
+ ```bash
1224
+ # Main agent delegates to specialists
1225
+ Task "refactor auth module" --agent refactor-specialist
1226
+ Task "update tests" --agent test-specialist
1227
+ Task "update docs" --agent docs-specialist
1228
+ ```
1229
+
1230
+ ### Skills system
1231
+ Reusable workflows and domain expertise:
1232
+
1233
+ ```bash
1234
+ # Available skills auto-detected from project
1235
+ /skill:docker-deploy
1236
+ /skill:api-design
1237
+ /skill:performance-optimization
1238
+ ```
1239
+
1240
+ ### Context management
1241
+ axe maintains conversation history and can checkpoint/restore:
1242
+
1243
+ ```bash
1244
+ # Save current context
1245
+ /checkpoint "before-refactor"
1246
+
1247
+ # Restore if things go wrong
1248
+ /restore "before-refactor"
1249
+ ```
1250
+
1251
+ ---
1252
+
1253
+ ## What's coming
1254
+
1255
+ Our internal team has been using features that will change the game:
1256
+
1257
+ ### 1. Execution tracing
1258
+ See what actually happened at runtime:
1259
+ ```bash
1260
+ # Trace a failing test
1261
+ /trace pytest tests/test_auth.py::test_login
1262
+
1263
+ # Shows exact values that flowed through each function:
1264
+ # authenticate(username="alice", password="wrong")
1265
+ # → validate_credentials(user=User(id=123), password="wrong")
1266
+ # → check_password_hash(hash="$2b$...", password="wrong")
1267
+ # → bcrypt.verify() returned False
1268
+ # → raised AuthenticationError
1269
+ ```
1270
+
1271
+ ### 2. Performance debugging
1272
+ ```bash
1273
+ # Generate flame graph
1274
+ /flamegraph run_server.py
1275
+
1276
+ # Find memory leaks
1277
+ /memory-profile background_worker.py
1278
+
1279
+ # Both integrated directly in the chat interface
1280
+ ```
1281
+
1282
+ ### 3. Visual debugging
1283
+ Interactive call graphs, data flow visualizations, and dependency maps—all generated on demand and viewable in your browser.
1284
+
1285
+ ### 4. Smart test selection
1286
+ ```bash
1287
+ # Only run tests affected by your changes
1288
+ /test-impact src/auth/session.py
1289
+
1290
+ # Shows: 8 tests need to run (not all 1,247)
1291
+ ```
1292
+
1293
+ ---
1294
+
1295
+ ## Why we built this
1296
+
1297
+ We're building the world's best retrieval and inference engine. We started with coding because it's the hardest problem: understanding large codebases, tracing execution, debugging logic errors, optimizing performance.
1298
+
1299
+ If we can nail code understanding, we can nail anything.
1300
+
1301
+ Other tools optimize for demo videos and charging per token. We optimize for engineers shipping production code.
1302
+
1303
+ ---
1304
+
1305
+ ## Installation
1306
+
1307
+ ```bash
1308
+ # Install both axe and axe-dig
1309
+ pip install axe-cli axe-dig
1310
+
1311
+ # Or from source
1312
+ git clone https://github.com/yourusername/axe
1313
+ cd axe
1314
+ make prepare
1315
+ make build
1316
+
1317
+ # Run
1318
+ axe
1319
+ ```
1320
+
1321
+ ---
1322
+
1323
+ ## Supported languages
1324
+
1325
+ Python, TypeScript, JavaScript, Go, Rust, Java, C, C++, Ruby, PHP, C#, Kotlin, Scala, Swift, Lua, Elixir
1326
+
1327
+ Language auto-detected. Specify with `--lang` if needed.
1328
+
1329
+ ---
1330
+
1331
+ ## MCP Integration
1332
+
1333
+ For AI tools integration, axe supports Model Context Protocol (MCP).
1334
+
1335
+ **Add to your MCP-compatible tool's configuration:**
1336
+
1337
+ ```json
1338
+ {
1339
+ "mcpServers": {
1340
+ "axe-dig": {
1341
+ "command": "dig-mcp",
1342
+ "args": ["--project", "/path/to/your/project"]
1343
+ }
1344
+ }
1345
+ }
1346
+ ```
1347
+
1348
+ ---
1349
+
1350
+ ## Community
1351
+
1352
+ - **Issues**: [GitHub Issues](https://github.com/yourusername/axe/issues)
1353
+ - **Discussions**: [GitHub Discussions](https://github.com/yourusername/axe/discussions)
1354
+ - **Docs**: [Full documentation](https://axe-cli.dev/docs)
1355
+
1356
+ ---
1357
+
1358
+ ## License
1359
+
1360
+ AGPL-3.0 - See LICENSE file.
1361
+
1362
+ ---
1363
+
1364
+ ## Comparison
1365
+
1366
+ | Feature | Claude Code | OpenAI Codex | axe |
1367
+ |---------|-------------|--------------|-----|
1368
+ | **Built for** | Weekend projects | Demos | Production codebases |
1369
+ | **Context strategy** | Dump everything | Dump everything | Extract signal (95% savings) |
1370
+ | **Code search** | Text/regex | Text/regex | Semantic (behavior-based) |
1371
+ | **Call graph analysis** | ❌ | ❌ | ✅ 5-layer analysis |
1372
+ | **Token optimization** | ❌ (incentivized to waste) | ❌ (incentivized to waste) | ✅ Show savings per query |
1373
+ | **Execution tracing** | ❌ | ❌ | ✅ Coming soon |
1374
+ | **Flame graphs** | ❌ | ❌ | ✅ Coming soon |
1375
+ | **Memory profiling** | ❌ | ❌ | ✅ Coming soon |
1376
+ | **Shell integration** | ❌ | ❌ | ✅ Ctrl+X toggle |
1377
+ | **Session management** | Limited | Limited | ✅ Full history + replay |
1378
+ | **Skills system** | ❌ | ❌ | ✅ Modular, extensible |
1379
+ | **Subagents** | ❌ | ❌ | ✅ Parallel task execution |
1380
+ | **Battle-tested** | Public beta | Public API | 6 months internal use |
1381
+
1382
+ ---
1383
+
1384
+ **The bottom line:** If you're building real software in large codebases, you need precision tools. Not vibe coding toys.
1385
+
1386
+ Welcome to axe.