Skip to content
Agentmart
Submit a tool

julia-structure

Answer a structural question about Julia code with tools that read it as Julia, not with grep: julia-methods.jl, Kaimon's live session and julia-callers.jl…

Skill by michakraus

IndexedMIT★ 2
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/michakraus-julia-structure

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Answer a structural question about Julia code with tools that read it as Julia, not with grep: julia-methods.jl, Kaimon's live session and julia-callers.jl give the methods of a name and where they are, the method that dispatch picks, the callers of a function, what a signature change breaks, and whether code is dead. Load it first, before searching files, whenever the request asks where something is defined, what calls it, what runs, or how a package is laid out, even a one-line question. Typical words: callers, call sites, methods, method table, dispatch, defined, definition, signature, impact, unused, dead code, refactor safely, module layout, architecture, codebase tour. For a claim that nothing uses something, delegate to the exhaustive-auditor agent; for a whole-package quality sweep, use julia-package-audit.

Use cases: security, agent-building

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/julia-structure

What's inside

Skill name
julia-structure
Description
Answer a structural question about Julia code with tools that read it as Julia, not with grep: julia-methods.jl, Kaimon's live session and julia-callers.jl give the methods of a name and where they are, the method that dispatch picks, the callers of a function, what a signature change breaks, and whether code is dead. Load it first, before searching files, whenever the request asks where something is defined, what calls it, what runs, or how a package is laid out, even a one-line question. Typical words: callers, call sites, methods, method table, dispatch, defined, definition, signature, impact, unused, dead code, refactor safely, module layout, architecture, codebase tour. For a claim that nothing uses something, delegate to the exhaustive-auditor agent; for a whole-package quality sweep, use julia-package-audit.
License
MIT
Instructions
127 lines in SKILL.md · view on GitHub

Agent Skills spec issues

  • body: contains an absolute path from the author's machine

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Structural questions about Julia code

**There is no code graph in this tree.** The tools below answer these questions.

**Contents**

- [Why grep is not enough, and why a static index is not the answer](#why-grep-is-not-enough-and-why-a-static-index-is-not-the-answer)
- [Route by what you have](#route-by-what-you-have)
  - [`julia-methods.jl` — static, exact, no Julia session](#julia-methodsjl--static-exact-no-julia-session)
  - [Kaimon — the live session, for anything semantic](#kaimon--the-live-session-for-anything-semantic)
  - [`julia-callers.jl` — callers, from lowered IR](#julia-callersjl--callers-from-lowered-ir)
  - [Kaimon `grep_code` — the cross-repository search, no session needed](#kaimon-grep_code--the-cross-repository-search-no-session-needed)
- [The rule that matters more than the routing](#the-rule-that-matters-more-than-the-routing)

## Why grep is not enough, and why a static index is not the answer

Julia is multiple-dispatch. A method added to an existing generic is **not a new name**, so grep
finds your own call site and says nothing about the definitions already there. Worse, the normal
idiom for implementing an interface is a **module-qualified definition**:

```julia
ExampleBase.nsamples(ge::EnsembleProblem) = length(initial_conditions(ge))
```

That is a definition of `nsamples`, and no text search recognises it as one. About a fifth of this
tree is written that way — 1 668 such definitions in `Packages/*/src` against 5 938 plain
`function` forms.

A static index keyed by qualified name, with no signature, fails on exactly this: every method of
one name in one file collapses into one node.

## Route by what you have

| the question | the tool |
|:--|:--|
| what methods exist, and where — **without loading the package** | `julia-methods.jl` |
| which method **actually runs** for these arguments | Kaimon `search_methods` |
| who calls this; is it dead — **where the package loads** | `julia-callers.jl` |
| anything spanning all the repositories | Kaimon `grep_code` with an absolute `path`, then `grep` |

### `julia-methods.jl` — static, exact, no Julia session

```bash
julia --startup-file=no ~/Research/Harness/scripts/julia-methods.jl <package-dir> <name>
```

**`--startup-file=no` is not optional.** Without it the startup file loads Revise, whose file
watcher sprays EMFILE errors over stdout and can bury the report entirely.

Drives Fatou's language server over its `documentSymbol` request, which resolves **per method** and
keeps the qualified name and the signature. Walks the package's files itself, because Fatou's
`workspace/symbol` is lossy while `documentSymbol` is exact.

Use it first for "what is there". It needs no session and no manifest, so it is **the only tool
that works on a package that does not load**.

It reports **definitions only** — no dispatch, no callers, and nothing built by `@eval`.

### Kaimon — the live session, for anything semantic

`search_methods` answers real dispatch on real argument types. It is the only tool that does, and
it is also the only one that sees methods generated at load time: `for name in (…) @eval` in
`src/integrators/dgvi/integrators_dgvi_common.jl:183` of the integrator package creates five types and
ten constructors that no parser can see.

Two costs, both easy to forget:

- **It answers about the manifest-resolved copy in `~/.julia/packages/`, not your working tree.**
  A dependency there can be a minor version behind. "Who calls this before I change its signature"
  is a question about the tree you are about to edit.
- **It sees one dependency cone** — the packages that one session loads, at hundreds of MB
  resident. Covering the tree is impossible, not merely expensive: some packages are mutually
  unsatisfiable.

### `julia-callers.jl` — callers, from lowered IR

```julia
include("~/Research/Harness/scripts/julia-callers.jl")
callers(ExampleBase.nsamples, [Example, ExampleTools])
dead(Example.compute_difference, [Example])
```

Enumerates every method whose **defining** module is one of the targets, then scans each method's
lowered IR for a `GlobalRef`. The defining module is not where the generic lives, which is why it
finds callers hiding behind `Base.length`, `Base.iterate` and `ExampleBase.eachsample`. A whole
package stack takes seconds.

It is also right where text search is wrong: it excludes a file that is `include`d nowhere.
`src/simulations/parallel_simulation.jl` of the integrator package is commented out at
`src/Simulations.jl:15`, and grep reports its call sites as live.

### Kaimon `grep_code` — the cross-repository search, no session needed

```
grep_code(pattern = "ExampleBase\\.nsamples",
          path    = "/Users/me/Research/Packages")
```

A real regex over the **live working tree**, so no index can go stale, and it needs only the
server — not a session, and not a package that loads. Each hit carries its **enclosing function or
struct**, which is what a bare grep cannot give. One call covers every repository under `path`, and
it reports the qualified definitions together with any in an `obsolete/` directory — which is dead
source, so read the paths rather than the count.

Three limits. It respects `.gitignore` unless `no_ignore = true`. It caps the body and prints the
true total in its header, so **read the header before concluding anything about completeness**.
And it resolves nothing: a hit is text, so it cannot tell a definition from a call, nor see a
method built by `@eval`.

## The rule that matters more than the routing

**An empty result is UNKNOWN, never a negative.** Each tool is blind in its own way:

| tool | blind to |
|:--|:--|
| `julia-methods.jl` | uses, dispatch, anything generated by a macro; `references` on a qualified name returns 0 |
| Kaimon | anything not loaded — unloadable packages, tests, unloaded extensions — and your working tree |
| `julia-callers.jl` | the same, plus calls built by `eval` or string interpolation |
| grep | qualified definitions as definitions; and it counts shadowing locals as uses |

From michakraus/ResearchHarness, MIT.

More from michakraus/ResearchHarness

Signals

Stars
2
Forks
0
Open issues
0
Last commit (this folder)
Oct 16, 2026 (13 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from michakraus

Cite this page

julia-structure skill. Agent Mart. https://agentmart.dev/skills/michakraus-julia-structure (last updated 2026-10-24)