ContextIQ Talk to us
On-device agent engines

A fully on-device assistant.

ContextIQ is the core library behind voice-first, on-device assistants. Private by architecture, fast by design, and genuinely useful in the hand.

7:42ON DEVICE
Today · offline
What's on my calendar tomorrow?

Three things tomorrow. Your first is a 9:00 stand-up, and you're clear after 3pm.

CALENDAR · TOMORROW

Wed, 3 free hours

3 events · nothing after 15:00

CLEAR PM
09:00Team stand-up
11:30Design review
14:001:1 with Sam
Block focus time Share
Move the 11:30 What about Friday?
calendar.lookup · 0.96 Why this?
On device
The model runs locally. Nothing is sent to a server.
Zero cost
No API keys and no per-request billing.
Offline
Fully functional in airplane mode, with no connection.
Instant
Routing and first speech in well under a second.
Why on-device

Privacy, speed and functionality.

The whole model runs locally. There are no API keys, no per-call cost, and no round trip to a server. That constraint is what makes the experience both trustworthy and instant.

Private by architecture

Requests, transcripts and results never leave the device. Privacy isn't a policy bolted on afterwards; it's a property of where the compute happens. Cloud escalation, if it exists at all, is opt-in and always announced.

Fast by design

Embedding retrieval routes each request in under a millisecond, with no token cost. Speech is chunked at sentence boundaries so the agent starts talking after the first sentence, not the whole reply.

Genuinely useful

Every tool call renders as its own view: an event card, a pass, a preview, not a paragraph of text. The agent picks the right tool from a large catalogue, validates every argument, and shows its work when asked.

Architecture

Five layers, cleanly separated.

The tool and routing layers never import model-specific types, so the same engine ports to a second platform later. The hard constraint everything is designed around: a small on-device context window, read at runtime and never hardcoded. Two cross-cutting layers span all five: guardrails, so nothing reaches a tool or the user unchecked, and analytics that measure every decision on the device.

LAYER 05UI
Message list, live transcription, and a first-class view per tool call: generative UI, not text.
LAYER 04Voice
Streaming speech-to-text, sentence-chunked text-to-speech, echo cancellation and barge-in.
LAYER 03Orchestration
Session lifecycle and rolling context budgeting, plus the guardrails that gate every tool call.
LAYER 02RoutingSUB-MS
Embedding retrieval first, a classifier only when it's close, and a real "no tool needed" path.
LAYER 01Tools
A broad tool catalogue behind one platform-agnostic protocol, grouped by user intent, each with a measured token cost.

Across every layer

CROSS-CUTTING Guardrails
Every model output passes the same checks before anything happens: arguments are validated against their schema, the tool ID is confirmed present, destructive actions are held for explicit approval, and each decision is logged. The model is quantised and will occasionally hallucinate an argument, so nothing reaches a tool, or the user, until it has been verified.
CROSS-CUTTING Analytics & performance
The same decision log that guards each call also measures it. Routing accuracy, tool selection, stage-by-stage latency, token budgets and error rates are tracked as the agent runs, so the system can be tuned against real usage and regressions caught early. It all happens on the device: nothing is sampled or sent off, and analysis works the same in airplane mode.
The central libraries

The reusable core we build once, and depend on everywhere.

These are the components that make an on-device assistant viable inside a tiny context window. Each is independently testable, portable, and owns one hard problem.

TOOL REGISTRY

One catalogue, measured

A single source of truth for every tool, wrapped behind a protocol that never leaks model internals. Descriptions are treated as production code, because the summary is the prompt.

  • Grouped by user intent, not API surface
  • Constrained argument types so invalid values can't be produced
  • Token cost measured at build time and asserted in tests
HYBRID ROUTER

Retrieval, then reason

Never attach every schema to one session. Cosine-match the utterance against cached embeddings, and only spend a model pass when the top candidates are genuinely close.

  • Sub-millisecond embedding retrieval, zero token cost
  • Conditional classifier fallback with a confidence floor
  • A first-class "none" path, since most turns need no tool
CONTEXT BUDGETER

The window never overflows

Before every request it counts history, prompt and reserve against the runtime context size. When it would exceed, it summarises the oldest turns rather than throwing an error at the user.

  • Reads the context size at runtime, never hardcoded
  • Rolling summarisation to stay under budget
  • Full decision log from day one, the only real quality signal
VOICE PIPELINE

Natural to talk to

Hardware echo cancellation stops the agent hearing itself. Output is cut on real sentence boundaries and queued so speech starts almost immediately, and the user can interrupt at any moment.

  • Voice-activity endpointing, so no tap to stop
  • Sentence-chunked synthesis for instant playback
  • Barge-in that cuts speech in under 200 ms
GENERATIVE UI

Answers as objects

Each tool supplies its own result view through a shared protocol. A calendar lookup is an event card; a draft is an editable preview. Nothing destructive runs until the user approves what they can see.

  • Tool calls modelled as a first-class message type
  • Editable action previews instead of yes/no dialogs
  • An on-demand "Why?" that reveals the routing decision
VALIDATION & SAFETY

Guardrails on every call

The model is quantised and will hallucinate arguments. Between the call and execution, every argument is checked against its schema, the tool ID is confirmed present, and destructive actions wait for approval.

  • Schema validation before anything executes
  • Fuzzed arguments in tests, so nothing runs on malformed input
  • Routing eval set run on every registry change
One request, start to finish

Raise the phone. Hear the answer.

The whole loop runs locally, in airplane mode, in under two seconds from the end of the sentence.

01

Raise

Gravity-vector gesture with dwell and hysteresis arms the listener.

gesture
02

Listen

Streaming transcription with voice-activity endpointing. Live on screen.

on-device STT
03

Route

Embedding match narrows the catalogue to a handful and attaches only those.

~0.4 ms
04

Execute

Arguments validated, tool runs, result rendered as its own card.

validated
05

Speak

Reply chunked by sentence and spoken back, interruptible any time.

<2 s total

Built for portability from the first line.

Because the tool and routing layers stay free of any model-specific types, the same registry and the same router move to a second platform without a rewrite. We design the core once and reuse it. The constraint that keeps everything small is also what keeps it clean.

Sectors

One engine, many venues.

The same on-device assistant adapts to the place it runs in, and is most valuable exactly where connectivity is weakest and people need an answer immediately.

Contact

Building an on-device assistant?

We build the core libraries (tool registries, routing, context budgeting, voice and generative UI) and the products on top of them. Based in London. Reach out for pilots, partnerships or product work.

Start a conversation
Studio
86–90 Paul Street
London EC2A 4NE
United Kingdom
Focus
On-device AI · voice interfaces · native iOS · agent tooling