Agent tool-use patterns
How to sequence Dike's tools inside a multi-step agent loop.
The four tools are designed to chain, not stand alone — a typical agentic legal query touches two or three of them in sequence.
sequenceDiagram
participant Agent
participant Dike
Agent->>Dike: dike_search(query)
Dike-->>Agent: results[] (800-char snippets)
Note over Agent: pick the right canonical_id
alt needs full text
Agent->>Dike: REST GET /v1/document/{canonical_id}
Note over Agent,Dike: not one of the four MCP tools --<br/>call it directly if your client allows arbitrary HTTP
Dike-->>Agent: full_text
end
alt needs citation graph
Agent->>Dike: dike_graph_traverse(canonical_id)
Dike-->>Agent: nodes + edges
end
alt needs a verified answer
Agent->>Dike: dike_reason(question)
Dike-->>Agent: answer + verified citations
end
Search → Document
dike_search snippets are capped at 800 characters — enough to judge relevance, not enough to reason over carefully. When a result looks right, follow up with /v1/document/{canonical_id} (or the MCP-side equivalent, if your client exposes it) to pull full_text before answering from it.
Search → Graph Traverse
To answer "what amends this law" or "what does this ruling cite," don't try to extract that from search snippets — call dike_graph_traverse with the canonical_id you already have. It returns hydrated nodes (title/year/status), so most graph questions resolve in one call.
Reason vs. Search + your own synthesis
dike_reason is the right choice when you want Dike's own hallucination-guarded synthesis, with citations pre-verified against the retrieved set. If your agent wants to do its own multi-source synthesis (e.g. combining Dike results with other tools), prefer dike_search + dike_graph_traverse and build the answer yourself — don't post-process dike_reason's answer text, since its guarantees (every [n] is verified) only hold for the text as returned.
Rate limits inside a loop
dike_reason has a much tighter per-minute limit than the other three tools (see Rate limits & errors) because it runs a full LLM generation, not just retrieval. An agent that calls dike_reason once per sub-question in a multi-step plan can hit that limit faster than a human would notice — prefer one dike_reason call per user-facing answer, with dike_search/dike_graph_traverse doing the cheaper exploratory steps in between.