Introduction
jdx is an IDE for AI agents, as a command line tool. It answers the questions an IDE answers for a human — what members a class has, what a method does, who calls it, what implements an interface, what an upgrade breaks — for any JVM jar, Maven coordinate, class or source directory, and the JDK itself.
Why it exists#
An agent working on a Java or Kotlin codebase constantly needs to know things about code it
cannot see: the library jars on the classpath and the JDK. Without jdx it pieces the answers
together with unzip, javap, grep and by reading thousand-line source files into its
context window. That is slow, noisy, and burns the context the agent needs for the actual task.
jdx replaces each of those multi-step hunts with one command that returns one precise answer:
jdx show java.util.HashMap
class java.util.HashMap
public class HashMap
extends java.util.AbstractMap
implements java.util.Map, java.lang.Cloneable, java.io.Serializable
members: 4 constructors, 52 methods, 13 fields
source: java.base (jrt)
next: jdx members java.util.HashMap --inheritedReal output — this example ran against the current jdx when the page was built.
Every answer names its symbols canonically and suggests the next command (next:), so an agent
moves from question to question by copy-paste instead of reconstruction.
What it can answer#
| Question | Command | IDE gesture |
|---|---|---|
| What is this type? | jdx show |
Go to declaration |
| What can I call on it? | jdx members |
Code completion after . |
| What does this method do? | jdx body |
Open the method |
| What does the javadoc say? | jdx doc |
Quick documentation |
| Who uses this? | jdx usages |
Find usages |
| Who implements this? | jdx hierarchy, jdx implementors |
Type hierarchy |
| Who calls this, what does it call? | jdx callers, jdx calls |
Call hierarchy |
| How is it used in practice? | jdx samples |
(no IDE equivalent) |
| What does this upgrade break? | jdx diff |
(no IDE equivalent) |
The command catalogue lists all of them.
Design principles#
These are product guarantees, not aspirations — each is enforced by tests:
- Minimal correct output. Bounded by default, never a file dump when a member was asked for. Truncation is explicit and says which flag shows the rest.
- Never guesses. An ambiguous reference exits
2and lists every candidate as a copy-pasteable reference. Guessing wrong is worse than asking. - Provenance on every answer. Which jar, whether the text came from sources, bytecode or a decompiler — and which one — so the agent can judge confidence.
- Deterministic. Same inputs, byte-identical output. No timestamps, no absolute paths.
- Meaningful exit codes, so agents branch without parsing prose (details).
- Degrade, don't fail. No sources jar? It decompiles — and labels the result as reconstructed.
- Read-only. Bytecode is parsed with ASM; inspected classes are never loaded, so no code from the jars you inspect ever runs.
Where to go next#
- Install jdx (one command, JDK 21+).
- Run the quickstart — five minutes against the JDK and a Maven library.
- Connect your AI agent over MCP or the CLI.