Repository navigation
Graphicle 0.1.1
Every crate is at 0.1.1, and graphicle --version prints
graphicle 0.1.1 (core).
Code graph
- The engine follows Graphify 0.9.91 (0.1.0 followed 0.9.88): the three
releases 0.9.89 to 0.9.91 are ported. Against 0.9.91 the comparison checks
have run on Linux, where the only checks that do not pass stop for reasons
of that host; the full run on macOS is still to be made
(docs/benchmarks.md). What changes in the graph:- Go: a package type whose methods span several files is one node, and
the methods of a generic receiver (func (b *Box[T])) attach toBox.
Member calls on a typed receiver are bound; when the receiver's type is
declared in another repository (Go, PHP, TypeScript and JavaScript,
Kotlin, Objective-C), the call is bound bymerge-graphsand
global add. - C#:
foreachloop variables are typed; member calls bind only through a
typed receiver; names that differ only by_or by case keep separate
nodes; partial classes merge after colliding ids are separated;new X()
no longer binds to a method namedX. - Generic and template type parameters of Kotlin, Scala, C++ and Swift no
longer create stub nodes. Objective-CNS_ENUMandNS_OPTIONSgive an
enum type with its members. An interface member links to every
implementer. - JavaScript and TypeScript: a
.jsimport resolves to a.tsxsource
when no.jsfile exists; a file-scope callback's parameters shadow
same-named functions; a class field's type is scoped to its class.
Python module calls (mod.func()) resolve inside methods and nested
functions. A Rustuse crate::…::Nameedge lands on the declaration it
imports. A symbol whose id spells another file's id keeps its own node. - Jinja templates (
.j2,.jinja,.jinja2) are documents. An
incremental build keeps an edge between two kept nodes even when its
source file was not re-extracted, and sweeps orphaned placeholder nodes.
Dedup keeps a document beside a same-named top-level file. A community
keeps its curated or LLM label when its members mostly stay, and
fallback labels go to.graphicle_labels.pending.json. hook installalso installs apost-mergehook; a read or search nudge
names the graph nodes behind it;pi guard installadds a Pi guard
extension; Ollama requests go to/api/chat(with a fallback for
servers without it); colliding downloaded captures get numbered names.- The AST cache schema moves to 9, so the first build after upgrading
re-extracts. The writer stamp ingraph.jsonnames 0.9.91.
- Go: a package type whose methods span several files is one node, and
- Go call binding reads each
go.modonce per pass instead of once for
every candidate of every Go call.
How the engine holds its data
- During assembly, the per-file results, their raw calls and the edges are
compact records, each value stored once in a table they share, instead of
one JSON object each. The resolvers, the build,graph.json's writer and
the update path read them in place; the Java type passes borrow them
instead of copying them. - Community detection runs on the graph itself instead of on two copies of
it; call binding and the member-call resolvers keep compact pair tables;
the graph's indices and adjacency rows are compact; an update keeps its
stored graph out of memory once it has read it; the per-file records are
freed after the last pass that reads them, and freed pages go back to the
system at stage boundaries. - None of this changes the graph: on the repositories checked,
graph.json
is byte-identical with and without these changes. The graph changes under
Code graph come from following Graphify 0.9.91.
Agents and setup
Less fixed text in every agent request. In a pre-registered test of 0.1.0
(100 SWE-bench Verified tasks, Claude Code), the agents never called
Graphicle's tools, and setup's text was in every request. 0.1.1 makes no
token or accuracy claim; it trims that text.
graphicle setupgives Claude Code five tools instead of 25:
query_graph,get_node,get_neighbors,recall_projectand
read_project_source(graphicle mcp --tools essentials). Claude Code
shows the names of a server's tools and its instructions in every request,
and loads a tool only when the agent searches for it. The five come with
one sentence of instructions on when to call them; their descriptions
start with what an agent looks for and say how answers cite code.
setup --tools allgives Claude Code every tool, as 0.1.0 did; the other
clients keep every tool.- The guard hooks that point Claude Code's searches to the graph tools are
off unless asked for:setup --guards(orconnect --guards). Running
setup again without it removes the guard hooks an earlier setup installed. - The Graphicle section of
AGENTS.mdandCLAUDE.mdis two lines. Setup
adds none when Claude Code is the only agent connected; a section an
earlier setup wrote is kept and brought up to date.setup --tools all
writes 0.1.0's section, whichever agents are connected. graphicle graph benchmarkcalls its figure what it is: the size of the
whole corpus over the size of one graph answer, a size ratio, not what an
agent saves. Its JSON keeps Graphify's field names.- Claude Code's session-start hook prints nothing when the project has no
reviewed memory, no open work and no stale memory. graphicle connect claude-codewithout--toolskeeps an existing entry
of the same store and project whatever its tool set, such as 0.1.0's
setup's orsetup --tools all's, instead of refusing it.doctor --fix
brings back an entry that names no--tools, or is gone, as the whole
server.setup --tools all --guardsrestores 0.1.0's setup for Claude Code (every
tool, 0.1.0's instructions and replies, the guard hooks, 0.1.0's
AGENTS.mdsection) except for two things: the session-start hook still
prints nothing when there is nothing reviewed, open or stale (0.1.0
printed the last captured turns), andgraphicle contextin a terminal
still puts test files last by default (include_tests: truethrough
graphicle call contextgives 0.1.0's order). A call that passes
structuredto recall or a graph tool, which 0.1.0 refused, is
accepted and changes nothing.
Context and recall
context, andrecall_projectin the essentials set, present excerpts
of test files after the other excerpts unless the question names a test
file or a test identifier (tests/...,test_x,x_test.py,
conftest.py,TestX). A test file is one in atest,testsor
testingfolder, or atest_*,*_test.py,*_tests.pyor
conftest.pyfile; other languages' test names (x_test.go,
x.spec.ts) are not moved. Only the order changes: the budget goes to
the excerpts in rank order first, so a packet holds the same excerpts as
0.1.0's. The newinclude_testsargument ofcontext(graphicle call context --arguments, the HTTP API) sets this per call:"auto"(the
default),false(always after) ortrue(0.1.0's order), and the
packet'stest_filessays what applied.- With
--tools essentials,recall_projectanswers with the packet's
Markdown only, at most 12,000 characters (room is kept for the line that
lists theneedsthe excerpts do not cover), and the graph tools with
their text and citations, without astructuredContentcopy.
structured: truereturns 0.1.0's reply; the Python SDK asks for it.
Every other set (--tools all, which the other clients andgraphicle serveget by default,graphandmemory) answers exactly as 0.1.0
did: the same reply, recall at the budget asked for and in 0.1.0's
order.
Security
- rustls 0.23.46, which fixes RUSTSEC-2026-0346, RUSTSEC-2026-0347,
RUSTSEC-2026-0348 and RUSTSEC-2026-0349 (TLS, published on 14 October
2026). Only the lock files change.
Windows (preview)
- Release archives for Windows on x86-64,
graphicle-<version>-x86_64-pc-windows-msvc.zip, withgraphicle.exeand
graphicle-graph.exe. The programs link the C runtime statically, so they
run without the Visual C++ runtime; the release build checks that they
import Windows system libraries only. install.ps1installs both programs from PowerShell (Windows PowerShell 5.1
or PowerShell 7) into%LOCALAPPDATA%\Programs\Graphicle\bin, checks the
archive's SHA-256 first, adds the folder to the userPATHand needs no
administrator rights. Run again, it replaces programs that are running.- Continuous integration builds and lints each crate on Windows and runs its
tests. docs/install.mdcovers installing and building on Windows, what the
preview leaves out, and troubleshooting. Without Python 3.14 or the
zstdprogram,prepare_parser_sources.pyon Windows suggests
py -m pip install zstandard.- The engine and the
graphicleprogram on Windows: one path spelling with
/in the paths the engine reports, path comparisons that ignore case and
\\?\prefixes, network-share (UNC) roots, Graphify's Windows lock for
rebuilds started by Git hooks, Ctrl+C and Ctrl+Break handling, and colour
only where the console supports it. - On Windows,
graphiclekeeps its data in%LOCALAPPDATA%\Graphicle, finds
the settings of Claude Desktop (including its Microsoft Store build) and
VS Code in their Windows folders, finds programs with the extensions in
PATHEXT, and starts background work without a console window. - On Windows, the memory library reads a source named in a graph only when
its path stays inside the project folder: no drive, network-share, rooted
or..paths. - The Windows programs are not code-signed yet.
docs/code-signing.mdis the
code signing policy for the planned signing through the SignPath
Foundation; the release workflow's signing job stays off until then.
Other changes
- On macOS,
graphicle-graphandgraphicleuse the system memory
allocator, because mimalloc 3.3.2 can crash on Apple silicon when memory
is freed after worker threads exit (microsoft/mimalloc#1306). Linux and
Windows keep mimalloc. - A new-release notice, like the GitHub CLI's. Once a day, when you run a
command in a terminal,graphicleasks GitHub's releases API for the
latest release. That is one GET request, with no code or data in it; when
GitHub has not answered by the time the command ends, the request is made
again with the next command. When the release is newer,graphicleprints the version, the upgrade
command for your install and the release page on standard error. It never
checks from the MCP server,serve, hooks, session capture,update,
CI, or JSON or piped output.GRAPHICLE_NO_UPDATE_NOTIFIER=1or
graphicle config set update_notifier falseturns it off. - The repository's
.gitattributeschecks text files out with LF line
endings on every system.
Install
brew install graphicle-ai/tap/graphicle
# or
curl -fsSL https://github.com/Graphicle-AI/graphicle/releases/download/v0.1.1/install.sh | sh -s -- --version 0.1.1On Windows (x86-64, preview), in PowerShell:
$env:GRAPHICLE_VERSION = '0.1.1'; irm https://github.com/Graphicle-AI/graphicle/releases/download/v0.1.1/install.ps1 | iexEach archive's SHA-256 sum is in SHA256SUMS and beside it in a .sha256 file.