● 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.
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 +
--strictLLM-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.
| Concern | LangChain | smallchat |
|---|---|---|
| Streaming | CallbackManager + custom piping | for await over native provider deltas |
| Tool dispatch | Chain/Agent hierarchy | One smallchat_dispatchStream call |
| Caching | External wrappers | Built-in resolution cache |
| Extensibility | Subclass and register | toolClass.addMethod or swizzle |
| Bundle size | Multiple adapter packages | < 5 MB, zero dependencies |
Streaming
LangChainCallbackManager + custom piping
smallchat
for await over native provider deltasTool dispatch
LangChainChain/Agent hierarchy
smallchatOne
smallchat_dispatchStream callCaching
LangChainExternal wrappers
smallchatBuilt-in resolution cache
Extensibility
LangChainSubclass and register
smallchat
toolClass.addMethod or swizzleBundle size
LangChainMultiple adapter packages
smallchat< 5 MB, zero dependencies
"The big idea is messaging."— Alan KayGet started →