Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ established relationships that could lead to false positives.

AxiomCode Graph is two parts. The **engine** (`@axiomcode/code-graph` on npm) parses a repository and builds its
graph; it also provides the `axiomcode` command and an MCP server. The **plugin** (`plugins/axiomcode/`) is the
agent-facing frontend: a skill, four MCP tools, and hooks. Install the engine first.
agent-facing frontend: a skill, five MCP tools, and hooks. Install the engine first.

Requirements: **Node ≥ 22.13** and **Python 3** (`python3`, or `python` / `py` on Windows). On Windows, also
[Git for Windows](https://git-scm.com/download/win): the CLI runs under its bash. The engine ships as a prebuilt
Expand All @@ -139,7 +139,7 @@ your platform. No Soufflé and no compiler are needed, with one exception:
> `sudo apt install build-essential python3`. The full `node:*` Docker images already include them.

Before every release, the exact packages that ship are installed without Soufflé and run end to end (every CLI verb,
five languages) on macOS arm64 and x64, Linux x64 and arm64, and Windows x64. Check an install with
six language engines, including HTML/CSS) on macOS arm64 and x64, Linux x64 and arm64, and Windows x64. Check an install with
`axiomcode --version`.

### Installation
Expand Down Expand Up @@ -259,7 +259,7 @@ looked up again in the graph before you see it; the `verified:` line is that che

### Support for agents

Every agent below gets the four MCP tools and the skill; the hooks, which keep the graph current and report what an
Every agent below gets the five MCP tools and the skill; the hooks, which keep the graph current and report what an
edit breaks, run where the last column says so. No hook annotates the agent's own reads and searches.

| Agent | Hooks |
Expand Down
2 changes: 1 addition & 1 deletion gemini-extension.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "axiomcode",
"version": "0.2.0",
"version": "0.2.1",
"description": "Ask your repository how its code connects: who calls this, what breaks if I change it, which tests an edit reaches, how A reaches B. Answers come from a resolved call graph and are verified against it; nothing is guessed.",
"contextFileName": "plugins/axiomcode/AGENTS.md",
"mcpServers": {
Expand Down
12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@axiomcode/code-graph",
"version": "0.2.0",
"version": "0.2.1",
"description": "AxiomCode Graph: a resolved call graph of your codebase grounded in formal methods, so you and your coding agents can see who calls what, what a change breaks, and which tests it reaches.",
"repository": {
"type": "git",
Expand Down Expand Up @@ -31,11 +31,11 @@
],
"license": "FSL-1.1-Apache-2.0",
"optionalDependencies": {
"@axiomcode/engine-darwin-arm64": "0.2.0",
"@axiomcode/engine-darwin-x64": "0.2.0",
"@axiomcode/engine-linux-x64": "0.2.0",
"@axiomcode/engine-linux-arm64": "0.2.0",
"@axiomcode/engine-win32-x64": "0.2.0"
"@axiomcode/engine-darwin-arm64": "0.2.1",
"@axiomcode/engine-darwin-x64": "0.2.1",
"@axiomcode/engine-linux-x64": "0.2.1",
"@axiomcode/engine-linux-arm64": "0.2.1",
"@axiomcode/engine-win32-x64": "0.2.1"
},
"bin": {
"axiomcode": "bin/axiomcode.js"
Expand Down
2 changes: 1 addition & 1 deletion plugins/axiomcode/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "axiomcode",
"description": "Ask your repository how its code connects: who calls this, what breaks if I change it, which tests an edit reaches, how A reaches B. Answers come from a resolved call graph and are verified against it; nothing is guessed.",
"version": "0.2.0",
"version": "0.2.1",
"author": {
"name": "AxiomCode"
}
Expand Down
2 changes: 1 addition & 1 deletion plugins/axiomcode/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "axiomcode",
"version": "0.2.0",
"version": "0.2.1",
"description": "Ask your repository how its code connects: who calls this, what breaks if I change it, which tests an edit reaches, how A reaches B. Answers come from a resolved call graph and are verified against it; nothing is guessed.",
"author": { "name": "AxiomCode", "url": "https://github.com/AxiomCodeAI/axiomcodegraph" },
"homepage": "https://github.com/AxiomCodeAI/axiomcodegraph",
Expand Down
2 changes: 1 addition & 1 deletion plugins/axiomcode/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "axiomcode",
"version": "0.2.0",
"version": "0.2.1",
"description": "Ask your repository how its code connects: who calls this, what breaks if I change it, which tests an edit reaches, how A reaches B. Answers come from a resolved call graph and are verified against it; nothing is guessed. Java, TypeScript, Python, JavaScript.",
"author": { "name": "AxiomCode" },
"homepage": "https://github.com/AxiomCodeAI/axiomcodegraph",
Expand Down
4 changes: 2 additions & 2 deletions tests/mcp_docs.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
[os.path.join(ROOT, 'plugins', 'axiomcode', 'AGENTS.md')] + \
sorted(glob.glob(os.path.join(ROOT, 'plugins', 'axiomcode', 'rules', '*.mdc')))

VERB = r'(find|impact|path|tests)'
VERB = r'(context|impact|link|path|tests)'
# a tool named: a call `impact(`, the Claude Code name mcp__plugin_axiomcode_axiomcode__impact, MCP `impact`, or a command
# in backticks (`axiomcode impact x`); `path:line: …` is an answer's shape, not the tool
MENTION = re.compile(r'`(?:axiomcode )?' + VERB + r'(?:[ \t][^`\n]*)?`|\bmcp__plugin_axiomcode_axiomcode__' + VERB + r'\b'
Expand Down Expand Up @@ -130,7 +130,7 @@ def controls(tools):
got = len(mismatches(documented(text), fake, 'control'))
if got != want:
bad.append(f"control {text!r}: {got} mismatch(es), want {want}")
if set(tools) != {'impact', 'path', 'tests'}:
if set(tools) != {'context', 'impact', 'link', 'path', 'tests'}:
bad.append(f"the server listed {sorted(tools)}; the MCP tools were not read")
return bad

Expand Down
Loading