Docs & rules

langgraph4j/langgraph4jGitHub

This is a public, read-only report. Striff reads this repository's docs, turns each sentence that makes a claim about the code into a rule, and checks the rule against the code on the default branch. How this works

1 stale name in these docs.

main9ad1923Last read Oct 3

Is this yours? Install to manage it

Once installed, Striff checks every pull request.

Documents
Rules
67
13
11
11
2
7
7
7
1
1 stale name1
2
2
3
3
2
2
2
2
2
2
33
33
33
31
28
3
2
2
25 docs
langgraph4j/langgraph4jOpen repository

Stale names in these docs1

Each sentence below has a stale name: a type the default branch doesn't declare, or declares somewhere else. Edit the doc so it matches the code, or bring the type back.

  • Goneorg.bsc.langgraph4j.dsl.LangGraphDslVisualizerApplication
    -Dspring-boot.run.main-class=org.bsc.langgraph4j.dsl.LangGraphDslVisualizerApplication \

    org.bsc.langgraph4j.dsl declares nothing by this name.

    View on GitHub

langgraph4j/langgraph4j — documented rules

67 of 67 rules, printed October 14, 2026.

The sentence in your docs
Read Oct 3
Exposes a unique id() and a run(RunAgentInput) method returning a Flow.Publisher<Event> that streams the AG-UI events produced by the agent execution.
2 rules from this sentence
AGUIAgent has an id method
Holds
AGUIAgent has a run method
Holds
Read Oct 3
Abstract base implementation of AGUIAgent that bridges a LangGraph4j CompiledGraph to the AG-UI event stream.
3 rules from this sentence
AGUIAgent is a contract
Holds
AGUIAgentBase implements AGUIAgent
Holds
AGUIAgentBase depends on CompiledGraph
Holds
Read Oct 3
It lazily compiles the graph (via the abstract newGraph() method), builds the graph input from the incoming request (via the abstract graphInput(RunAgentInput) method), runs it either asynchronously or synchronously, and translates node/streaming outputs, errors and completion into the corresponding AG-UI events.
2 rules from this sentence
AGUIAgentBase has a newGraph method
Holds
AGUIAgentBase has a graphInput method
Holds
Read Oct 3
A simple registry (Map<String, AGUIAgent>) used to look up a registered AGUIAgent by its identifier, typically used to dispatch an incoming AG-UI run request to the appropriate agent implementation.
AGUIAgentRegistry depends on AGUIAgent
Holds
Read Oct 3
Its stepEvents() factory method returns a NodeHook.WrapCall that automatically dispatches the AG-UI StepStartedEvent before a node runs and the StepFinishedEvent after it completes successfully, without requiring manual event handling in the node's own logic.
AGUIHook has a stepEvents method
Holds
Read Oct 3
Instances are created through its fluent Builder (AGUINodeOutput.builder()).
AGUINodeOutput has a builder method
Holds
Read Oct 3
It exposes toRunAgentParameters() to convert itself into an immutable RunAgentInput instance.
AGUIRunAgentInput has a toRunAgentParameters method
Holds
Read Oct 3
the AGUIAgent/AGUIAgentBase abstractions that bridge a LangGraph4j CompiledGraph execution to a stream of AG-UI events, the AGUIAgentRegistry used to look up agents by id, the AGUIHook node hook that automatically emits step lifecycle events, and the AGUINodeOutput bridge type together with the AGUIRunAgentInput request wrapper.
2 rules from this sentence
AGUIAgentBase depends on CompiledGraph
Holds
AGUIAgentRegistry depends on AGUIAgent
Holds
Read Oct 3
Use SkillInjector.unloadMap(...) / SkillInjector.unloadCommand(...) from your own hooks when you need to unload inside a channel that isn't the default callModel wrap.
2 rules from this sentence
SkillInjector has an unloadMap method
Holds
SkillInjector has an unloadCommand method
Holds
Read Oct 3
UnloadTarget is a sealed interface over exactly four records.
UnloadTarget is a contract, and UnloadTarget is declared sealed
Holds
Read Oct 3
Factory UnloadTarget.none(), Meaning keep everything (no-op)
UnloadTarget has a none method
Holds
Read Oct 3
Factory UnloadTarget.all(), Meaning drop every active id (ephemeral)
UnloadTarget has an all method
Holds
Read Oct 3
Factory UnloadTarget.ids("a","b"), Meaning drop the listed ids (null-safe, unique'd)
UnloadTarget has an ids method
Holds
Read Oct 3
Factory UnloadTarget.matching(predicate), Meaning drop every id accepted by predicate
UnloadTarget has a matching method
Holds
Read Oct 3
JsonDslGenerator, a GraphDefinition.Reducer that serializes a compiled StateGraph to JSON.
JsonDslGenerator depends on StateGraph
Holds
Read Oct 2
A BaseCheckpointSaver implementation that persists LangGraph4j workflow checkpoints in a Hazelcast distributed map, so workflow state survives process restarts and can be shared across the members of a Hazelcast cluster.
HazelcastSaver implements BaseCheckpointSaver
HoldsPR #484 · Oct 2
Read Oct 2
JacksonStateSerializer is abstract (it recovers the concrete state type from its generic binding), so it can't be instantiated directly — either use one of the ready-made concrete subclasses shipped by the integration modules, or subclass it yourself:
JacksonStateSerializer is declared abstract
HoldsPR #484 · Oct 2
Read Oct 2
OracleSaverV2.tag(config, version) loads checkpoints for a released version from LG4JThreadTag.
OracleSaverV2 has a tag method
HoldsPR #484 · Oct 2
Read Oct 2
With a suitable Oracle DataSource, it exposes selectAllThreads() and selectAllTags() to retrieve active thread and released-tag records.
2 rules from this sentence
OracleSaverV2Dashboard has a selectAllThreads method
HoldsPR #484 · Oct 2
OracleSaverV2Dashboard has a selectAllTags method
HoldsPR #484 · Oct 2
Read Oct 2
PostgresSaverV2.tag(config, version) loads checkpoints for a released version from LG4JThreadTag.
PostgresSaverV2 has a tag method
HoldsPR #484 · Oct 2
Read Oct 2
registerInterruption(...) updates the active LG4JThread row by setting is_interrupted = TRUE and storing the interruption reason in message.
PostgresSaverV2 has a registerInterruption method
HoldsPR #484 · Oct 2
Read Oct 2
cleanupAll() to reset state between tests
RedisSaver has a cleanupAll method
HoldsPR #484 · Oct 2
Read Oct 2
cleanupThread(threadId) to remove completed workflow data
RedisSaver has a cleanupThread method
HoldsPR #484 · Oct 2
Read Oct 2
SQLiteSaverV2.tag(config, version) loads checkpoints for a released version from LG4JThreadTag.
SQLiteSaverV2 has a tag method
HoldsPR #484 · Oct 2
Read Oct 2
registerInterruption(...) updates the active LG4JThread row by setting is_interrupted = 1 and storing the interruption reason in message.
SQLiteSaverV2 has a registerInterruption method
HoldsPR #484 · Oct 2
Read Oct 2
stream(S initialState, RunnableConfig config): Executes the graph and returns an AsyncGenerator<S>.
CompiledGraph has a stream method
HoldsPR #484 · Oct 2
Read Oct 2
invoke(S initialState, RunnableConfig config): Executes the graph and returns a CompletableFuture<S> that completes with the final state of the graph after it reaches an END node.
CompiledGraph has an invoke method
HoldsPR #484 · Oct 2
Read Oct 2
A Functional Interface ([AsyncNodeAction]) that encode the logic of your agents.
AsyncNodeAction is a contract
HoldsPR #484 · Oct 2
Read Oct 2
A Functional Interface ([AsyncCommandAction]) that determine which Node to execute next based on the current State.
AsyncCommandAction is a contract
HoldsPR #484 · Oct 2
Read Oct 2
Attribute checkpointSaver, Type BaseCheckpointSaver, Default null, Description The checkpoint saver implementation for persisting graph state across executions Required for stateful features like human-in-the-loop workflows and resuming interrupted graphs See Checkpointer section for more details
CompileConfig has a checkpointSaver field
HoldsPR #484 · Oct 2
Read Oct 2
Attribute interruptsAfter, Type Set<String>, Default empty, Description Node names where the graph should pause after executing the node Useful for inspecting results after a node completes or for user feedback
CompileConfig has an interruptsAfter field
HoldsPR #484 · Oct 2
Read Oct 2
Attribute interruptBeforeEdge, Type boolean, Default false, Description If true , interruptions at a node occur after it executes but before any conditional edges are evaluated This allows inspecting the state before the graph branches to the next node
CompileConfig has an interruptBeforeEdge field
HoldsPR #484 · Oct 2
Read Oct 2
Attribute recursionLimit, Type int, Default 25, Description Default maximum number of execution steps allowed for each graph invocation Prevents infinite loops by raising an error if the limit is exceeded A RunnableConfig recursion limit overrides this default for one invocation
CompileConfig has a recursionLimit field
HoldsPR #484 · Oct 2
Read Oct 2
Attribute releaseThread, Type boolean, Default false, Description If true , the checkpointer will release all data associated to the current thread acquired during graph execution
CompileConfig has a releaseThread field
HoldsPR #484 · Oct 2
Read Oct 2
Attribute graphId, Type String, Default null, Description Optional identifier for the graph Useful for logging, monitoring, or distinguishing between multiple graph instances It will available through RunnableConfig.graphId()
CompileConfig has a graphId field
HoldsPR #484 · Oct 2
Read Oct 2
Method threadId( String ), Description A unique identifier for the execution thread/session Essential for checkpoint-based persistence, as it groups related executions together Allows resuming interrupted graphs or maintaining conversation history
RunnableConfig has a threadId method
HoldsPR #484 · Oct 2
Read Oct 2
Method checkPointId( String ), Description Specific checkpoint identifier within a thread Useful for resuming execution from a specific point rather than from the beginning It is managed by checkpoint saver
RunnableConfig has a checkPointId method
HoldsPR #484 · Oct 2
Read Oct 2
Method nextNode( String ), Description Specifies which node should execute next Primarily used internally by the graph engine when resuming interrupted executions
RunnableConfig has a nextNode method
HoldsPR #484 · Oct 2
Read Oct 2
Method streamMode( CompiledGraph.StreamMode ), Description Controls how results are streamed during execution The default is VALUES SNAPSHOTS is also available when checkpoint snapshots are required
RunnableConfig has a streamMode method
HoldsPR #484 · Oct 2
Read Oct 2
Method recursionLimit( Integer ), Description Optional maximum number of execution steps for this invocation When absent, the graph uses its configured default The builder rejects values less than or equal to zero
RunnableConfig has a recursionLimit method
HoldsPR #484 · Oct 2
Read Oct 2
The [GraphResult] class provides type-safe methods to check (isStateDataOrCheckpointSaverTag(), isNodeOutput(), etc.) and retrieve (asStateDataOrLastCheckpointStateData(), asNodeOutput(), etc.) each result type, preventing casting errors and making your code more maintainable.
4 rules from this sentence
GraphResult has an isStateDataOrCheckpointSaverTag method
HoldsPR #484 · Oct 2
GraphResult has an isNodeOutput method
HoldsPR #484 · Oct 2
GraphResult has an asStateDataOrLastCheckpointStateData method
HoldsPR #484 · Oct 2
GraphResult has an asNodeOutput method
HoldsPR #484 · Oct 2
Read Oct 2
[AppenderChannel] supports the message deletion throught its nested functional interface [RemoveIdentifier].
2 rules from this sentence
RemoveIdentifier is declared inside AppenderChannel
HoldsPR #484 · Oct 2
RemoveIdentifier is a contract
HoldsPR #484 · Oct 2
Read Oct 2
Inheriting such interface you can create a particular value that when will be put inside a State's property, with [AppenderChannel] schema, instrucs the [Reducer] to remove the element that match the specified conditions in [RemoveIdentifier] throught compareTo( element, index ) method.
RemoveIdentifier has a compareTo method
HoldsPR #484 · Oct 2
Read Oct 2
ObjectStreamStateSerializer is the default binary implementation used by StateGraph when no serializer is supplied.
StateGraph depends on ObjectStreamStateSerializer
HoldsPR #484 · Oct 2
Read Oct 2
The mapper is available through objectMapper() and the type registry through typeMapper() when an application needs to add its own [Jackson] modules or supported types.
2 rules from this sentence
JacksonStateSerializer has an objectMapper method
HoldsPR #484 · Oct 2
JacksonStateSerializer has a typeMapper method
HoldsPR #484 · Oct 2
Read Oct 2
Module langchain4j/langchain4j-core, State serializer LC4jStateSerializer (binary), LC4jJacksonStateSerializer (JSON), Serializable classes ChatMessage and its supported implementations AiMessage , UserMessage , SystemMessage , and ToolExecutionResultMessage ToolExecutionRequest and Content values TextContent and ImageContent (including Image )
LC4jJacksonStateSerializer is in langchain4j/langchain4j-core
HoldsPR #484 · Oct 2
Read Oct 2
Module spring-ai/spring-ai-core, State serializer SpringAIStateSerializer (binary), SpringAIJacksonStateSerializer (JSON), Serializable classes Message and its supported implementations AssistantMessage , UserMessage , SystemMessage , and ToolResponseMessage AssistantMessage.ToolCall ToolResponseMessage.ToolResponse and Media
SpringAIJacksonStateSerializer is in spring-ai/spring-ai-core
HoldsPR #484 · Oct 2
Read Oct 2
The org.bsc.langgraph4j.action.InterruptibleAction<State> interface is the core component that enables this functionality.
InterruptibleAction is a contract
HoldsPR #484 · Oct 2
Read Oct 2
The heart of the interface is the interrupt method:
InterruptibleAction has an interrupt method
HoldsPR #484 · Oct 2
Read Oct 2
GraphInterruptException is a built-in exception that a node action can raise when it needs to stop graph execution intentionally.
GraphInterruptException is a concrete implementation
HoldsPR #484 · Oct 2
Read Oct 2
org.bsc.langgraph4j.hook.NodeHook: For instrumenting graph nodes.
NodeHook is in org.bsc.langgraph4j.hook
HoldsPR #484 · Oct 2
Read Oct 2
org.bsc.langgraph4j.hook.EdgeHook: For instrumenting conditional edges (since only they have an associated function).
EdgeHook is in org.bsc.langgraph4j.hook
HoldsPR #484 · Oct 2
Read Oct 2
retryOn(...) is required.
RetryPolicy has a retryOn method
HoldsPR #484 · Oct 2
Read Oct 2
The StateGraph is the primary class you'll use to define the structure of your application.
StateGraph is a concrete implementation
HoldsPR #484 · Oct 2
Read Oct 2
Once you've defined all your nodes and edges in a StateGraph, you compile() it into a CompiledGraph<S extends AgentState>.
StateGraph has a compile method
HoldsPR #484 · Oct 2
67 rules from 13 docs

See these where the change is. The browser extension puts a pull request's doc findings, and a diagram of what it changed, on the GitHub page itself, so the code and what your docs say about it are side by side.