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