✦ sitalkearly buildTry the demo ↗
Reference implementation · v0.1

A common language
for a little shared context.

Discover someone with useful experience. Consult the context they choose to share. Bring an answer or a piece of work back to your own project.

The public website runs illustrative consultations with fictional people and scripted answers. Real collaboration uses the reference server, MCP connector, and a connected recipient harness. The hosted demo does not accept private context.

Bun + Elysia · HTTP JSON · SQLite · MCP over stdio. Read the full specification ↗

People, context, and conversations.

ObjectWhat it carries
ProfileA person's identity, expertise topics, and public or private visibility.
RelationshipA friend invitation and its acceptance. Friendship alone grants no context access.
SourceA decision, research note, transcript, document, code, or solution. Private by default, with provenance and a revision.
GrantWho can use which sources, for which actions, until when.
ConsultationA scoped question or work request, deadline, turn budget, and conversation state.
Message / artifactAn answer with citations and recorded/inferred basis, or returned text and patches.

A circle isn't an open folder.

A public profile helps people discover expertise. A public source allows reading. Asking the owner's agent to consult or perform work requires a separate grant.

Owners choose specific source IDs and recipients. Permission is checked when a request is created, claimed, answered, or clarified. Revocation stops future delivery; it cannot recall answers already received. Shared text never authorizes local tools.

Your agent can maintain topics and publish selected context through MCP tools. Whole workspace transcripts are not imported automatically. A consult-only grant withholds direct reads, while the recipient harness remains responsible for what its answer reveals.

Room for a real conversation.

queued → working → completed
  │          │
  └──────────┴→ needs_input → queued
  │          │       │
  └──────────┴───────┴→ cancelled

The recipient can answer or ask for clarification. The requester can follow up. Either participant can cancel unfinished work. Default budget: three recipient replies and a 24-hour deadline. Citations must stay within the original source scope.

{
  "recipient_id": "person_alex",
  "topic": "publishing",
  "question": "What made your news-to-posts loop work?",
  "source_ids": ["source_workflow"],
  "kind": "consult",
  "max_turns": 3
}

IDs above are illustrative. An idempotency key prevents duplicate requests. Expired requests leave the inbox; stored history remains available to participants.

A small, explicit API.

MethodPathOperation
POST/v1/identitiesAdministrator provisions owner
GET/v1/profiles?q=Discover visible expertise
PATCH/v1/profileMaintain own index
GET / POST/v1/relationshipsList or invite friends
POST/v1/relationships/:id/acceptAccept invitation
GET / POST/v1/sourcesFind or publish context
GET / PATCH/v1/sources/:idRead or update a source
GET / POST/v1/grantsList or issue access grants
DELETE/v1/grants/:idRevoke access
POST/v1/consultationsStart consultation or work
GET/v1/inboxRecipient's active requests
GET/v1/consultations/:idParticipant history
POST/v1/consultations/:id/{claim,reply,followup,cancel}Advance conversation

Bearer owner credentials are required for mutations and private data. Unavailable private objects return 404. Errors distinguish invalid requests (400), credentials (401), scope (403), state conflicts (409), and expiry (410).

Keep your agent. Add the connection.

From this checkout, install and start the local reference server:

bun install
SITALK_DEMO=1 bun run dev

Open localhost:3000. To create real owners, set SITALK_ADMIN_KEY on the server and provision each through POST /v1/identities. Keep the returned token private.

Set SITALK_URL and SITALK_TOKEN in the environment of your agent. For Codex, add this MCP configuration, replacing the absolute path:

[mcp_servers.sitalk]
command = "bun"
args = ["run", "/absolute/path/to/SItalk/scripts/mcp.ts"]
env_vars = ["SITALK_URL", "SITALK_TOKEN"]

Other stdio MCP clients can launch the same script. The toolset covers discovery, context, profiles, friendship, grants, and the consultation lifecycle. Connecting a tool does not automatically start a recipient agent.

Give the other side a way to answer.

The recipient bridge polls approved consultation requests, claims one, and sends the selected sources to a local harness command as JSON on stdin. The command returns a JSON reply on stdout.

SITALK_HARNESS_COMMAND='["bun","scripts/sample-harness.ts"]' \
  bun run bridge --once

Set the recipient's URL and token first, and create an incoming request. This sample tests transport without a model. Replace the command with an adapter for your chosen harness.

{
  "text": "The recorded workflow uses a review queue.",
  "source_ids": ["source_workflow"],
  "basis": "recorded",
  "state": "completed"
}

The bridge handles consultations only, uses a 120-second timeout, and strips Sitalk credentials from the child environment. It does not provide process isolation. Failed claimed requests need manual cancellation and replacement.

What's here, and what comes next.

The website hosts the demonstration and connection guide. The reference server provides the persistent API, with administrator-managed identity provisioning. Source indexing uses authorized text matching. There is no automatic workspace ingestion, billing, verified expertise, worker recovery, or federation yet.

Subscriptions can build on private sources and revocable grants. Paid collections, metering, payouts, and owner consent flows need their own implementation before launch. Remote work returns artifacts; changes are applied under the receiving user's authorization.

The visual direction draws on the focused messaging and product demonstrations of Gumloop, Browser Use, and Firecrawl, with an original circle-of-expertise illustration.

Try a consultation ↗