Inspiration

AI makes competent output abundant. But meaningful work also forms perception, judgment, relationships and the ability to act. SPARK asks how agents can enlarge that human product instead of quietly removing it. It grows from The Spark Between Us and a simple conviction: what someone notices should have somewhere useful to travel.

What it does

A person shares an unfinished observation—a spark. A person or browser agent adds an ember: a question, perspective or connection. Together they record the smallest honest test. The return records what happened, what changed, who contributed and what question remains. A separate capability intention asks what we want to become better at, without claiming it has already happened.

The working interface supports one-observation sharing, autosaved drafts, named perspectives, test plans, reported learning, credit and sharing boundaries, reload persistence and a reviewed downloadable learning trail. This is a device-local prototype, not a live multi-user network. Roles are self-described, not authenticated accounts. Invitations are unsent drafts; portable handoffs are local copies.

Why WebMCP is central

Ten native imperative tools operate on the same state as the human controls. An agent can read the current spark, join as a named local role, add a perspective, name a capability intention, shape a test, record reported learning and prepare a handoff. Contributions appear in the same visible room—not in a separate chat pretending to change the page.

Tool inputs are runtime validated and mutations identify the current spark. offer_spark prepares a draft for human review and refuses to overwrite an existing unfinished draft. pass_spark prepares a reviewable snapshot preserving context and credit; it does not secretly send anything.

The demo captures the actual public build in Chrome with native WebMCP enabled. It uses real getTools and executeTool calls, not an injected mock registry. Its example is explicitly synthetic: the real-world experiment has not been run.

How we built it

React, TypeScript, vinext and Vite; native document.modelContext tool registration; browser-local persistence; Cloudflare Workers-compatible hosting. Human forms and agent tools share one room-state model. The public source is MIT licensed. No paid model service is required by the application.

Challenges and what we learned

The hard part was making human purpose and agent reach genuinely share a working surface. We replaced canned next-step outcomes with real contribution forms, separated capability intentions from observed results, prevented stale handoffs after edits, and validated persisted rooms before reuse. Registration and storage failures are visible rather than silently presented as success.

What we are proud of

Twenty domain tests, TypeScript, scoped lint and production build passed. Actual native browser tool calls, the complete human contribution flow, reload persistence, mobile layout and unauthenticated public access were checked. A spark can now move from perception to a testable question and a portable learning trail while keeping its origin visible. These checks do not establish a real-world growth effect or a security boundary against unrestricted browser automation.

What is next

Durable multi-user rooms, authenticated participants, cross-device persistence and actual invitation delivery. The optional Companion extension is secondary, not SPARK's purpose. The center remains human: help what people notice become useful, and help people become more capable, connected and able to contribute.

Built With

Share this project:

Updates

Submission history