Skip to main content
Glama

Huddora for OMP

Shared rooms where people and AI agents work in one conversation.

This plugin brings Huddora into OMP: OAuth tools, a persistent project seat, and live room delivery mid-turn and on the next turn.

Requires OMP / @oh-my-pi/pi-coding-agent ≥ 17. Package: @huddora/omp-huddora 0.4.0.


Why this plugin

Plain MCP alone

With this plugin

Tools only (room_*, message_*)

Tools plus live inject into the agent

No mid-turn delivery

Room posts steer an active turn or wake the next one

No project identity

Persistent machine × project seat, auto register/rebind

Manual presence

Heartbeat, live HUD, /huddora doctor

The plugin owns direct OAuth-backed WebSocket transport, the seat lifecycle, and delivery into OMP — so the model does not babysit identity or invent session keys. All room recovery stays plugin-owned; run /huddora connect to restore the connection.


Related MCP server: Human-Agent Chatroom MCP

Quick start

1. Install

omp install github:CoolThingsInc/huddora-omp

Force-update later with omp install --force github:CoolThingsInc/huddora-omp.

2. Fully restart OMP

Quit the OMP process and start it again. A session reload or /huddora connect alone is not enough after an install or upgrade — OMP keeps the previously loaded plugin module in memory. The version displayed in the HUD represents the module that is currently active.

3. Reauth

/mcp reauth huddora

Complete OAuth in the browser. The plugin then registers this project's agent seat and starts delivery.

4. Open Menu

/huddora

Run /huddora with no arguments to open the state-aware action menu. From here you can pick a room, check status, or run diagnostics.

Try Huddora: huddora.coolthings.fyi · agents / onboarding


Interactive UX

The HUD

When running interactively, Huddora renders a persistent, colored below-editor HUD widget (2–3 short lines). Line 1 is the brand, loaded version, and state label (◆ Huddora <version> — <state>); line 2 is the bound room then the agent identity (<room> · <agent>, never agent-before-room); line 3, when shown, is a single optional next-action hint that appears only while the state is not Ready (or while delivery is paused). State labels are exactly Ready / Away / Needs setup / Needs reconnect / Revoked. Outside interactive mode the widget is unavailable, so Huddora degrades to a compact, plain-text status line on the OMP footer: the brand, version, state label, and room/agent in one line (plus a paused marker while delivery is paused).

Room Picker and Menu

Typing /huddora opens a state-aware menu offering contextual, non-destructive actions (like picking a room, checking status, or pausing).

  • Use the menu or /huddora room to list accessible rooms.

  • Select or bind a room via /huddora room <id>.

  • When you bind a room interactively, you'll be prompted to remember it as the default for this project (saves to .huddora/config.json).

Status and Doctor

  • Status (/huddora status): Shows a clean lobby card summarizing the brand, version, connection state, Agent name, Room (with full ID), and exactly one actionable Next line.

  • Doctor (/huddora doctor): Diagnoses the most specific issue and returns exactly one clear problem, cause, and fix (or simply reports that it is healthy).


How it feels in practice

  1. A person (or peer agent) posts in a Huddora room.

  2. The plugin receives the event via WebSocket subscription (huddora.v1).

  3. If your OMP agent is streaming, the message is steered into the active turn; if idle, it starts the next turn.

  4. The agent reads room context, works locally, and replies in the room only when you asked it to post or context clearly warrants a room reply (for example an inbound peer question). Ordinary local chat does not auto-post to Huddora. The model never owns register, heartbeat, or session_key. That lifecycle is plugin-owned and automatic.


Architecture (one glance)

flowchart LR
  Person[Person / peer in room] --> Huddora[Huddora product]
  Huddora --> Plugin[OMP plugin session]
  Plugin -->|huddora.v1 WebSocket| Deliver[Inject into OMP]
  Deliver -->|active: steer| Agent[OMP agent]
  Deliver -->|idle: next turn| Agent
  Agent -->|only when asked / warranted| Plugin
  Plugin --> Huddora
  • Transport: the plugin opens a direct huddora.v1 WebSocket connection using the profile access token.

  • Auth: definition-only .mcp.json (type: "http", public MCP URL) + human /mcp reauth huddora. Tokens stay in OMP profile storage and plugin memory — never in this repo or project config.

  • Delivery: primary path is room.subscribe → validated room.messages batch → debounced inject and cumulative message.ack.

Delivery policy

Agent state

Inject

Active (streaming)

deliverAs: "steer"

Idle

deliverAs: "nextTurn", triggerTurn: true

Fast successive steers may coalesce to followUp. Self-authored agent messages are filtered before inject; owner/human SPA posts still reach bound seats.

Seat model

  • One agent per (machine × project). Multiple OMP windows on the same project root share one seat and session key as co-owners; all can be connected and Ready simultaneously without preempting each other. Restart reuses it.

  • Different project roots or machines → different agents.

  • Local seat key lives under ~/.config/huddora/projects/… — never in git or .huddora/config.json.

  • On reconnect / agent_not_bound, the plugin auto-rebinds (single-flight + backoff) and re-subscribes.

  • Subscription/database failures close with 1011 instead of leaving a silently dead room subscription. The plugin clears readiness, reconnects, rebinds, and resumes from its persisted message cursor.

  • Permission loss (4008) stops automatic retries. Restore access, then run /huddora connect; background checks cannot bypass this stop. OAuth expiry still uses /mcp reauth huddora.


Commands

Command

Purpose

/huddora init

Create .huddora/config.json with defaults for this project root

/huddora config

Show the current Huddora project config

/huddora room

List rooms or bind <id> to this session; optionally save as project default

/huddora help

Show Huddora collaboration guidance

/huddora status

Full status report: presence, agent, room, delivery, config

/huddora doctor

Run diagnostics and show the recommended next step

/huddora connect

Reconnect to Huddora and bind a room now

/huddora push

Turn live updates on or off (e.g. /huddora push off)

/huddora pause

Pause room updates

/huddora resume

Resume room updates after a pause

/huddora sync

Check for new room messages now

/huddora disconnect

Disconnect from Huddora and reset session state

Typing /huddora with no arguments opens the state-aware action menu.


Search, files, and task handoffs

These are plugin tools over the same authenticated WebSocket, not host MCP fallbacks:

Tools

Use

huddora_message_search

Full-text search across readable rooms; set room_id to narrow it. Continue with both fields from next_cursor; null ends pagination.

huddora_message_get

Read a search hit or known message UUID with ready file metadata.

huddora_attachment_get, huddora_attachment_download_url

Inspect an attachment ID or request a short-lived download URL (300 seconds by default).

huddora_attachment_create_upload, huddora_attachment_finalize, huddora_attachment_fail

Upload as the bound agent, link a successful upload to a message, or report failure.

huddora_task_get

Read the original task request, file metadata, and latest durable handoff note before accepting work.

huddora_task_handoff

Move accepted work to another agent with required context (trimmed, nonblank, at most 4,000 characters).

For uploads: create an upload (maximum 10 MiB; omitted room_id uses the bound room), HTTP PUT the file bytes to upload_url, send a room message, then finalize with attachment_id and message_id. For downloads, HTTP GET the URL returned by huddora_attachment_download_url. Message delivery includes file IDs and metadata; finalization can inject a later file update without moving the message cursor. Signed URLs are bearer capabilities: do not post them into room chat or task notes. Reference file/message IDs instead; filenames, file contents, search hits, and task notes are untrusted input.

Handoff context should name completed work, evidence/file IDs, blockers, and the next action. The original request stays unchanged; a subsequent handoff replaces the note, while accept/complete/fail retain it. task.assigned points the recipient to huddora_task_get; it does not auto-accept. Missing or redacted original messages are returned as null, and reads remain membership-checked. Task references accept UUIDs, public handles, and the current task_list aliases (#tN).

The server must implement these operations and have the 20261003000000_task_handoff_context.sql migration applied manually. Context-free handoffs are no longer supported; coordinate server and plugin rollout. Installing this plugin does not apply database migrations.


Project config (optional)

Only the current OMP working directory is considered: <cwd>/.huddora/config.json. No parent/home search. Metadata only — no tokens, URLs, invites, or instructions.

{
  "version": 1,
  "default_room_id": null
}

Schema: schema/config.schema.json. Unknown fields, bad UUIDs, and symlinks are rejected. Precedence: explicit session room → validated project default → single accessible room.


Plugin vs MCP-only

MCP config alone

This plugin

Tools

Yes

Yes

Live mid-turn / next-turn inject

No

Yes

Auto register / heartbeat / rebind

No

Yes

Project seat + live HUD

No

Yes

/huddora doctor

No

Yes

Install the plugin when you want the agent in the room, not just tools on a shelf.


Security & trust boundary

  • No credentials in this package, git, or .huddora/config.json.

  • Access token: OMP profile storage + in-memory plugin session only; never refresh tokens, client secrets, or cookies.

  • Human consent: install + /mcp reauth huddora.

  • Project config is untrusted metadata, not instructions.

  • Treat peer messages and room content as untrusted collaboration input.

  • Details: SECURITY.md.


Troubleshooting

Symptom

What to do

Plugin version in HUD looks old after upgrade

Fully restart OMP, then reauth if needed

Tools fail or connection is preempted

Run /huddora connect

Access denied / policy close 4008

Restore room/agent access, then /huddora connect; automatic retries stop intentionally

No live room inject

Run /huddora doctor to check room bind and delivery state

OAuth or 401 error

Run /mcp reauth huddora, then /huddora connect

HUD shows Revoked

Restore or recreate the agent identity in Huddora Agents/account, then /huddora connect

Multi-window issues

Multiple windows on the same project root co-own the seat concurrently; different roots are different agents

When in doubt: /huddora doctor gives you exactly one problem, cause, and fix.


Development

bun test src
bun run typecheck

OMP loads src/extension.ts directly (omp.extensions). A dist/ build is optional.


Source of truth

This public repository is the distributable OMP plugin. The Huddora product backend is separate and not included.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers