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
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.
About
Use cases: security, agent-building
Reviews
Write a reviewNo 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
- 0.598score
build-part
michakraus
Run the next part of a decomposed task file through the builder-critic loop.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
build-reviewed
michakraus
Build one part of a decomposed task file whose tier cell is reviewed: one part-builder, one blind part-critic, at most one fix round by a new part-builder…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-package-audit
michakraus
Audit the correctness and code quality of a whole Julia package, and return one findings report in a fixed format: type piracy, type instabilities, avoidable…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-performance
michakraus
Measure Julia performance so that the number means something: allocations, type stability, timings and before/after comparisons, each in a cold process with…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-release
michakraus
Release and register a Julia package in the General registry.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-surgical-fix
michakraus
Fix a reported problem in a Julia repository so that the diff holds that fix and nothing else, then check it again: the scope rule, the fix and re-verify…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
latex-revision
michakraus
Run a revision pass over a LaTeX manuscript with colour-marked changes.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
math-verify
michakraus
Check one mathematical statement in Julia, analytically, symbolically or numerically, together with a case that should make the check fail, and keep the check…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
plan-parts
michakraus
Plan work as parts that are each one pull request, and write each part's spec so that the builder-critic loop can build it and judge it: the parts table, the…
SkillAFreshness: A★ 2Claude Code +9 - 0.565score
which-model
michakraus
Probe: report which model runs a typed slash command whose frontmatter names the tier small.
SkillAFreshness: A★ 2Claude Code +9
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
- Repository
- github.com/michakraus/ResearchHarness
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from michakraus
- 0.598score
build-part
michakraus
Run the next part of a decomposed task file through the builder-critic loop.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
build-reviewed
michakraus
Build one part of a decomposed task file whose tier cell is reviewed: one part-builder, one blind part-critic, at most one fix round by a new part-builder…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-package-audit
michakraus
Audit the correctness and code quality of a whole Julia package, and return one findings report in a fixed format: type piracy, type instabilities, avoidable…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-performance
michakraus
Measure Julia performance so that the number means something: allocations, type stability, timings and before/after comparisons, each in a cold process with…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-release
michakraus
Release and register a Julia package in the General registry.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-surgical-fix
michakraus
Fix a reported problem in a Julia repository so that the diff holds that fix and nothing else, then check it again: the scope rule, the fix and re-verify…
SkillAFreshness: A★ 2Claude Code +9
Cite this page
julia-structure skill. Agent Mart. https://agentmart.dev/skills/michakraus-julia-structure (last updated 2026-10-24)