Skip to main content
v0.5.0 — confidence-tiered dispatch, LoomMCP integration

object oriented inference

Drop it in with one command. Watch it stream in your own UI. Or spin up the built-in server in seconds.

terminal
Get started in seconds:
What you get
The Obj-C runtime for LLM tooling
Selectors, dispatch tables, forwarding chains, method swizzling — applied to tool orchestration.
What it does
smallchat compiles tool definitions, embeds semantic fingerprints, and dispatches natural-language intent to the best-matching implementation — at runtime, with caching.
See the dispatch model
🎯
Why it matters
Tool proliferation is the next scaling problem. Routing by string matching breaks. Routing by semantic vector search does not. smallchat brings the Obj-C message dispatch model to LLM tooling.
Read the motivation
🔬
Deep dive
SelectorTable, DispatchContext, OverloadTable, ResolutionCache, ToolClass hierarchies, method swizzling, streaming tiers, and the MCP 2025-11-25 server — all documented.
Explore the internals
New in 0.5.0
Confidence-tiered dispatch & LoomMCP
Every dispatch returns a confidence tier and the runtime branches on it. Plus a synchronized release across every package and a first-class LoomMCP integration guide.
Confidence-tiered dispatch
Five tiers — EXACT, HIGH, MEDIUM, LOW, NONE — each branching to verify, decompose, refine, or run.
ResolutionProof traces
Every dispatch carries a serializable trace documenting exactly why a tool was chosen, with per-step timing.
Pre-flight verification
A respondsToSelector: gate catches misroutes before they hit your tool — schema, keyword overlap, optional LLM check.
Intent decomposition
LOW-confidence intents become a doesNotUnderstand: handler that breaks the request into sub-intents and dispatches each in order.
Refinement protocol
NONE-confidence dispatches return a structured tool_refinement_needed result with concrete options drawn from the nearest matches.
Observation & adaptation
A KVO-inspired observer tracks corrections and known-bad pairs, then adapts per-tool-class thresholds in real time.
New: LoomMCP integration guide →
LoomMCP turns a codebase into a queryable symbol graph — ~97% fewer tokens spent reading code. Pair its 17 tools with semantic dispatch and the agent stops paying twice.
Pluggable LLMClient + --strict
LLM-powered features sit behind one interface and degrade gracefully without one. --strict raises thresholds and treats ambiguity as an error.
Synchronized release: @smallchat/core, react, nextjs, testing, playground, docs, examples, and smallchat-vscode all at 0.5.0.
Primitives, not a framework
Why not LangChain?
smallchat gives you the dispatch layer. You build the agent. No abstractions you didn't ask for.
ConcernLangChainsmallchat
StreamingCallbackManager + custom pipingfor await over native provider deltas
Tool dispatchChain/Agent hierarchyOne smallchat_dispatchStream call
CachingExternal wrappersBuilt-in resolution cache
ExtensibilitySubclass and registertoolClass.addMethod or swizzle
Bundle sizeMultiple adapter packages< 5 MB, zero dependencies
Streaming
LangChainCallbackManager + custom piping
smallchatfor await over native provider deltas
Tool dispatch
LangChainChain/Agent hierarchy
smallchatOne smallchat_dispatchStream call
Caching
LangChainExternal wrappers
smallchatBuilt-in resolution cache
Extensibility
LangChainSubclass and register
smallchattoolClass.addMethod or swizzle
Bundle size
LangChainMultiple adapter packages
smallchat< 5 MB, zero dependencies
"The big idea is messaging."— Alan Kay
Get started →