signpost.ziola.dev
A stateless capability resolver for WebMCP.
The brief
Signpost lets a generic browser agent discover where a capability can be performed without taking ownership of the agent's objective, decomposition, or sequence. The agent decides what it needs and what to do next; when it needs a capability, it calls one resolver — resolve_surface({ capability }) — and Signpost returns matching provider surfaces. It holds no journey state, session, route, cursor, history, or server-side plan.
Agent owns why and sequence. Signpost answers where. Providers own what. Consequential providers control whether a mutation may execute. Evidence records what happened.
The demonstration
one objective, three providersOne compound objective — order a coffee, book the earliest basic haircut, and check whether a palette contains a hex value — resolved one capability at a time across three independently built providers, with the agent choosing the sequence itself.
Reference providers
independently builtNotes from the build
decisions that heldSignpost does not plan the journey or coordinate providers. A response carries candidate surfaces only — retrieval scores and match diagnostics stay internal to the resolver, out of its public contract.
Retrieval is transparent lexical and fuzzy matching over provider-authored capability IDs and descriptions. No model-based retrieval, and nothing retained between one resolution call and the next.
Authorization binds the exact material terms and is single-use. The drift test authorizes an appointment for 10:00, presents 10:30 at execution, and returns block with zero provider calls.