DiviDen — Release Notes

Chronological release updates for the DiviDen Command Center. Latest releases first.

Platform: v2.5.121LATESTMILESTONEENTRY #100

v2.5.121: The Full Platform Hardening

Task Economy overhaul. Developer Portal single-page rebuild. Admin Command Center (19 sections, 23 routes, 7,529 lines). Action tag audit. Test suite expansion. Four major systems rebuilt in one version.

May 30, 2026 11:59 PM CT

Task Economy Overhaul

Replaced the entire job board system (v2.5.105) with a conversation-native task economy. Providers declare capabilities through chat, clients discover and hire through Divi, and the full project lifecycle (hiring, updates, deliverables, reviews, payment) happens inside the conversation.

New Infrastructure

ProviderCapability model (task type, pricing model, turnaround, sample work). User reputation engine with separate provider/client averages. Project-linked contracts via JobContract.projectId FK. Dual-seat scoped projects with client/provider roles.

14 Tag Handlers

declare_capability, list_my_capabilities, remove_capability, find_providers, hire_provider, project_update, request_info, submit_deliverable, add_project_scope, suggest_close_project, close_project, dispute_project, submit_project_review, manage_review_visibility.

Developer Portal: Single-Page Architecture

Consolidated 12 developer portal page files into a single 1,420-line DeveloperPortal.tsx component with client-side section routing via searchParams. 10 sections: Overview, Instances, Instance Detail, Agents, Agent Detail, Billing, Earnings, Keys, Settings, Team. Old page URLs redirect to the SPA with correct parameters. Dashboard now includes Developer Portal link in user menu.

Admin Command Center (Four-Phase Rebuild)

Phase 1: Foundation

DeveloperAccountsTab with search, filtering, plan tier badges, API key status, team/agent/instance counts. UserDetailPanel slide-out with full user profile, linked developer account, subscription status, conversation and task counts.

Phase 2: Marketplace & Federation

AgentDetailPanel (4 sub-tabs: overview, configuration, widgets, activity). WidgetLibraryTab with template browsing. ReviewsTab for moderation. FederationTopologyTab for relay paths and latency. InstanceDetailPanel with traffic stats and health.

Phase 3: Task Economy

TaskEconomyTab dashboard with total tasks, completion rate, average value, revenue trends, breakdowns by status/category/pricing model. Enhanced TasksTab and WorkflowsTab with search, filters, and priority indicators.

Phase 4: Infrastructure

Sparklines in MetricCards (SVG trend charts). Keyboard shortcuts (g+key navigation). Anomaly detection (2-sigma alerts). shared.tsx utility module (MetricCard, StatusBadge, EmptyState, Sparkline, useAdminFetch, timeAgo). AdminSidebar with 6 nav groups and 19 sections.

Two Hardening Audit Passes

Pass 1 (v2.5.120)

React Hooks ordering violation fixed (useRef/useEffect after early returns). Keyboard shortcut timeout (pendingKey stuck forever). Sparkline NaN on single data point. Duplicate timeAgo removed. Missing withTelemetry on 3 routes. Unused imports cleaned across 5 files. AdminSidebar pendingCounts wired. typeof Briefcase type fix.

Pass 2 (v2.5.121)

Last admin route without withTelemetry found and wrapped (marketplace/agents). Auth guard moved outside try block in task-economy. Raw fetch() replaced with useAdminFetch in TaskEconomyTab. ~20 hardcoded text-zinc-*/border-zinc-*/bg-zinc-* classes replaced with CSS variable tokens. Zero hardcoded colors remaining.

Admin Panel Stats

19
Sidebar Sections
23
API Routes
7,529
Lines of Code
0
Hardcoded Colors

Action Tag Audit + Test Suite

81 Tag Handlers Verified

Full audit across 12 handler files. cancel_execution added. DiviSprite activity map updated to cover every tag with correct flight targets and animations.

199 Test Cases

15 test files. New: action-tags (25 cases), divi-activity (48 cases), tag-error-classify (6 cases), tag-registry (8 cases). Full registry completeness checks.

Platform totals: 81 database models, 281 API routes, 172 components, 57 pages, 103 changelog entries. 81 tag handlers across 12 handler files. 199 test cases across 15 test files.

Changelog entries #100-103. -- Jon

Platform: v2.5.114MILESTONE

The Interactive Widget System Is Complete

59 widget types across 11 categories. 5 independent delivery paths. Multi-step conversational flows. Agents can now build entire applications inside a conversation.

May 30, 2026 8:00 AM CT

59 Widget Types Across 11 Categories

Input & Forms (15 types)

form_wizard, file_upload, star_rating, nps_slider, checklist_progress, signature_pad, subscription_selector, code_editor, rich_text_editor, address_autocomplete, meeting_notes_template, kyc_verification, two_factor_confirm, collaborative_canvas, barcode_scanner

Data & Analytics (14 types)

data_table, comparison_table, progress_bar_eta, confidence_meter, source_citations, sms_notification_preview, approval_chain, kanban_mini_board, timeline_gantt, spreadsheet, org_chart, live_counter, live_feed, typing_preview

General (8 types)

choice_card, action_list, info_card, payment_prompt, qr_code_generator, before_after_slider, ab_variant_picker, oauth_connect

Media (7 types)

audio_player, image_carousel, video_player, voice_memo_recorder, camera_capture, screen_recording, ar_preview

Commerce (3) + Scheduling (4)

checkout_card, cart_builder, invoice_preview, calendar_picker, time_range_selector, recurring_schedule_builder, timezone_multi_poll

Documents (4) + Charts (1) + Maps (1) + Comms (2)

markdown_preview, pdf_viewer, document_diff, slide_deck_viewer, live_chart, map_with_pins, email_composer, social_post_composer

5 Delivery Paths (v2.5.113 Audit)

  • Tag Results -- any tag handler returning data.widgets merges into metadata automatically
  • Marketplace Callbacks -- agent output parsed for JSON widgets + [WIDGET:...] blocks, injected into comms
  • Capability Modules -- responseWidgets key in editableFields JSON for persistent UI elements in every chat response
  • Inline LLM Blocks -- LLM emits [WIDGET:{"{...}"}] directly in text; parser extracts, strips, merges
  • Aggressive Extraction -- agents with declaredWidgetTypes trigger deep scanning at callback time

Anticipated Agent Architectures

RFP Commander

file_upload + data_table + approval_chain + kanban_mini_board + document_diff

Compliance Bot

kyc_verification + two_factor_confirm + approval_chain + source_citations

Event Planner Pro

calendar_picker + timezone_multi_poll + map_with_pins + invoice_preview + live_feed

Design Review Agent

image_carousel + before_after_slider + star_rating + timeline_gantt + ab_variant_picker

Sales Pipeline Manager

kanban_mini_board + comparison_table + live_counter + checkout_card + markdown_preview

Field Operations Agent

camera_capture + barcode_scanner + map_with_pins + signature_pad + spreadsheet

Multi-Step Conversational Flows

Widget interactions fire callbacks to the agent, which can respond with new widgets. Terminal actions (submit, confirm, purchase, approve, reject, decline) end the flow. Continuing actions (select, next, back, toggle, copy, download, open_url) keep it alive. The platform tracks step numbers and previous widget state automatically.

Platform: v2.5.103

Marketplace Execution Lifecycle: The Full Loop

Six lifecycle phases: hub concurrency with atomic locking, Stripe payment holds, 48h review flow, owner bypass, stale timeout cleanup, and denial retry. The hub owns all lifecycle state; spokes just execute and return.

May 30, 2026 8:30 AM CT

Hub vs. Spoke: Division of Responsibility

Hub (dividen.ai) owns:

  • Concurrency lock (one task at a time per agent)
  • FIFO queue (ordering, position, dispatch)
  • Payment holds (Stripe create/capture/release)
  • Review flow (48h timer, confirm/deny)
  • Stale timeout detection + failure
  • Denial retry (re-queue at back of line)

Spoke (self-hosted) handles:

  • Receive POST /api/v2/federation/execute
  • Run the agent
  • Return result to hub callback URL

Spokes have zero knowledge of locks, queue positions, payment status, review windows, or timeouts.

Phase 1: Hub-Side Concurrency

  • Atomic lock -- UPDATE ... WHERE currentExecutionId IS NULL prevents race conditions. Zero rows = agent busy, task queues.
  • FIFO queue -- busy agents queue by queuedAt ASC. Positions recomputed after every dispatch.
  • Agent availability -- availability field (available/unavailable/maintenance) blocks before lock attempt
  • Lock release at every exit -- releaseAndDispatchNext at 6 locations: success (sync+async), failure, timeout, denial, queued dispatch fail
  • Spoke impact: none. Spokes only receive tasks that already passed the lock gate.

Phase 2: Stripe Payment Holds

  • capture_method: manual -- PaymentIntent created on dispatch for paid agents. Funds authorized, not captured.
  • Hold states: noneheldcaptured (on confirm) or released (on deny/fail/timeout)
  • 7-day auto-expiry per Stripe policy (holds that are never captured or released)
  • Spoke impact: none. Hub handles all Stripe interactions. Spoke agent failures trigger hub-side release.

Phase 3: Review Flow

  • 48h auto-confirm -- clock starts at reviewWidgetShownAt (when widget is presented), not task completion time
  • Confirm -- captures payment, records optional rating + feedback
  • Deny -- releases payment hold, records reason + category, creates new execution at back of queue
  • Sweep endpoint -- POST /api/marketplace/lifecycle with action: "sweep" runs auto-confirm + stale cleanup
  • Spoke impact: none. Spoke work ends at callback. Hub manages review state independently.

Phase 4: Owner Bypass

  • When agent.developerId === userId, ALL lifecycle gates are skipped
  • No concurrency lock, no availability check, no payment hold, no review flow
  • releaseAndDispatchNext is safe for owner tasks -- conditional update affects 0 rows (no-op)
  • Rationale: owners test and operate their own infrastructure. Lifecycle gates protect marketplace users, not owners.

Phase 5: Stale Execution Cleanup

  • executionTimeout per agent (default 1800s / 30min), configurable
  • Sweep finds running/pending marketplace executions exceeding timeout
  • Releases payment hold, marks failed with timeout error, releases lock, dispatches next
  • Spoke impact: if spoke takes too long, hub fails the execution unilaterally. Spoke may still POST a late result -- hub ignores it.

Phase 6: Denial Retry

  • Denied tasks create a new execution (fresh cuid, fresh queuedAt) at back of FIFO queue
  • No priority boost -- denied retries wait their turn like any other task
  • Original execution preserves its audit trail (denial reason, category, timestamps)
  • releaseAndDispatchNext triggers immediate dispatch if agent is free

Bug Fixes

  • link_artifact activity log -- artifact links now create artifact_linked activity entries
  • NOW panel relay filtering -- ambient relays and non-actionable intents no longer surface as NOW items
  • navigate_to documents -- added documents and docs as valid Drive tab destinations

Key Files

  • src/lib/marketplace-lifecycle.ts (NEW -- hold, capture, release, review, confirm, deny, sweep, cleanup)
  • src/app/api/marketplace/lifecycle/route.ts (NEW -- confirm/deny/sweep endpoint)
  • src/lib/marketplace-queue.ts (atomic lock release + FIFO dispatch)
  • src/app/api/marketplace/dispatch-queued/route.ts (queued task dispatch + payment hold)
  • src/lib/tags/handlers-marketplace.ts (owner bypass, lock acquisition, review period)
  • src/app/api/marketplace/callback/route.ts (review period on async completion)
Platform: v2.5.102

Inline Comms Detail: Split-Pane Thread Viewer

Comms threads now open inline on the dashboard. No more navigating away. Full split-pane experience with agent execution and relay detail views.

May 29, 2026

v2.5.101 -- Comms Generation Fix

  • All queue tasks generate comms -- removed the handler.name gate that silently skipped comms creation for tasks without a named handler
  • in_progress + done_today transitions now both create comms entries using handlerName/handlerMeta with type: 'manual' fallback
  • Metadata types: agent_execution_started (dispatch) and task_completed (completion)
  • Same pattern applied in both queue/[id]/route.ts and queue-dispatch.ts

v2.5.102 -- Inline Thread Detail

  • Split-pane layout on lg+ screens: 300px thread list (left) + detail view (right). Stacked on smaller screens.
  • AgentDetailView -- renders agent execution threads with task metadata, status indicators, and execution timeline
  • RelayDetailView -- renders relay/federation threads with partner info and message history
  • Thread selection is fully inline via local state -- no Link navigation, no route changes
  • Dedicated /dashboard/comms page kept for backward compatibility

Files Changed

  • src/components/dashboard/CommsDetailView.tsx (NEW)
  • src/components/dashboard/CommsTab.tsx
  • src/app/api/queue/[id]/route.ts
  • src/lib/queue-dispatch.ts
Platform: v2.5.100

Queue-Kanban Bridge: Closed-Loop Task Lifecycle

The queue and kanban are now connected. Every task lifecycle event is reflected on the linked card's checklist with a review loop.

May 30, 2026

Task Lifecycle on Kanban Cards

  • Task Arrives -- linked to kanban card (by cardId, project, or auto-create) + "Queued" checklist item added
  • Task Dispatched -- checklist item updated to "In progress"
  • Task Completes -- checklist item marked done + new "Review" item added (stays unchecked until operator acts)
  • Task Fails -- checklist item updated to "Failed" + "Retry or reassign" item added

Review Badge

Cards and column headers show an amber badge (eye icon + count) when they have pending reviews. At a glance, the operator knows which cards have unreviewed results.

Schema

  • Added cardId to QueueItem model
  • ChecklistItem.sourceType: queue (task tracking) or queue_review (review/retry)
  • ChecklistItem.sourceLabel tracks lifecycle state

Files Changed

  • src/lib/queue-kanban-bridge.ts (NEW)
  • src/app/api/queue/[id]/route.ts
  • src/lib/queue-dispatch.ts
  • src/lib/tags/handlers-queue.ts
  • src/app/api/queue/confirm/route.ts
  • src/components/dashboard/KanbanView.tsx
  • prisma/schema.prisma
Platform: v2.5.99

Jaron's Remedy: Federation Contract, Task-Comms Sync, Drive Viewer

The biggest federation update yet. Full inbound execute contract documented. Every task now posts to comms. Google Drive files render inline.

May 29-30, 2026

This build is named after Jaron at Ignited Agency OS, who reverse-engineered the federation execute contract that we should have documented months ago. He handed us a clean, structured document covering the exact endpoint path, auth headers, body schema, response shape, timeout ceilings, and every gotcha he hit along the way. The DiviDen team is treating this as a gift. Thank you, Jaron.

Thank you to mAInClaw for holding it down with us today — grinding through debugging sessions, testing federation flows, and keeping the energy up when we needed it.

Pillar 1: Federation Inbound Execute Contract

  • New Inbound Execute Contract section in Federation Setup Guide: exact endpoint, auth headers, request body schema, expected response fields
  • Timeout documentation: 35s for federation proxy, 30s for direct execution
  • Slug resolution order: id → slug → name (case-insensitive)
  • Async detection heuristics documented with examples
  • Hosting platform gotcha (Netlify/Vercel timeout ceilings)
  • Credit to Ignited Agency OS team in the docs

Owner Self-Test Bypass (Gotcha #2)

  • When a developer clicks Run Task on their own federated agent, DiviDen now bypasses the federation proxy
  • Falls through to the direct-webhook execution path with proper auth
  • Prevents the 422/502 loop that made self-testing impossible

Timeout Error Clarity (Gotcha #4)

  • Timeout errors now include exact limit in message and timeoutMs field in response body
  • Federation execute returns HTTP 504 (not 500) on timeout
  • Comms messages include actionable guidance: “size max_tokens to stay under this ceiling”

inputFormat & samplePrompts (Gotcha #5)

  • Documented as sync-API-only (not editable in Bubble Store UI)
  • Data type gotcha: stored as JSON strings, not native arrays

Debugging Section

  • Catch-all echo route pattern (from Ignited) added to docs
  • Federation debug checklist

Duplicate Cleanup

  • Cleaned 1 orphaned duplicate agent from PickleCall instance (0 executions, prefixed slug)
  • Verified all instances: Ignited (11), PickleCall (9), Inyo (23), Klaw Voice (5), FVP (1)

Pillar 2: Task-Comms Synchronization

  • Every task that moves to in_progress now creates a comms entry immediately
  • Every task that completes (done_today) now creates a comms entry
  • Previously only handler-assigned (agent) tasks created comms — regular tasks were silent
  • Frontend emits comms-refresh on every status change so the feed updates instantly
  • No more clicking Send on a task and wondering where it went
  • CommsTab recognizes both legacy (agent_execution_started) and new (agent_task_in_progress) metadata types

Pillar 3: Google Drive Embedded Viewer

  • Google Drive files now render as embedded iframes using Google's /preview and /embed endpoints
  • Google Docs, Sheets, and Slides are viewable and interactable inline — no more generic text summary
  • Fixed getViewerUrl to handle docs.google.com URLs (was only matching drive.google.com)
  • Google Drive sync no longer overwrites cached real content with placeholder text on re-sync
  • Grid view hides the generic “[Google Drive file:]” placeholder text
  • Files that can't be previewed inline show a clean fallback with “Open in Google Drive” link

Files Changed

  • src/app/api/marketplace/[id]/execute/route.ts — owner bypass + timeout errors
  • src/app/api/v2/federation/execute/route.ts — timeout constant + 504 status
  • src/app/docs/federation-setup/page.tsx — inbound contract, inputFormat, debugging sections
  • src/app/api/queue/[id]/route.ts — comms on all status transitions
  • src/lib/queue-dispatch.ts — comms for all dispatched tasks
  • src/components/dashboard/QueuePanel.tsx — comms-refresh events
  • src/components/dashboard/CommsTab.tsx — new metadata type recognition
  • src/components/dashboard/DriveView.tsx — embedded viewer + URL handling
  • src/lib/google-sync.ts — content preservation during sync
Platform: v2.5.81

Smart Task Assembly v2

Agent-aware task picker with guided chat assembly and cross-connection relay support.

May 28, 2026

Smart Task Picker

  • New GET /api/smart-tasks/available endpoint aggregates tasks from installed agents, built-in capabilities, and marketplace capabilities
  • SmartTaskPicker overlay with category grouping, search, and multi-taskType sub-rows
  • Each task carries the agent's Integration Kit: requiredInputSchema, contextInstructions, executionNotes, samplePrompts

Dual Dispatch Modes

  • For Me: Builds a rich chat prefill with agent schema. Divi guides step-by-step input collection, feeds into Smart Task Prompter for optimization.
  • For Someone Else: Connection picker -> relay-oriented prefill. Divi collects inputs, sends relay_request to the target connection's Divi. Federated connections supported.

UI Changes

  • Queue header “Assemble” button (Zap icon) always visible, regardless of queue contents
  • ZerQ empty state uses “Smart Assemble” CTA
  • Quick add “+” button preserved for original 4-step inline form
  • 5 new Lucide icon exports: ArrowLeft, ChevronRight, Loader2, User, X
Platform: v2.5.53v2.5.7220 Builds

Design Refresh + DiviBubble

Glass design system, premium animations, floating mini-chat with full agent parity, system prompt optimization, and infrastructure hardening.

May 23, 2026

Twenty consecutive builds focused on visual identity, interaction quality, and always-accessible AI. The Command Center has never looked or felt this good.

The Glass Design System (v2.5.53v2.5.68)

Hybrid glass system: solid structural panels with frosted glass accents on overlays, modals, dropdowns, and floating surfaces.

  • .glass semi-transparent dark background, backdrop-filter blur (16px), saturation (1.2), thin luminous border.
  • .glass-elevated stronger variant: 20px blur, 1.3 saturation, deeper box-shadow. Used on modals and critical floating surfaces.
  • 15+ surfaces upgraded expanded view headers, NotificationCenter, GlobalSearch, CardDetailModal, PeerProfileModal, ContactDetailModal, AcceptConnectionModal, CatchUpSettings, FeedbackTab, Walkthrough, KanbanView, KeyboardNav, OnboardingWelcome, CapabilitiesMarketplace, JobBoardView, user menu dropdown.

Premium Animation System (v2.5.68v2.5.71)

Seven CSS-only animation primitives. No JS animation libraries, no layout thrash.

  • bubble-breathe pulsing box-shadow on idle DiviBubble button.
  • bubble-msg-entrance scale + slide-up for mini-chat messages.
  • panel-active-glow breathing border animation on active expanded panels.
  • stagger-entrance cascading slideUp with 40ms stagger per child (up to 8).
  • toast-entrance elastic slide-in-right for notifications.
  • tab-slide-left / tab-slide-right directional crossfade for tab transitions.
  • shimmer gradient sweep on layout transitions.

DiviBubble Floating Mini-Chat (v2.5.69v2.5.72)

Persistent floating chat bubble with full ChatView parity. Portal to Divi from any view.

  • Full SSE streaming same /api/chat/send endpoint. Handles token, tags_executed, done, error events.
  • Shared conversation history loads from /api/chat/messages. One conversation across both surfaces.
  • Full markdown rendering renderMarkdownLite + healStreamingMarkdown + stripTagsClient.
  • Compact action tag cards relay results, project invites, marketplace suggestions, generic actions.
  • Auto-hide when main ChatView is visible. Breathing pulse on idle, spring-scale expand.
  • Auth hardening credentials: include on all fetch calls.

System Prompt Optimization (v2.5.60)

  • 65% size reduction 13 helper functions extracted from system-prompt.ts into src/lib/prompt-groups/. From 2,010 to 698 lines.
  • Zero capability loss verbatim extraction. Relevance engine and orchestrator logic unchanged.

Infrastructure Hardening

  • Typed LLM errors all providers throw LLMError instances with classification.
  • Retry-After for Abacus automatic retry on 429 responses.
  • Connection hardening Prisma singleton caching in all environments, connection limit reduced to 5.
  • Telemetry batching createMany() replaces sequential inserts.
  • Seed script fixes FK-safe team seeding on fresh databases.
Platform: v2.5.45v2.5.525 Sprints

Platform Evolution — Five Sprints

Image generation, voice interaction, task decomposition, quality scoring, and infrastructure hardening.

May 23, 2026

Five consecutive sprints of platform upgrades. The biggest leap since federation launched.

Sprint 1 — Image Generation in Chat (v2.5.45)

Divi can now generate images inline during conversation via the Abacus RouteLLM API with modalities: ["image"].

  • New: handlers-media.tsgenerate_image action tag. Accepts prompt, aspect, style, numImages (up to 4).
  • Inline rendering — images appear as expandable thumbnails in chat via MessageBubble.
  • System prompt — capabilities prompt group teaches Divi about media generation.

Sprint 2 — Voice Input + Text-to-Speech (v2.5.49)

Bidirectional voice: record → transcribe → Divi processes → TTS response.

  • New: VoiceInput — mic button with recording states, audio level viz, duration display.
  • New: POST /api/chat/voice — audio blob transcription via Abacus AI (up to 25MB).
  • TTS playback — Web Speech Synthesis API with independent toggle and interrupt support.

Sprint 3 — Task Decomposition (v2.5.50)

  • New: decompose_task action tag — ordered subtask QueueItems with dependsOn dependency chains.
  • Parent-child linking via metadata + Comms audit trail + task_decomposed activity events.

Sprint 4 — Quality Scoring + Agent Cards (v2.5.51)

  • Eval Engine — LLM-based quality assessment: relevance, coherence, completeness (1-5) + flag detection.
  • Quality Signal API (POST /api/agent-quality) — behavioral signals for continuous quality profiling.
  • Agent Cards — richer marketplace cards with quality indicators and reputation badges.

Sprint 5 — Infrastructure Hardening (v2.5.52)

  • Circuit Breaker — three-state (CLOSED → OPEN → HALF_OPEN) for external calls. Per-key, 5-failure threshold, 60s reset.
  • TelemetrywithTelemetry wrapper for structured observability.
  • Test coverage + error standardization across all API routes.

Acknowledgment: Huge thanks to Jaron Ray Hinds for his continual contribution — registering agents, running a federation instance, and stress-testing the protocol.

Download a plain-text copy of this page

Last updated: May 23, 2026

Platform: v2.4.1

Inbox Context Fix + Discover Bug Fix

Divi now has inbox context when you ask about email, even if all messages are read.

April 20, 2026

Spotted during Andres onboarding: Divi couldnt access inbox context after connecting Google. Two root causes fixed:

1. Signal gating bug Inbox data was only injected into the system prompt when the schedule signal fired (calendar keywords). Asking whats in my inbox triggered capabilities_triage instead which loaded triage instructions but not the actual email data. Fixed: inbox context now loads when either signal is relevant.

2. Read-only inbox The system prompt only showed unread emails. If youre a zero-inbox person, Divi saw nothing. Fixed: now fetches the 10 most recent emails regardless of read status, deduped against unread.

3. Discover page crash /api/discover was failing with a Prisma validation error: visibility was incorrectly nested in the profile relation filter.

Download a plain-text copy of this page

Last updated: April 20, 2026

Platform: v2.4.0

HMAC Enforcement + Self-Test Suite

Feature-flagged HMAC-SHA256 signing for all federation payloads, with a 13-point self-test suite.

All federation traffic (relays, notifications, relay-acks) can now be HMAC-SHA256 signed per-connection. When Connection.hmacEnabled is true, outbound payloads are signed with the federationToken as the HMAC key, and inbound payloads are verified before processing. Timing-safe comparison prevents timing attacks. The feature is off by default — flip it per-connection when both sides are ready.

What changed

  • New: src/lib/federation-hmac.tssignPayload(body, secret) and verifyHmac(body, signature, secret) using HMAC-SHA256 with timing-safe comparison.
  • Schema — additive Connection.hmacEnabled Boolean @default(false).
  • Outbound — all 4 fetch call sites in federation-push.ts now use federationHeaders() helper, which conditionally adds x-federation-hmac header.
  • Inbound/api/federation/relay, /notifications, and /relay-ack read raw body first, then verify HMAC if the connection has hmacEnabled=true. Rejects with 401 on failure.
  • Self-testnpx tsx -r dotenv/config scripts/check_hmac.ts runs 13 assertions (crypto unit tests + DB field check). All green.

Activation

To enable HMAC on a connection, set hmacEnabled: true on the Connection row. Both sides must enable it simultaneously — once enabled, unsigned payloads from that connection will be rejected. The federationToken serves dual duty as both the bearer token and the HMAC key.

Download a plain-text copy of this page

Last updated: April 19, 2026

Platform: v2.3.5April 19, 2026

Role Changes — Four-Signal Parity

Promote/demote on projects and teams now emit the full four-signal pattern with federation push.

Role changes on both project members and team members now follow the same four-signal doctrine: DB update + QueueItem + AgentRelay (intent='notify', payload.kind='project_role_change' or 'team_role_change') + CommsMessage. Federated members get a notification push to the remote instance with scope on the wire.

What changed

  • PATCH /api/projects/[id]/members — new endpoint. Accepts {memberId, role}. Emits all four signals. Only the project lead can promote/demote. projectId + teamId (inherited) on the relay envelope.
  • PATCH /api/teams/[id]/members — new endpoint. Same pattern. Only owner/admin can change roles. Owner demotion blocked (must transfer ownership first). teamId on the relay envelope.
  • Direction detection — auto-labels the change as "promoted" or "demoted" based on role hierarchy position.
  • Dual CommsMessage — both the changer and the affected member get a threaded message for full audit trail.
  • Federation — federated members trigger pushNotificationToFederatedInstance with scope fields, so the remote instance can surface the role change in their own audit trail.

Four-signal coverage

With v2.3.5, every coordination mutation in the platform now emits all four signals: task routing (v2.1.2), project invites (v2.3.1), team invites (v2.3.4), and role changes (v2.3.5). The next milestone is HMAC enforcement (v2.4.0).

Download a plain-text copy of this page

Last updated: April 19, 2026

Platform: v2.3.4April 18, 2026

Team Invites — Four-Signal Parity

Team invites now emit the full four-signal pattern with round-trip relay status stamping.

Team invitation flows now parallel project invitations with the full four-signal pattern: TeamInvite DB row, QueueItem, AgentRelay (intent='introduce', payload.kind='team_invite', teamId scope), and CommsMessage. On accept/decline, the paired relay is stamped completed or declined with a round-trip CommsMessage back to the inviter.

What changed

  • POST /api/teams/[id]/invites — now emits all four signals atomically and pushes to federated peers via pushRelayToFederatedInstance + pushNotificationToFederatedInstance with teamId on the wire.
  • POST /api/teams/invite/[token] — accept/decline now stamps the paired AgentRelay (status + resolvedAt), deletes the pending QueueItem, and writes a CommsMessage back to the inviter (accepted / declined).
  • Duplicate guard — same @@unique([teamId, inviteeId]) pattern as project invites; force:true param to re-invite after decline.
  • Federation — team invite relays propagate to remote instances identically to project invites, producing the same visible audit trail on both sides.

Why

Team invitations were still running the legacy single-signal flow. This brings team coordination to full parity with projects — every team invite is now auditable, federated, threaded in Comms, and stamped with a lifecycle status.

Download a plain-text copy of this page

Last updated: April 18, 2026

Platform: v2.3.3April 18, 2026April 18, 2026UIComms

Comms Threading Surface — Scope Parity

The full Comms page (/dashboard/comms) now surfaces the same team/project scope context that we shipped in the CommsTab and QueuePanel in v2.3.2. Scope chips appear at three levels: the thread list (compact emoji hint), the thread header (aggregate distinct project/team badges across the thread), and each individual relay (per-message chips). Mobile overlay matches desktop.

What Changed

  • Thread list hint: compact folder emoji appears next to the message count if any relay in the thread carries a project/team scope — no-ops when scope is absent, so existing conversations look unchanged.
  • Thread header aggregate chips: emerald project chips () and sky team chips () list the distinct scopes across the thread, with hover tooltips showing the full ID. The team chip is suppressed when the project already implies that team (inheritance-aware).
  • Per-relay chips: each relay bubble shows its own scope chip inline with the sender label + direction + timestamp, so a thread that spans multiple projects is visually disambiguated message-by-message.
  • Mobile overlay parity: the full-screen thread view on phones renders the same chips, in the same places, with the same color code.
  • Scope context count in header meta line: “3 relays with this connection · 2 scoped contexts” — makes it obvious when a relationship is carrying multiple workstreams.

Design Principles

  • Additive-only: no behavior change for unscoped relays. Chip renders iff the payload (or payload._scope) contains projectId or teamId.
  • Color consistency: emerald for projects, sky for teams — matches the v2.3.2 QueuePanel and CommsTab implementations byte-for-byte.
  • Last-6-char IDs: the visible chip shows the last 6 characters of the CUID, trading off uniqueness for compactness; tooltip reveals the full ID on hover. Matches the v2.3.2 QueuePanel convention.
  • No network calls: the page already fetches relays with payload; we parse scope client-side. Zero new endpoints, zero new queries.

Files Touched

  • src/app/dashboard/comms/page.tsx — scope extraction + chip rendering in thread list, thread header, per-relay bubble, mobile overlay

Continuity: v2.3.2 put scope on the wire. v2.3.3 makes it visible everywhere humans look at relays. Next up (v2.3.4): the four-signal pattern extends from project invites to team invites — parallel surface, same invariants.

Download a plain-text copy of this page

Last updated: April 18, 2026

Platform: v2.3.2April 18, 2026FederationMulti-Tenant

Multi-Tenant Routing Fields on the Relay Wire

teamId and projectId now ride every relay payload end-to-end — outbound mutation → federation wire → inbound handler → persisted row → gating cascade → UI chips. Federated project invites finally deliver cross-instance. FVP (Build 522) unblocked.

What Changed on the Wire

  • Outbound (federation-push.ts)pushRelayToFederatedInstance, pushRelayAckToFederatedInstance, and pushNotificationToFederatedInstance all accept optional teamId / projectId. Hydrated from the stored relay when not provided.
  • Inbound (POST /api/federation/relay) — destructures new fields, validates against local Team/Project rows, persists on AgentRelay + KanbanCard + CommsMessage metadata. Drops silently and echoes scopeDropped if peer sends unknown IDs.
  • Inbound (POST /api/federation/notifications) — same scope propagation, plus dual wire-shape support ({type,title,body} and legacy {action,summary}).
  • Ambient gates — filters now accept object form { topic?, projectId?, teamId? }, all specified fields must match. Legacy string filters still work.

Every Relay Call Site Backfilled

  • lib/cos-sequential-dispatch.ts — relay case reads from item + meta
  • lib/queue-dispatch.ts — executeTaskRouteDispatch propagates scope to relay + KanbanCard + push
  • lib/action-tags.ts — relay_request + task_route top-level and in metadata JSON
  • lib/relay-queue-bridge.ts — createLinkedDispatch accepts scope on item or opts
  • lib/task-exchange.ts — projectId piped through from linked job
  • POST /api/relays — validates and persists scope
  • POST /api/mcp (relay_send) — new fields in input schema + output payload

v2.3.1 Invite Gap, Closed

v2.3.1 emitted the four signals for local invitees but never pushed to federation for cross-instance ones. v2.3.2 calls pushRelayToFederatedInstance + pushNotificationToFederatedInstance with projectId, keeps the relay pending until peer ACKs, and skips local CommsMessage (peer owns their side). Symmetry restored.

Two Latent Bugs Fixed

  • Wire-shape mismatch/api/federation/notifications was pushing {type,title,body} but reading {action,summary}. Handler now accepts both.
  • Status enum violation — federated notifications created QueueItems with status: 'open' which isn't valid. Now uses status: 'ready'.

UI: Scope Chips

QueuePanel and CommsTab now render a compact scope badge in item metadata rows: abc123 for project, xyz789 for team. Last 6 chars of ID, tooltip shows full ID. Only rendered when scope exists.

Verification Script

cd nextjs_space && npx tsx scripts/check_federation_scope.ts 100

Walks the most recent N AgentRelay / QueueItem / KanbanCard rows and reports what fraction carry scope. Spot-check after any deploy that touches federation.

⬆Backward Compatibility

All changes are purely additive. Old peers that don't send teamId / projectId continue to work unchanged. No schema migration required on DiviDen side (columns were already present on AgentRelay, QueueItem, KanbanCard, NetworkJob). Peer instances can upgrade on their own schedule.

Download a plain-text copy of this page

Platform: v2.3.1April 18, 2026Projects

Project Invites as First-Class Divi→Divi Comms

Project invites are no longer silent DB writes — they're AgentRelay + CommsMessage events with ghost avatars on cards, Accept / Decline inline in the queue, a duplicate guard with 409 ALREADY_INVITED, a clean force: true reinvite path, and a renamed "Contributors" section that opens expanded by default inside each card.

What Changed

  • Project invites emit AgentRelay + CommsMessagePOST /api/projects/[id]/invite now writes 4 records atomically: ProjectInvite, QueueItem, AgentRelay (intent='introduce'), CommsMessage (sender='divi').
  • Relay payload shape{ kind: 'project_invite', inviteId, projectId, projectName, role, message, inviterName }. Federation-ready via existing pushRelayToFederatedInstance.
  • Accept / Decline in queueQueuePanel detects metadata.type === 'project_invite' and renders real Accept / Decline buttons wired to PATCH /api/project-invites. Pinned "Pending Invites" section stays at top.
  • Ghost avatars on cards — pending invites render as dashed amber avatars next to active contributors on every kanban card. Visible state of who's been invited but hasn't responded.
  • Duplicate invite guard — if a pending invite already exists for that project+invitee, endpoint returns 409 { error, code: 'ALREADY_INVITED', inviteId }. Prevents double-fire from repeated clicks or stale UIs.
  • Force reinvite — pass { force: true } to cancel the old invite + clean up its queue item, relay, and comms message, then create a fresh set. Response includes replacedInviteId.
  • Inline resend UI — modal surfaces a "already has a pending invite" prompt with Resend invite and Keep existing buttons when the 409 comes back.
  • Members → Contributors rename — every user-facing label changed. API field names and ProjectMember.role enum values unchanged for compatibility.
  • Contributors section open by default — when you click into a card, the Contributors section opens expanded so the + Add contributor picker is immediately visible.
  • Quick-add search picker — Add Contributor launches a search-as-you-type picker against your accepted Connection records. Pick someone, set role, optional message, invite.

API Surface

POST /api/projects/[id]/invite
Body: { connectionId?, userId?, email?, role?, message?, force? }
201 → { success, invite, relayId, replacedInviteId?, message }
409 → { error, code: 'ALREADY_INVITED', inviteId } (unless force:true)
PATCH /api/project-invites
Body: { inviteId, action: 'accept' | 'decline' }
200 → writes ProjectMember on accept, cancels queue item + comms thread on decline.

Files Touched

  • src/app/api/projects/[id]/invite/route.ts — duplicate guard + force reinvite + relay + comms emit
  • src/app/api/project-invites/route.ts — Accept / Decline side-effects
  • src/components/dashboard/CardDetailModal.tsx — Contributors section default open, rename, force reinvite prompt
  • src/components/dashboard/KanbanView.tsx — ghost avatars for pending invites on each card
  • src/components/dashboard/QueuePanel.tsx — pinned "Pending Invites" + inline Accept/Decline

Integration Guide

Full recipe for invoking or extending this flow — including federated delivery, event listeners (dividen:board-refresh, dividen:comms-refresh), and the canonical relay payload shape — in the new Project Invites Integration Guide.

Download a plain-text copy of this page

Platform: v2.3.0April 18, 2026Relay Protocol

Relay Protocol Overhaul

Twelve bug pass against the Relay Protocol — the mechanism for agent-to-agent messaging. Rewires component UX, kills the relay-loop, adds a dismiss control, and rewrites the ambient surfacing directives so Divi holds context silently and weaves on topic match rather than announcing relays as notifications.

Problems (12 bugs)

  • Ambient relays silently rejected any non-question statements.
  • Green outgoing component rendered empty or with wrong content.
  • Divi not reading the real sender from metadata (partial v2.2.1 fix).
  • Divi not weaving relay content into conversation (partial v2.2.1 fix).
  • Purple inbound components not visibly resolving after the response fires.
  • Footnote missing on both green and purple components — operator had no visible metadata for sender, type, timestamp, or status.
  • Outgoing green component inconsistent — sometimes the status was omitted.
  • Relay loop — outbound push never stamped status='delivered' so pushRelayToFederatedInstance could re-run for the same relay, duplicating peer records.
  • No dismiss / clear control on any relay component.
  • No topic-matching for ambient surfacing — ambient relays either got ignored or got announced, never organically woven.
  • Ambient response had no passive collection mechanism — operator had no path to reply in flow.
  • Divi announced relay responses as "I got a reply" instead of treating the response as information she now owns.

Fix

  • Shared RelayFootnote component: new src/components/dashboard/RelayFootnote.tsx. Tiny metadata strip — sender · type (direct/ambient) · timestamp · status — with optional dismiss (×). Used by ChatView green cards, Comms thread rows, and Comms page bubbles so every relay surface carries the same footnote.
  • Dismiss API: new POST /api/relays/[id]/dismiss. Marks relay as declined with a (dismissed by operator) marker, logs activity, pushes state-change webhook, and fires ack-back to federated peers so their Divi also sees it resolved. Dismiss buttons appear next to every active footnote.
  • Loop prevention (outbound idempotency): pushRelayToFederatedInstance now checks peerRelayId / status before pushing and skips if the relay is already delivered/completed/declined. On successful ack it also stamps status='delivered', not just peerRelayId. This kills the duplicate-delivery cascade.
  • Ambient HOLD directive: layer-17 ambient surfacing rewritten with 7 hard rules — never announce, hold silently, only weave on fuzzy topic-match OR when sender is named, respond silently via relay_respond in background. Operator may never even hear about the relay if the topic doesn't come up.
  • Response weaving rewrite: relay response section now has 5 hard rules forbidding announcement phrasing. Divi must treat inbound responses as information she OWNS, not system notifications. Good examples pinned.
  • Green card body fix: fallback chain subject → responseText → message → question → note plus recipient line (→ to) and consistent footnote. No more empty outgoing cards.
  • Resolved visual state: resolved Comms thread rows now render with strike-through on peer name plus opacity reduction so the resolution transition is visible.

Expected Operator Experience

Ambient surfacing:
Before: "You have an ambient relay from Jon Bradford." (first turn, regardless of topic)
After: nothing on first turn. Then when operator says "any update on Q3?": "Oh — your FVP account actually pinged me about that: '…' — want me to reply?"
Response arrival:
Before: "A relay completed. X responded to your relay."
After: "Heard back from your FVP account — they confirmed it came through."
Component footnote:
FVP account (jon@fvp) · direct · 2m ago · delivered · ×
Dismiss: × button on any active component clears it locally and notifies the peer — loop ends.

Files Touched

  • src/components/dashboard/RelayFootnote.tsx — NEW shared footnote component
  • src/app/api/relays/[id]/dismiss/route.ts — NEW dismiss endpoint with federation ack-back
  • src/lib/federation-push.ts — outbound idempotency + status=delivered on ack
  • src/components/dashboard/ChatView.tsx — green card footnote + fallback chain
  • src/components/dashboard/CommsTab.tsx — thread row footnote + resolved strikethrough + dismiss
  • src/app/dashboard/comms/page.tsx — bubble footnote + dismiss per-bubble
  • src/lib/system-prompt.ts — ambient HOLD rules + response never-announce rules

Download a plain-text copy of this page

Platform: v2.2.1April 18, 2026Agent Behavior

Divi Relay Context Handling

Targeted behavior fix for how Divi identifies relay senders and weaves relay content into conversation. Resolves three upstream issues reported against the v2.2.0 surfacing pass.

Problem

  • Sender misidentification: on federated inbound relays, AgentRelay.fromUserId stores connection.requesterId as a placeholder — which resolves back to the operator themselves. Divi was surfacing inbound relays as if they came from the operator's own contact list.
  • Missing federation context: the layer-17 relay fetch didn't include the connection row, so Divi had no access to the nickname, peer display name, or instance URL needed to say "your FVP account".
  • Backend jargon: the surface directives used phrases like "inbound relay from X" instead of conversational English. Divi was reading out system events verbatim.

Fix

  • Sender identity persistence: POST /api/federation/relay now writes payload._sender = { name, email, instanceUrl, connectionId, isFederated } into every inbound federated relay, so the real sender identity survives the placeholder fromUserId.
  • Canonical sender resolver: new resolveSender() / resolveRecipient() helpers in system-prompt.ts layer 17. Priority: connection nickname → payload._sender.name → connection.peerUserName → fromUser.name → fallback. For federated peers, produces a federation hint like "your FVP account" derived from the instance hostname.
  • Connection relation included: all four relay fetches (inbound, outbound, ambient inbound, recent responses) now include: { connection: { nickname, peerNickname, peerUserName, peerUserEmail, isFederated, peerInstanceUrl, requesterId, accepterId } }.
  • Natural weaving directives: surface hints rewritten to instruct Divi to use the resolved sender label verbatim. Explicit bad/good examples added. New "Never describe backend mechanics" rule (no "relay fired", "green card", "inbound event", "endpoint").

Expected Operator Experience

Before: "You have an inbound relay from Jon Bradford. Did a green component fire?"
After: "Your FVP account just got back to you — they confirmed it came through: '…'. Want to act on that?"

Files Touched

  • src/app/api/federation/relay/route.ts — sender identity persistence
  • src/lib/system-prompt.ts — resolveSender / resolveRecipient + directive rewrite

Download a plain-text copy of this page

Platform: v2.2.0v2.2.0
April 17, 2026

Comms Threading & Bidirectional Federation — Thread-Grouped Inbox, Intent-Flexible Ambient Relays, Federated Kanban Sync, Attachments Passthrough

Comms re-thought around threads. The main Comms tab used to show one row per relay — 5 messages with the same person meant 5 cards cluttering the list. Now every peer collapses to a single row with a live count of open/active relays, the latest subject preview, and a direct link to the expanded thread view. Meanwhile, ambient relays are no longer question-only — they carry any intent: share updates, drop an intro, acknowledge a schedule, voice an opinion. FVP Build 524/525 parity on cross-instance Kanban sync + attachments passthrough.

Comms Tab → Thread-Grouped View

The Comms surface on the main dashboard is now grouped by peer (connectionId), matching the expanded /dashboard/comms view. Every peer shows as a single row with:

  • • Live open-relay count (pending/delivered/ack) + total message count
  • • Latest subject preview + intent icon (request · ambient · response · broadcast)
  • • Outbound vs inbound direction arrow
  • • Relative timestamp of most recent activity
  • • Click through to /dashboard/comms?thread=<connectionId> which auto-opens that thread

The main tab also now surfaces open outbound relays (previously hidden when no inbound), so you always see what's in flight.

Ambient Relays → Any Intent

relay_ambient used to accept only params.question and hardcoded intent: 'ask'. That collapsed the entire surface to "one agent asking another agent a question." Ambient was supposed to be the broader concept: any fire-and-forget message the peer agent can weave into conversation naturally.

Now accepts:

  • params.message (new) · params.subject · params.question (legacy)
  • params.intent — default 'custom', but explicitly supports: ask, share_update, intro, schedule, opinion, note
  • • Receiving agent now sees the intent in the system prompt and adapts how it weaves the message in (updates don't need a reply, questions do)

Rule of thumb: if the user would be fine waiting hours/days for a natural reply, use ambient. If they need an answer now or a commitment tracked, use relay_request (still tracked, status-bearing, ack-required).

Federation: Bidirectional Kanban Sync

New POST /api/federation/card-update endpoint (FVP Build 524 parity). When a peer moves a card that's linked to ours via CardLink, they push the delta to us and our card advances too. Lookup precedence: localCardIdCardLink.externalCardIdAgentRelay.peerRelayIdAgentRelay.cardId.

Symmetric: our PATCH /api/kanban/[id] and POST /api/kanban/[id]/move now call a new pushCardUpdate() helper that fires the same payload outbound to any federated peer whose CardLink.externalInstanceUrl matches. Changelog entries (max 50) are persisted on both sides for audit.

Consistent envelope: success returns { success: true, matched: true, localCardId, newStage, ... }; failure returns { success: false, error, code } where code ∈ ['missing_token', 'federation_disabled', 'invalid_payload', 'connection_not_found', 'card_not_found', 'internal_error'].

Federation: Thread Continuity (threadId + parentRelayId)

Inbound /api/federation/relay now reads optional threadId and parentRelayId from the body. parentRelayId is resolved against AgentRelay.peerRelayId on our side, and we inherit the parent's threadId (or fall back to the remote-supplied value). Thread-root relays get threadId = self.id.

Outbound pushRelayToFederatedInstance auto-hydrates threadId/parentRelayId from the local AgentRelay row if not passed in. So replies (via relay_respond with parentRelayId) now carry the parent's thread identity across the federation hop automatically. Response echoes threadId + parentRelayId so peers can thread on their side.

Federation: Attachments Passthrough (max 10)

Inbound federation relays now parse body.attachments or payload.attachments as an array of {name, url, size?, mimeType?}. Capped at 10 entries per FVP spec. Folded into the AgentRelay payload JSON for round-trip, rendered in the CommsMessage body as a markdown list (Attachments: • [name](url)) so links are clickable.

Attachments are passed through only — we don't re-host or proxy. The peer's storage URLs are used directly. Response includes attachmentCount.

ChatView Green Card Fix (outbound relay preview)

When Divi sends a relay, the green confirmation card in the chat stream sometimes showed empty/wrong content — especially for ambient relays that returned question instead of subject. Now falls back through a robust chain: subject → responseText → message → question → note. Also surfaces the to/recipient name on the card so you can tell at a glance where it went.

Download a plain-text copy of this page

Platform: v2.1.15
April 18, 2026

FVP Build 522 Compliance — Federation Idempotency, Ambient Preference Gates, Inbound Task → Kanban, Marketplace Queue Gate

Symmetry audit complete. Audited every behavior in Jon's Comms Unification Vision against the FVP Build 522 architecture spec. Found 4 gaps on our side, fixed all of them, and shipped a reply. Same six behaviors now hold whether you're on dividen.ai or cc.fractionalventure.partners.

Federation Inbound: Idempotency Dedup

/api/federation/relay now dedupes on peerRelayId + connectionId at the top of the handler. Duplicate requests return { success: true, duplicate: true, relayId } with HTTP 200 — no double-creation on transient retries.

Aligns with FVP Build 522 §4. Recommended that peer instances adopt the same shape for retry safety with exponential backoff.

Ambient Inbound: Preference Gates

Inbound ambient relays (those carrying payload._ambient: true) are now silently filtered against the recipient's UserProfile preferences before any DB rows are written:

  • relayMode === 'off' → reason: relay_mode_off
  • relayMode === 'minimal' → reason: relay_mode_minimal_blocks_ambient
  • allowAmbientInbound === false → reason: ambient_inbound_disabled
  • • Topic matches relayTopicFilters → reason: topic_filtered:<topic>
  • • Current hour in relayQuietHours → reason: quiet_hours

Blocked relays return { ok: true, filtered: true, reason } with HTTP 200. Allowed ambient relays land as priority=low, state=read with a prefix — designed to be woven into the next Divi message rather than generate a notification (Jon's Comms Vision behavior #3).

Inbound Task Relays → Kanban Card

When a federated peer pushes a relay with intent in ['assign_task', 'delegate', 'schedule', 'request_approval'], our inbound handler now auto-creates a KanbanCard at the leads stage on the recipient's board, linked back to the AgentRelay via sourceRelayId + cardId.

Implements Jon's Comms Vision behavior #2: tasks from other Divis land directly on your Kanban board rather than requiring you to manually triage from a notification. The associated comms entry includes linkedCardId for quick navigation.

Marketplace Agent: Approval Gate

The execute_agent action tag now respects the user's queueAutoApprove preference. When auto-approve is off, the call creates a pending_confirmation queue item with kind: 'marketplace_execute' instead of immediately POSTing to the agent endpoint.

When the user approves and the queue dispatcher fires the item, dispatchNextItem calls execute_agent with skipQueue: true to bypass the gate and run the agent.

Implements Jon's Comms Vision behavior #5: outbound tasks to marketplace agents pass through the same approval gate as outbound tasks to people.

Reply to FVP Sent

Drafted and sent a section-by-section reply covering all of FVP's §9 open questions: FVP Build 522 Reply (PDF). Headlines: key threads off email not display name, adopt threadId/parentRelayId for cross-instance threading, merge multi-instance peer by email, and offered a new /api/federation/card-update endpoint for bi-directional Kanban stage sync if useful.

Files Changed

  • src/app/api/federation/relay/route.ts (rewritten — ambient gates, idempotency, Kanban creation)
  • src/lib/action-tags.ts (execute_agent queue gate)
  • src/lib/queue-dispatch.ts (handles marketplace_execute kind)
  • FVP_BUILD_522_REPLY.md (+ PDF)
Platform: v2.1.7 → v2.1.14
April 17, 2026

Universal @username Routing, Stuck Relay Fix, Outbound Response Display, Ambient Pattern Synthesis, Federated Developer Profiles

@Universal @username Relay Routing (v2.1.12)

The relay_request action tag now accepts username / handle parameters and resolves them against the federated connection set with exact-match priority. Saying "send to @alvaro" in chat now resolves directly to Alvaro's federated connection regardless of nickname or display name drift.

Connection queries in action-tags.ts and system-prompt.ts now include username: true on both requester and accepter sides for symmetric resolution.

Stuck Outbound Relay Fix (v2.1.13)

Inbound and outbound relay queries in layer17_connectionsRelay_optimized() are now fetched separately via Promise.all. An old unresolved outbound relay (e.g., a stale agent_handling from days ago) no longer blocks newer inbound relays from reaching Divi's system prompt context.

inbound uses FIFO ordering; outbound uses most-recent-first for awareness only.

Outbound Relay Response Display (v2.1.14)

The green relay_respond card in chat now shows the operator's actual response content rather than the original inbound subject. The card now includes an italicized "Re: <original subject>" line above the response, with line-clamp-2 on the response text for readability.

data.subject = response text; data.originalSubject = inbound relay subject; data.responsePayload = full structured response.

Ambient Pattern Synthesis (v2.1.9 → v2.1.11)

Ambient relay outcomes (latency, response quality, disruption level, topic relevance) are now captured in AmbientRelaySignal rows on every relay-ack. Cross-user patterns are synthesized into AmbientPattern rows that feed back into the system prompt — making ambient communication progressively better at picking moments to weave in.

Trigger via /api/ambient-learning/synthesize. Fed by pushRelayAckToFederatedInstance with quality metadata from the recipient.

Federated Developer Profiles (v2.1.8)

Marketplace agent developer profiles are now resolvable across federated DiviDen instances. When a peer's Divi recommends an agent built by a developer on another instance, the developer card renders with full context (name, instance, profile link) instead of a bare ID.

Platform: v2.1.6
April 17, 2026

Ambient Relays Live, Federation Auto-Accept Fix, Agent Card Updates, 6 UI Bug Fixes, Sequential Relay Handling, FVP Architecture Docs

Shoutout to Jaron — massive thanks for your help stress-testing federation, flagging the auto-accept bug, and surfacing all the UI rough edges. This release is way tighter because of you.

Ambient Relays Are Live

The ambient relay system is officially live across the federation. Divi can now send low-priority, context-aware observations to connected agents — and receive them back. These aren't tasks; they're shared awareness.

  • • Ambient relays carry _ambient: true in the payload — same transport layer, different handling semantics.
  • • Divi weaves inbound ambient relays into conversation naturally rather than treating them as action items.
  • • Broadcast relays (relay_broadcast) now correctly push to all federated connections, not just local ones.
  • • Comprehensive architecture doc published for FVP integration: Ambient Relay Architecture Guide (PDF).

Federation Auto-Accept Callback Fix

When DiviDen auto-accepts an inbound federation connection request (requireApproval: false), it now correctly fires the acceptance callback to the requesting instance. Previously, the callback was silently skipped — leaving the requesting side stuck in pending forever.

Fixed in /api/federation/connect. The acceptance POST now sends {connectionId, status: "active", token} back to the requester's callback URL.

Agent Card: New Endpoints

/.well-known/agent-card.json now advertises two new federation endpoints:

  • connectAccept/api/federation/connect/accept — Callback endpoint for accepting connection requests.
  • relayAck/api/federation/relay-ack — Acknowledgment endpoint for relay delivery confirmation.

FVP Integration Q&A Document

Answered all 45 integration questions from the FVP team covering relay lifecycle, ambient vs. direct semantics, connection trust, pattern sharing, and error handling. Available at FVP Integration Answers (PDF).

One Relay at a Time

Divi's system prompt now injects one relay at a time instead of batching up to 20. This prevents context overload and ensures each relay gets proper attention.

  • • All three relay queries (inbound, responses, ambient) changed from take: 10/5/5 to take: 1.
  • • Prompt instructions updated with "HANDLE THIS ONE FIRST" framing.
  • • Ambient section pre-fills relayId in the respond template for instant action.

6 UI Bug Fixes

From Jaron's testing feedback:

  • Comms direction colors — Outbound relays now render green, inbound render purple. Previously all same color.
  • Relay collapse toggle — Active relays section in Comms is now collapsible. Click the header to expand/collapse.
  • Relay dismiss button — Each relay in Comms now has a dismiss (×) button that marks it as expired via PATCH.
  • Queue filterbehavior_learning items no longer appear in the task queue. They belong in Settings → Learnings.
  • Chat textarea — Input converted from single-line <input> to auto-resizing <textarea>. Grows vertically up to 160px, resets on send.
  • Name resolutioninvite_to_project now uses score-based matching (exact → contains → first-name) across all connection fields.

Test Data Cleanup

Expired stuck test relays and archived their associated comms messages from the federation bridge testing phase. Production DB is clean.

Platform: v2.1.3
April 17, 2026

Project Management Tags, Queue-First Task Routing, Federation Relay Push, Directory Discovery Fix, FVP Cross-Operability Guide

Project Management from Chat

Two new action tags let Divi create projects and invite members directly from conversation:

  • create_project — Creates a Project record, adds the creator as lead, and auto-invites listed members. Members are resolved by name/username/email against active connections.
  • invite_to_project — Invites members to an existing project by name (fuzzy match) or ID. Each invitee gets a ProjectInvite record, a queue item, and a comms notification.

Example: "create a project called Debugging DiviDen and add @jaron and @alvaro" → project created, both invited with queue items.

Queue-First Task Routing (v2.1.2)

The task_route tag now creates a queue item instead of immediately firing relays. The full pipeline (relay → comms → kanban card on recipient board) executes only when the item is dispatched — either manually or via Chief of Staff mode.

Flow: task_route → queue (READY) → dispatch → relay + comms + recipient card + sender tracking + checklist on source card.

Outbound Federation Relay Push

DiviDen now pushes relays to federated instances. When a task_route dispatch targets a federated connection, the relay payload is POSTed to the remote instance's /api/federation/relay endpoint with the shared federation token. Fire-and-forget with 10s timeout.

Project invites also push notifications to federated instances via /api/federation/notifications.

New utility: src/lib/federation-push.ts — shared pushRelayToFederatedInstance() and pushNotificationToFederatedInstance() helpers.

Directory Discovery Fix

/api/v2/network/discover now returns profiles with visibility: 'connections' (not just 'public'). Also returns basic entries for users without profile records. Test accounts excluded.

LLM Provider Priority

Abacus AI (Claude) is now the primary LLM provider. GPT-4o doesn't reliably emit [[tag:params]] action tags. User OpenAI keys are fallback only. Max tokens increased to 8192 for Abacus.

FVP Cross-Operability Guide v2.2

Comprehensive guide for FVP integration: full event taxonomy (relay + notification types), payload schemas, authentication, endpoint reference, and implementation checklist. Available at /docs/fvp-cross-operability-v2.2.md.

Platform: v2.1.0
April 16, 2026

Cross-User Task Routing, Relay Pipeline, Bubble Store Promotion, Settings Overhaul, Installed Manager, Capabilities Resilience

Cross-User Task Routing

Task routing is now a core capability — not a Bubble Store install. When you say "assign this to Alvaro", Divi emits a [[task_route:...]] tag that creates a full delivery pipeline:

  • Queue item created on the sender's side for tracking and approval.
  • Relay created and linked to the queue item, sent to the recipient's Divi.
  • Comms message delivered to recipient with task details, subject, and card context.
  • Sender comms thread created for tracking routed tasks.
  • Checklist item added to source card (if card context exists) showing assignee, due date, and delegation status.
  • Activity log records the routing with match scores and route mode.

Flexible task_route Tag

  • cardId is now optional. Tasks can be routed standalone without a specific kanban card.
  • cardTitle added as an alternative — looks up cards by name (case-insensitive partial match).
  • Minimum viable tag: [[task_route:{"tasks":[{"title":"...","to":"Name","dueDate":"..."}]}]]
  • Explicit to field bypasses skill matching — direct assignment always works regardless of profile skills.
  • When skill matching fails for the to target, falls back to searching all active connections.

Relay Response Sync

  • relay_respond now syncs delegation status back to the sender's checklist item (accepted/declined).
  • Queue items linked to relays are also updated when relays complete or are declined.
  • Inbound assign_task relays instruct the recipient's Divi to create a card on their board.

Routing Capabilities Always On

  • When a user has any active connections, the routing capability group and relay group are always loaded into Divi's context.
  • Previously required specific keyword patterns to match — now routing is available in every conversation.
  • 5 concrete [[task_route:...]] examples added to CRITICAL EXECUTION RULES to prevent phantom work.
  • Rule 6 explicitly prohibits using upsert_card for cross-user assignment.

Delegation on Checklist Items

  • Checklist items now carry assigneeType, assigneeName, delegationStatus, dueDate, and sourceType/sourceId/sourceLabel.
  • Card detail modal shows purple Delegated badges and per-task due dates.
  • NOW panel scores and surfaces delegated tasks with assignee info.

Bubble Store — Top-Level Tab

  • Bubble Store promoted from the Network sub-menu to the primary tab bar — one click, no nesting.
  • Sits alongside Chat, CRM, Calendar, Email, Recordings as a first-class surface.

Settings Overhaul

  • Compact tab bar — all 7 tabs fit in a single row with icon-above-label layout. No horizontal scrolling, no two-row wrapping.
  • Installed Manager (Divi tab) — new section showing all installed agents and capabilities with uninstall, edit rules, and links to stores.
  • Capability customization fields editable inline — no need to navigate to the store.

Capabilities Page Resilience

  • Auto-retry (up to 2x) on server errors and network failures — handles DB connection pool timeouts gracefully.
  • Error state with manual "Retry" button when auto-retry exhausted.

Connection Request Surfacing

  • Pending inbound connection requests now injected into the relay group with [[accept_connection:...]] action tags.
  • Divi proactively tells the operator about pending requests at the start of responses.
  • Relay group force-loaded when pending requests exist.

Signals Onboarding Fix

  • Signal onboarding links now open settings in-page (not new tab) and navigate to the correct tab.

Directory Improvements

  • Raw instance entities without operatorName hidden from directory — only operators with profiles show.
  • Federated operators displayed as people with instance context cards.
Platform: v2.0.5
April 16, 2026

Team @Mentions, Codebase Refactoring, Performance Optimizations, Accessibility, Documentation Audit

Team @Mentions

  • The @ trigger in chat now searches people, teams, and agents in parallel.
  • Teams matched by name and description — only teams you're a member of appear.
  • Team mentions render as purple chips with a prefix, linking to the team view.
  • Team names auto-kebab-cased for handles (e.g., "Ops Team" → @ops-team).
  • /api/users/resolve now resolves both usernames and kebab-cased team names.
  • /api/chat/mentions?type=teams — new endpoint for team search in inline autocomplete.

Codebase Refactoring

  • Dead code removed: ~15 unused imports/variables across components and lib files. Removed 115-line dead function (layer18_profileAwareness_optimized) from system prompt. Removed unused LoopBackArrow SVG component (38 lines).
  • Type safety: Added next-auth.d.ts type augmentation — session.user.id now typed without as any casting.
  • Auth audit: All API routes verified for auth guards. v2 routes use authenticateAgent(), federation routes use token auth, public routes are intentional.

Performance Optimizations

  • /api/chat/send: Message save + user fetch now run in parallel. System prompt build + message history fetch also parallelized. Saves ~2 DB round-trips per chat message.
  • N+1 query audit: All read-heavy endpoints (kanban GET, /api/now, notifications feed) confirmed free of N+1 patterns.

Accessibility

  • Chat input: role="combobox", aria-expanded, aria-activedescendant for inline search dropdown.
  • Inline search results: role="listbox" + role="option" with aria-selected.
  • Kanban columns: role="region" with descriptive aria-label. Add-card buttons labeled.
  • Error boundaries: NowPanel and QueuePanel now wrapped in TabErrorBoundary (desktop + mobile).

Homepage

  • Hero copy reverted to "The last interface you'll ever need" per founder preference.
Platform: v1.9.1
April 15, 2026

Covers v1.9.0 → v1.9.1 — Realtime Dashboard, Catch-Up Rewrite, Activity Feed v2

Realtime Dashboard Refresh

Every dashboard panel now refreshes instantly when a related action completes in chat. Lightweight custom DOM event system — no WebSockets or SSE required.

  • dividen:now-refresh — universal trigger, all panels listen
  • dividen:board-refresh — kanban board re-fetch
  • dividen:queue-refresh — queue panel re-fetch
  • dividen:comms-refresh — comms tab re-fetch
  • dividen:activity-refresh — activity stream re-fetch

ChatView dispatches relevant events after settings saves, chat completions, setup task advances. NOW panel poll interval reduced from 120s to 60s as a backstop.

Catch-Up Briefing Rewrite

getCatchUpPrompt() in signals.ts completely rewritten. The old prompt was a task router — it told the LLM to create cards and dispatch queue items. The new prompt produces a FVP-style phased status briefing:

  • Phase 1: Board & Queue Progress — what moved, stuck, or completed
  • Phase 2: Inbox Triage — unread count, notable threads, replies needed
  • Phase 3: Calendar & Signals — upcoming events, deadlines, time-sensitive items
  • Phase 4: Recommended Focus — Divi's opinion on what to tackle first

The catch_up action tag is now handled client-side: fires sync_signal in the background, waits 1.5s for data freshness, then sends the briefing prompt to the LLM. Onboarding "Run Your First Catch-Up" now uses catch_up instead of sync_signal.

Activity Feed v2

Activity stream replaced static tabs with a dropdown checkbox filter supporting 10 categories:

Queue · Board · CRM · Calendar · Goals · Comms · Connections · Drive · Settings · Sync

Multiple categories can be selected simultaneously. Badge count shows active filter count. New activity logging added for: settings changes, Google connections, action tag executions, sync completions, checklist completions/unchecks.

API: GET /api/activity?categories=board,queue,sync — comma-separated category filter parameter.

Bug Fixes (v1.9.0 → v1.9.1)

  • NOW panel stale after chat actions — fixed with dividen:now-refresh event + refreshKey prop
  • Catch-up execution produced no output — was wired to sync_signal (sync only), now uses two-step catch_up flow (sync + brief)
  • /api/inbox and /api/drive 404s — badge count endpoints were missing entirely. Added both — query EmailMessage and Document respectively
April 14, 2026Platform: v1.8.1Federation v2Developer Profiles

Federation Capabilities, Federated Developer Profiles, Onboarding Overhaul & Approval Hardening

Covers v1.6.1 → v1.6.2 → v1.7.0 → v1.8.0 → v1.8.1

Federation Capabilities Endpoint (v1.8.0)

Federated instances can now sync capabilities to DiviDen's managed marketplace — not just agents.

  • POST /api/v2/federation/capabilities — sync capabilities from a federated instance (max 50 per call). Accepts promptGroup, signalPatterns, tokenEstimate, alwaysLoad.
  • GET /api/v2/federation/capabilities — list capabilities currently synced from your instance.
  • Schema: added promptGroup, sourceInstanceId, sourceInstanceUrl, remoteCapabilityId to MarketplaceCapability.
  • All capability submissions enter pending_review — no auto-approve, even for trusted instances.

Federated Developer Profiles (v1.8.0)

Federated developers (people who build agents on other DiviDen instances) now have a presence on the managed platform.

  • New page: /developer/{slug} — shows developer name, purple Federated via {instance} badge, all their agents and capabilities on DiviDen.
  • Developer name links: federated agents → /developer/{slug} (purple), platform agents → /profile/{userId} (brand).
  • Applied across Marketplace browse, Marketplace detail, Discover agents, Global Search, Directory, and Connections.
  • Federated developers appear as person results in search and as federated_developer entries in the directory.
  • Connections view shows "View Profile →" instead of "Connect" for federated developers.

Price & Access Password Fix (v1.8.1)

  • Federation agent sync now accepts price from pricePerTask, pricingAmount, or price — with string→float coercion.
  • accessPassword now passes through federation agent sync (was silently dropped before). Users on DiviDen can unlock agents using developer-shared passwords.
  • Sync response echoes back pricePerTask and pricingModel for debugging.

Federation Naming Alignment (v1.7.0)

Canonical naming conventions established for the federation protocol — instances sending agents and capabilities should use these values:

Legacy / AliasDiviDen CanonicalNotes
per_executionper_taskBoth accepted, stored as per_task
pending_approvalpending_reviewCanonical status for all submissions
pricingAmountpricePerTaskAlias accepted and mapped automatically
  • currency field supported (ISO 4217, default USD).
  • Top-level status: 'pending_review' added to federation sync response.
  • Trusted-instance auto-approve removed — all submissions always enter pending_review.
  • Developer attribution: just developerName + developerUrl. No bio, title, company, or industry fields.
  • Nested capabilities object parsed on agent submissions (identity, taskTypes, contextInstructions).

Review & Approval Hardening (v1.6.2)

  • Agent approval now records reviewedAt, reviewedById, reviewNotes in the database — full audit trail.
  • Admin notification via ActivityLog when marketplace agents or capabilities are submitted for review.
  • Developer notification via ActivityLog on approval, rejection, or suspension.
  • Schema additions: reviewedAt, reviewedById, reviewNotes on both MarketplaceAgent and MarketplaceCapability.

CapabilityModule Phase 2 (v1.6.1)

Phase 2 of the modular capability system — marketplace capabilities are now data-driven modules that integrate with the relevance engine.

  • Formal CapabilityModule interface in src/lib/capability-module.ts — scoring, loading, prompt injection.
  • scoreCapabilityModule() uses same weights as static groups — message match (+0.6), context match (+0.3), baseline (+0.05), threshold (0.3).
  • loadRelevantCapabilityModules(userId, message, context) fetches installed caps, scores them, returns only those above threshold.
  • System prompt: dynamic capability modules injected as Group 14 — each module scored independently.
  • Schema: signalPatterns, tokenEstimate, alwaysLoad, moduleVersion, revenue tracking fields on MarketplaceCapability.
  • 97/3 revenue split on paid capability purchases (same as agents) via calculateRevenueSplit().

New APIs (v1.6.1)

  • GET /api/v2/prompt-groups — exposes all 17 static prompt groups, signal patterns, scoring params, and the CapabilityModule spec. For federation alignment.
  • POST /api/marketplace/webhook — receives agent_approval events from the managed marketplace. Validates X-Federation-Token.

Onboarding Overhaul

Complete rewrite of how new users get set up — project-based, conversational, and non-blocking.

  • Onboarding project ("DiviDen Setup") now created at signup time, not after first chat message.
  • Setup tasks appear in the NOW panel immediately — no due dates, just a checklist.
  • Divi walks through setup conversationally: completes a task → asks "Next up is X. Want to knock that out now?" → user confirms → renders the appropriate widget.
  • Legacy onboarding phases (0-5) fully removed from system prompt. onboardingPhase field still exists but is no longer read.
  • Manual "Cortex Scan" button added to kanban board for on-demand board analysis.
April 15, 2026Platform: v1.6.0Modular CapabilitiesToken Optimization

Modular Capability System — Divi Gets a Lighter Brain

The Problem

The monolithic buildCapabilitiesAndSyntax() function dumped 7,219 tokens into every single message — triage protocol, routing logic, federation commands, marketplace operations — regardless of what the user actually asked. "Good morning" got the same payload as "run my triage catch-up."

Capabilities as Installed Modules

The monolith is now split into 5 purpose-built functions. Only capabilities_core loads on every message. The rest load on-demand based on relevance scoring:

ModuleTokensLoads When
capabilities_core~3,200Always — Card CRUD, checklists, people, queue, goals, widgets, Linked Kards, task awareness
capabilities_triage~1,200Triage, catch-up, morning briefing, signal processing
capabilities_routing~800Task routing, delegation, relay, connection handling
capabilities_federation~200Cross-instance resolution, serendipity, network briefing
capabilities_marketplace~200Agent listing, install/uninstall, subscribe, execute

Relevance Engine

selectRelevantGroups() now manages 17 prompt groups (up from 13). Each group has regex signal patterns in SIGNAL_PATTERNS. The engine scores each module against the current message + recent context. Groups with empty patterns (like capabilities_core) always score 1.0.

Assembly wires modules as groups 7 (core), 7b (triage), 7c (routing), 7d (federation), 7e (marketplace).

What Got Killed

  • Legacy onboarding phases 0-5 — removed entirely from system prompt. Project-based onboarding is the only path.
  • Duplicate Federation Intelligence — same block was injected twice. Fixed.
  • Dead layer16_platformSetupAssistant_optimized — 130-line function defined but never called. Gone.
  • Settings hint bloat — ~1,200 tokens on both setup paths. Now: widget syntax in core, setup-complete is ~200 tokens.

Token Savings

~5,000-6,000 tokens saved per typical message (non-triage, non-routing). That's roughly 30% of the old always-on payload. Triage messages still get the full protocol — loaded on-demand instead of wasting context window when you're talking about something else.

Phase 2 — Shipped in v1.6.1

Phase 2 is now live: a formal CapabilityModule interface where marketplace capabilities are data-driven, per-user installable modules that integrate with the relevance engine. See v1.8.1 release notes above for details.

April 14, 2026Platform: v1.5.0Card Activity FeedsCross-User Mirroring

Card-Scoped Activity Feeds & Cross-User Activity Mirroring

ActivityLog Schema Extension

The ActivityLog model gains two new fields and a composite index for card-scoped queries:

  • cardId String? — FK to KanbanCard. Promotes card context from metadata JSON to a queryable, indexed column.
  • isCrossUser Boolean @default(false) — Flags entries that were mirrored from a linked card owned by another user.
  • @@index([cardId, createdAt]) — Composite index for fast card-scoped feed retrieval.

Cross-User Activity Mirroring

mirrorActivityToLinkedCards() fires automatically (fire-and-forget) when logActivity() is called with a cardId. For each CardLink pointing to a card owned by a different user, it creates a mirror ActivityLog entry:

  • Mirror entry has isCrossUser: true
  • Summary prefixed with and the acting user's name as actor
  • Logged on the linked card's ID, not the original — so it shows up in the other user's card timeline

Wired Call Sites

All card-related activity now writes cardId:

  • POST /api/kanbancard_created
  • PATCH /api/kanban/[id]card_updated
  • DELETE /api/kanban/[id]card_deleted
  • POST /api/kanban/[id]/movecard_moved
  • action-tags.ts: task_completed, task_routed, task_decomposed
  • card-auto-complete.ts: card_auto_completed

New Endpoint

GET /api/kanban/[id]/activity — Card-scoped activity feed with cursor pagination.

  • Auth: session (ownership verified)
  • Query: ?limit=50&cursor=<id>
  • Returns both own and cross-user (isCrossUser) entries, ordered by createdAt desc

CardDetailModal — Activity Section

Collapsible Activity section in the card detail modal. Lazy-loads on first expand.

  • Own entries: (human) or (divi) on neutral background
  • Cross-user entries: on brand-tinted background with border
  • Relative timestamps (just now, 5m ago, 2h ago, 3d ago)
  • Global activity feed (/api/activity + SSE) remains user-scoped — no cross-user bleed
April 14, 2026Platform: v1.4.0Teams & InvitesCoS Delegation: v2

Teams Architecture, CoS Project Contributor Delegation, Invite Flow & Open-Source Billing Boundary

Team Model & Schema

Teams are a grouping mechanism — a convenient way to add multiple users to a project as an organized bundled unit. CoS delegation still operates at the ProjectMember level.

  • New Team model: name, description, ownerId, originInstanceUrl, isSelfHosted
  • TeamMember join table with role enum: OWNER, ADMIN, MEMBER
  • TeamProject join table links teams → projects, auto-syncs members to ProjectMember
  • originInstanceUrl tracks which DiviDen instance the team was created on — drives billing boundary
  • Full CRUD: /api/v2/teams (GET, POST), /api/v2/teams/[id] (GET, PATCH, DELETE)

Team Invite Flow

Token-based invite system with email + role + expiry. Invite page at /team/invite/[token] handles acceptance for both existing and new users.

  • New TeamInvite model: email, role, token (unique), expiresAt, status (PENDING / ACCEPTED / EXPIRED)
  • API: POST /api/v2/teams/[id]/invites (create), POST /api/v2/teams/invites/accept (accept by token)
  • Feature gate bypass: self-hosted instances skip all feature-gate checks (isSelfHosted: true → unlimited teams, invites, members)
  • Acceptance auto-adds user as TeamMember and syncs to all TeamProject linked projects

CoS Project Contributor Delegation

When CoS dispatches a task scoped to a project, it now resolves project contributors (via team membership sync) and selects the best-fit member using strategy priority:

  • Capability matchAgent relayGeneric execution
  • Team members synced to ProjectMember are first-class contributors — no separate delegation path
  • Strategy stored in cosExecution.delegationStrategy on each queue item

Billing Boundary

Billing follows team origin, not member origin. Platform-hosted teams are subject to feature gates; self-hosted teams bypass all gates.

  • Platform teams: feature gates enforced (member limits, invite quotas, team caps per plan tier)
  • Self-hosted teams: isSelfHosted: true → all gates bypassed, unlimited everything
  • Mixed membership is fine — a platform user can join a self-hosted team, inherits the team's billing rules

Open-Source Implementation Guide

Self-hosted DiviDen instances can implement the full teams architecture at zero cost. See the Teams API reference and Open Source page for details.

  • Run Prisma migration to add Team / TeamMember / TeamProject / TeamInvite tables
  • Set isSelfHosted: true on all team records → feature gates bypassed
  • Set originInstanceUrl to your instance's public URL
  • Wire invite acceptance page at /team/invite/[token]
  • Team profile pages at /team/[id], user profiles at /profile/[userId]
  • Optional: federate teams across instances via federation protocol
April 14, 2026Platform: v1.3.0Action Tags: 29+Smart Prompter: v2v1.3.0

Queue Confirmation Gate, CoS Execution, Chat Queue Control, Smart Prompter v2 & Onboarding Auto-Heal

Queue Confirmation Gate

Nothing enters the execution queue without explicit user approval. New pending_confirmation status sits above ready.

  • Divi dispatches tasks as pending_confirmation — user sees ✓ Approve / ✕ Reject in Queue panel
  • Approve → ready (enters execution pipeline). Reject → deleted
  • Applies to dispatch_queue and queue_capability_action action tags
  • Self-hosted bypass: queueAutoApprove: true via PATCH /api/v2/settings
  • New User.queueAutoApprove field (default: false)

Chief of Staff Execution Engine

CoS mode now proactively executes tasks — capability invocation, agent delegation via relay, or direct generic execution.

  • Sequential dispatch: pick highest-priority ready → execute → auto-dispatch next → repeat
  • Three strategies: Capability (email, meetings), Agent Relay (connected agents), Generic (Divi direct)
  • Execution metadata stored in cosExecution on queue item
  • CoS view redesign: status header, "Awaiting Approval" stat card

Chat-Based Queue Control

3 new action tags let users manage queue items entirely from conversation with Divi:

  • confirm_queue_item — approve pending items from chat
  • remove_queue_item — delete items from chat
  • edit_queue_item — update title/description/priority, triggers Smart Prompter re-optimization
  • Inline edit UI on QueueItemCard: → edit form → "Save & Optimize"
  • System prompt updated with full confirmation flow instructions

Smart Task Prompter v2

Agent-aware optimization engine that structures tasks for their target execution agent:

  • Resolves target agent's Integration Kit (taskTypes, requiredInputSchema, contextInstructions, usageExamples)
  • Generates displaySummary (≤120 chars for queue card) + optimizedPayload (structured for agent input schema)
  • Falls back to generic {task, context, deliverables, files, constraints} when no agent schema
  • CoS relay dispatch sends optimizedPayload when available
  • Queue cards show badge when optimized payload exists

Chat-First Onboarding

Complete rewrite of the onboarding flow — no more wizard walkthrough. Divi guides through setup in chat.

  • 6-phase flow: Welcome → Settings → Google Connect → Platform Tour → Webhooks → Launch
  • Interactive chat widgets for each phase (sliders, toggles, OAuth buttons, submit forms)
  • Resume on re-login: detects current phase, regenerates if needed
  • Settings adjustable anytime via [[show_settings_widget]] action tag

Onboarding Auto-Heal

Fixed a critical bug where users stuck in mid-onboarding (phases 1–5) had their queue, NOW panel, and Divi context blocked.

  • Dashboard detects stuck phase + existing data → auto-completes onboarding
  • QueuePanel and NowPanel always show real data regardless of onboarding state
  • System prompt only injects onboarding context when user genuinely has no data
  • PUT /api/settings now supports onboardingPhase updates directly

New v2 API Endpoints

  • POST /api/v2/queue/{id}/confirm — approve/reject pending items (Bearer auth)
  • GET /api/v2/settings — read mode, queueAutoApprove, diviName, goalsEnabled
  • PATCH /api/v2/settings — update mode + queue behavior. CoS auto-dispatches on switch.
  • OpenAPI spec updated with all new endpoints and pending_confirmation status

Landing: HowItWorks Loop Redesign

Flowchart redesigned from linear (1→5) to continuous loop architecture reflecting the actual system:

  • Step 1 (Signals) = entry point feeding into loop of 2→3→4→5→back to 2
  • Desktop: clockwise rectangular layout with animated arrows in all 4 directions
  • Mobile: vertical stack with loop container and SVG loop-back animation
  • Auto-play now cycles 1→2→3→4→5→2→3→4→5→... matching the loop
April 13, 2026Platform: v1.2.0Federation API: v2.1Agent Card: v0.5

Federation Pricing, Admin Marketplace & UX Improvements

Tiered & Dynamic Pricing

Marketplace agents now support four pricing models — from free through dynamic, agent-quoted pricing.

  • Pricing models: free, per_task, tiered, and dynamic
  • Tiered pricing: Volume-based rate tiers — price resolved by cumulative task count
  • Dynamic pricing: Agent returns a price quote mid-execution → checkout widget rendered in chat → user approves or declines before any charge
  • Two-phase execution model: immediate → quoted → approved / declined
  • New MarketplaceExecution fields: pricingPhase, quoteAmount, quoteCurrency, quoteMetadata, quotedAt, approvedAt
  • Pricing utility library: parsePricingConfig, serializePricingConfig, resolveExecutionPrice

Quote Approval Flow

  • New POST /api/marketplace/:id/execute/:executionId — approve or decline a quoted price
  • Approve triggers Stripe charge and updates revenue accumulators
  • Decline sets pricingPhase: 'declined' with no charge
  • GET .../:executionId returns full execution status including quote details
  • Chat widget onAction handler wired for purchase / decline actions

Federation Agent Sync — Full Config

The agent sync endpoints now accept comprehensive configuration during registration.

  • Pricing config: pricingModel, pricingConfig object (tiers, min/max for dynamic), pricePerTask, subscriptionPrice, taskLimit
  • Integration kit: taskTypes, contextInstructions, requiredInputSchema, outputSchema, usageExamples, executionNotes
  • Display: installGuide, commands, samplePrompts, version, agentCardUrl
  • Protocol flags: supportsA2A, supportsMCP

Single Agent Register / Update / Delete

  • PUT /api/v2/federation/agents/:remoteId — register or update a single agent (upsert)
  • GET /api/v2/federation/agents/:remoteId — retrieve agent details + revenue stats
  • DELETE /api/v2/federation/agents/:remoteId — remove agent, cascade-delete subscriptions and executions
  • Slug conflict returns 409 with actionable error

Admin Marketplace Expansion

  • Admin MarketplaceTab rewritten with 4 sub-tabs: Agents, Capabilities, + Capability, + Agent
  • Publisher attribution: publisherName, publisherType (platform / community / partner), publisherUrl
  • Approval workflow: approvalStatus (pending / approved / rejected) with admin PATCH control
  • 8 new Agent Skills capabilities seeded (skillFormat: true, source: agentskills.io)
  • Capabilities and Agents APIs unified to Bearer auth
  • User capability submission with approval flow

Marketplace UI Updates

  • Agent pricing badges: free (emerald), per_task (amber), subscription (purple), tiered (blue), dynamic (pink)
  • Tiered pricing display: "From $X/task"
  • Dynamic pricing display: "~$min–$max/task" or "Dynamic"
  • Capability cards show publisher name and skill badges

UX Improvements

  • Smart Task Assembly: Multi-step wizard replaces simple add-item form — define task type, objective, priority, context, expected outcome
  • Inbox → Email: Tab renamed across CenterPanel, keyboard nav, and global search
  • Settings resilience: Profile, Relay, and Divi settings panels now retry on load failure
  • Network Auto-Connect: /api/network/status endpoint; FederationManager triggers automatic registration check

API Documentation

  • OpenAPI spec updated with full /federation/agents batch and single-agent endpoints
  • Request/response schemas include pricingConfig, integration kit fields, and protocol flags
April 13, 2026Platform: v1.1.0MCP Server: v1.6Agent Card: v0.5

Capabilities Marketplace, Queue Gating & Integration-Gated Installs

Capabilities Marketplace

A new system for discovering, installing, customizing, and creating skill packs that extend what Divi can do for you.

  • 20 pre-seeded capabilities across productivity, communication, finance, HR, operations, and sales
  • Browse by category, search, or filter by installed — all from the Capabilities tab
  • Each capability has a prompt template with editable fields — customize behavior per-user after install
  • Capabilities inject resolved prompts into Divi's system context — Divi automatically uses them
  • Create your own capabilities: name, description, prompt, editable fields, integration type, pricing
  • Custom capabilities auto-install for the creator and appear in the marketplace for all users

Integration-Gated Installs

  • Capabilities tied to a specific integration (email, calendar, slack, CRM, etc.) require that integration to be connected before install
  • Browse API returns integrationConnected boolean per capability
  • UI shows lock badge on capabilities where the required integration isn't connected
  • Install attempts without the integration return 422 INTEGRATION_REQUIRED with actionable error message
  • Broad capabilities (integrationType: null) install without restriction

Queue Gating System

  • Before dispatching a task to the queue, the system checks if the user has a handler (installed agent, active capability, or built-in capability)
  • If no handler exists, task is blocked and Divi suggests relevant marketplace capabilities via [[suggest_marketplace:...]]
  • Inline marketplace suggestion cards render in chat with icon, name, description, and Install button
  • Smart scoring ranks marketplace suggestions by relevance to the blocked task

Pricing Enforcement

  • Capabilities support free or one-time purchase pricing only
  • Subscription pricing model is rejected at both create and install time
  • All 20 seeded capabilities are free

Capabilities API

  • GET /api/marketplace-capabilities — Browse all or installed only (?installed=true)
  • POST /api/marketplace-capabilities — Install capability (with integration gating) or create custom (action: 'create')
  • GET /api/marketplace-capabilities/:id — Detail view (prompt hidden until installed)
  • PATCH /api/marketplace-capabilities/:id — Update customizations, resolves prompt template
  • DELETE /api/marketplace-capabilities/:id — Uninstall capability

New Database Models

  • MarketplaceCapability — name, slug, description, icon, category, tags, integrationType, pricingModel, price, editableFields (JSON), prompt, promptVersion, status, featured, totalPurchases, avgRating, isSystemSeed
  • UserCapability — userId, capabilityId, status, customizations (JSON), resolvedPrompt, installedAt, lastUsedAt

Admin Instance Key Reset

  • Admin Instances tab now supports resetting API keys for federated instances
  • PATCH endpoint accepts apiKey and name fields
  • Resolves "API key mismatch" errors during re-registration without deleting the instance

Agent Card Resilience

  • /.well-known/agent-card.json no longer returns 500 when the federation config table is empty
  • Added try/catch fallback with sensible defaults for new or unconfigured instances

Other Changes

  • Settings → Integrations now shows a "Capabilities" quick link that opens the marketplace
  • System prompt Layer 16 updated with capability discovery guidance
  • dispatch_queue action tag now queue-gated — fails if no handler available
  • suggest_marketplace action tag for inline capability suggestions in chat
April 12–13, 2026MCP Server: v1.5Agent Card: v0.4A2A: v0.4

Federation v2, Multi-Account Sync, Admin Expansion

Instance Approval Process

  • New federated instances now register as pending_approval instead of auto-active
  • Admin must explicitly approve each instance before it appears on the network
  • Deactivating an instance cascade-suspends all its marketplace agents
  • Re-activating restores suspended agents to active status
  • Re-registration preserves existing approval status
  • Registration response now includes status field and endpoints.agentSync

Two-Tier Fee Model & Payment Validation

  • New POST /api/v2/federation/validate-payment endpoint
  • Internal transactions: configurable via env vars, can be 0% for closed teams
  • Network transactions: enforced minimum floor — 3% marketplace, 7% recruiting
  • Fee calculators: marketplace-config.ts and recruiting-config.ts

Multi-Account Google Sync

  • Calendar: Per-account filter checkboxes when >1 Google accounts connected, color-coded dividers
  • Drive: Account tabs (All / Local / per-account), table + grid view toggle
  • File Viewer: Inline preview for Google Docs/Sheets/Slides, PDFs, and images within DiviDen
  • New schema fields: CalendarEvent.accountEmail, Document.accountEmail, Document.mimeType, Document.fileSize, Document.thumbnailUrl

MCP v1.5 — 2 New Tools

  • marketplace_browse — Search and filter marketplace agents by category, pricing, skills
  • marketplace_unlock — Unlock paid agents with developer-shared access passwords
  • Agent card capabilities now include marketplacePasswordAccess and persistentConversation

A2A v0.4 — Agent Card Updates

  • New capabilities: marketplacePasswordAccess: true, persistentConversation: true
  • Agent card now advertises MCP tool names array for capability negotiation
  • Webhook events list exposed: task_dispatched, new_message, wake, queue_changed, relay_state_changed

Connections Redesign

  • 3 sub-tabs: "Find People" (default), "My Connections", "Relays"
  • Federation hidden behind collapsible in Connect by Email — less confusing for new users
  • Connection acceptance ceremony: modal with nickname, relationship type, trust level, notes
  • Directory now includes federated discoverable instances with "self-hosted" badge

Jobs → Paying Tasks Reframe

  • Renamed throughout: Job→Task, Hire→Assign, Worker→Contributor, Client→Poster
  • Dual projects on acceptance: poster gets oversight board, contributor gets execution board
  • Task breakdown field: becomes kanban cards on contributor's board
  • propose_task action tag: creates agent suggestions for human review before network posting
  • Inner-circle-first routing: card contributors → team → connections → network (last resort)
  • 5-star default: everyone starts at 5.0, real ratings don't factor until 5+ completions

Admin Dashboard Expansion

  • 11 tabs (up from 6): Overview, Users, Content, Activity, Instances, Marketplace, Usage, System Prompt, Tasks, Federation, Telemetry
  • New TasksTab: shows ALL tasks across users with filters/search
  • New UsageTab: feature adoption heatmap, per-user engagement, daily trends
  • New SystemPromptTab: read-only inspector with token estimates per group
  • Pending instances show "Pending Approval" badge with pulsing amber dot

Settings Reorganization

  • 6 tabs (down from 8): Your Divi, General, Integrations, Network, Payments, Alerts
  • Relay + Federation merged into "Network" tab
  • Mobile-friendly: horizontally scrollable tab bar
  • Default tab changed to "Your Divi"

Other Changes

  • Comprehensive developer documentation at /documentation
  • Chat conversation continuity: 50-message context window, soft-clear with timestamps
  • Profile view + photo upload to S3 with presigned URLs
  • Marketplace agent access passwords for developer-shared free access
  • Comms redesign: relay-based agent-to-agent communication log
  • Google OAuth integration for Gmail, Calendar, Drive data sync
  • Smart triage: task-first architecture with Levenshtein card matching
  • Due date discipline: Divi infers deadlines from context with configurable defaults
April 11, 2026MCP Server: v1.4.0Agent Card: v0.3.0Agent Install/Uninstall

FVP Integration Brief + Agent Marketplace Build

14 FVP proposals, Agent Integration Kit, Install/Uninstall lifecycle, dynamic MCP tools, and marketplace coherence.

1. Database Schema Changes

New Migrations to Apply

Four migrations since last push:

Migration: 20260411_add_relay_threading_and_artifacts

-- FVP Brief Proposals #2 and #3: Relay Threading + Structured Artifacts
ALTER TABLE "agent_relays" ADD COLUMN "threadId" TEXT;
ALTER TABLE "agent_relays" ADD COLUMN "artifactType" TEXT;
ALTER TABLE "agent_relays" ADD COLUMN "artifacts" TEXT;
CREATE INDEX "agent_relays_threadId_idx" ON "agent_relays"("threadId");

Migration: 20260411_add_portable_reputation

-- FVP Brief Proposal #7: Portable Reputation
ALTER TABLE "reputation_scores" ADD COLUMN IF NOT EXISTS "isFederated" BOOLEAN NOT NULL DEFAULT false;
ALTER TABLE "reputation_scores" ADD COLUMN IF NOT EXISTS "endorsements" TEXT;
ALTER TABLE "reputation_scores" ADD COLUMN IF NOT EXISTS "federatedScore" DOUBLE PRECISION NOT NULL DEFAULT 0;

Migration: 20260411_add_agent_integration_kit

-- Agent Integration Kit: 7 new fields on MarketplaceAgent
ALTER TABLE "marketplace_agents" ADD COLUMN "taskTypes" TEXT;
ALTER TABLE "marketplace_agents" ADD COLUMN "contextInstructions" TEXT;
ALTER TABLE "marketplace_agents" ADD COLUMN "requiredInputSchema" TEXT;
ALTER TABLE "marketplace_agents" ADD COLUMN "outputSchema" TEXT;
ALTER TABLE "marketplace_agents" ADD COLUMN "usageExamples" TEXT;
ALTER TABLE "marketplace_agents" ADD COLUMN "contextPreparation" TEXT;
ALTER TABLE "marketplace_agents" ADD COLUMN "executionNotes" TEXT;

Migration: 20260411_add_agent_install_management

-- Agent Install/Uninstall lifecycle on MarketplaceSubscription
ALTER TABLE "marketplace_subscriptions" ADD COLUMN "installed" BOOLEAN NOT NULL DEFAULT false;
ALTER TABLE "marketplace_subscriptions" ADD COLUMN "installedAt" TIMESTAMP(3);
ALTER TABLE "marketplace_subscriptions" ADD COLUMN "uninstalledAt" TIMESTAMP(3);

Prisma Schema Updates

AgentRelay model — 3 new fields

  • threadId String?Groups multi-turn relay conversations
  • artifactType String?One of: text, code, document, data, contact_card, calendar_invite, email_draft
  • artifacts String?JSON-encoded structured artifact payload

ReputationScore model — 3 new fields

  • isFederated Boolean @default(false)Whether score includes cross-instance data
  • endorsements String?JSON array of HMAC-signed attestation objects
  • federatedScore Float @default(0)Weighted federation reputation score

MarketplaceAgent — Integration Kit model — 7 new fields

  • taskTypes String?JSON array of task type strings this agent handles
  • contextInstructions String?How to prepare context before invoking this agent
  • requiredInputSchema String?JSON schema describing required input fields
  • outputSchema String?JSON schema describing output format
  • usageExamples String?JSON array of example invocations with expected results
  • contextPreparation String?Steps Divi should take before delegating to this agent
  • executionNotes String?Runtime notes — timeouts, retries, known limitations

MarketplaceSubscription — Install Lifecycle model — 3 new fields

  • installed Boolean @default(false)Whether agent is actively installed in user memory
  • installedAt DateTime?Timestamp of last install
  • uninstalledAt DateTime?Timestamp of last uninstall

2. New Library Files

Core Libraries (confirm present)

FilePurpose
entity-resolution.tsUniversal entity resolution across contacts, connections, cards, events, emails, relays, team members
task-exchange.tsAuto-propose tasks to best-matched connections by skill/capacity/reputation
webhook-push.tsPush relay state changes to connected instances via webhook
relay-queue-bridge.tsBidirectional sync between relays and queue items
ambient-learning.tsSignal capture, pattern synthesis, ambient relay learning loop
activity.tslogActivity() — universal event logger, fire-and-forget
now-engine.tsDynamic NOW scoring: priority, impact, deadline, calendar gaps, relay freshness
brief-assembly.tsContext brief assembly + skill matching + project context
telemetry.tsRequest/error logging, client IP tracking
job-matcher.tsJob-to-profile matching engine
queue-dedup.tsQueue item deduplication
queue-dispatch.tsChief of Staff auto-dispatch
cos-sequential-dispatch.tsSequential task dispatch in CoS mode

Federation Intelligence Layer (FVP Tier 4)

FilePurposeKey Exports
federation/pattern-sharing.tsCross-instance ambient learning pattern exchangeexportShareablePatterns(), importSharedPatterns(), getNetworkLearningDigest()
federation/graph-matching.tsSerendipity engine — triadic closure, complementary expertise, structural bridgesbuildLocalGraph(), findSerendipityMatches(), exportGraphTopology()
federation/composite-prompts.tsNetwork briefing aggregation from federated peersgenerateLocalBriefingContribution(), compileNetworkBriefing()
federation/task-routing.ts7-signal weighted scoring for network-level task routingrouteTask(), getRoutingIntelligenceDigest()

Task Routing Scoring Weights

skill match:     30%
completion rate: 20%
capacity:        15%
trust:           10%
reputation:      10%
latency:          5%
domain proximity: 10%

Pattern Sharing Rules

  • • Only synthesized/aggregated patterns shared — never raw signals
  • • 20% federation discount on remote pattern confidence
  • • Weighted confidence merging when patterns overlap
  • • Patterns anonymized before export

3. New API Routes

Federation Endpoints

RouteMethodsAuthPurpose
/api/federation/patternsGET, POSTx-federation-tokenExchange anonymized ambient learning patterns
/api/federation/briefingGET, POSTSession / x-federation-tokenNetwork briefing aggregation
/api/federation/routingGET, POSTSession / x-federation-tokenIntelligent task routing with 7-signal scoring
/api/federation/graphGET, POSTSession / x-federation-tokenSerendipity matches + graph topology export
/api/federation/mcpPOSTx-federation-tokenCross-instance MCP tool invocation (trust-gated)
/api/federation/entity-searchGET, POSTx-federation-tokenPrivacy-respecting cross-instance entity lookup
/api/federation/jobs/applyPOSTx-federation-tokenRemote job application routing
/api/federation/reputationGET, POSTx-federation-tokenPortable reputation with HMAC-signed attestations
/api/federation/project/[id]/contextGETx-federation-tokenCross-instance project dashboard

Marketplace Endpoints (NEW)

RouteMethodsAuthPurpose
/api/marketplaceGET, POSTSessionList / register marketplace agents (POST auto-installs own agents)
/api/marketplace/[id]GET, PUT, DELETESessionAgent detail, update, remove
/api/marketplace/[id]/installPOST, DELETESessionInstall (POST) / Uninstall (DELETE) — payment-gated for paid agents
/api/marketplace/[id]/executePOSTSessionExecute agent task with input payload
/api/marketplace/[id]/subscribePOST, DELETESessionSubscribe/unsubscribe — unsubscribe cascades to uninstall + memory clear
/api/marketplace/[id]/ratePOSTSessionRate an agent (1-5 stars)
/api/marketplace/earningsGETSessionAgent creator earnings dashboard
/api/marketplace/fee-infoGETPublicPlatform fee structure

Other Endpoints (confirm present)

RouteMethodsPurpose
/api/entity-resolveGET, POSTUniversal entity resolution
/api/jobsGET, POSTNetwork job board CRUD
/api/jobs/matchGETJob-to-profile matching
/api/jobs/[id]GET, PUT, DELETEIndividual job operations
/api/jobs/[id]/applyPOSTJob applications
/api/reputationGET, POSTReputation scores
/api/briefsGETBrief assembly receipts
/api/nowGETDynamic NOW engine scored items
/api/activityGETUniversal activity feed (filterable by category)
/api/ambient-learning/synthesizeGET, POSTTrigger pattern synthesis
/api/mcpGET, POSTMCP Server v1.4.0
/api/a2aPOSTA2A protocol endpoint
/api/a2a/playbookGETOperational playbook
/api/main-connectPOSTConnection ceremony
/api/main-disconnectPOSTDisconnection
/api/main-handoffGETHandoff brief
/api/statusGETEnhanced health check (DB + migrations + env)

4. MCP Server Updates (v1.4.0)

File: src/app/api/mcp/route.ts

New Tools Added (FVP Build)

ToolDescription
relay_thread_listList relay threads for the current user
relay_threadsGet all relays in a specific thread
relay_sendSend a relay to a connection
entity_resolveCross-surface entity resolution (contacts, connections, cards, events, emails, relays, teams)
serendipity_matchesGraph topology matching — "you should meet X" recommendations
route_taskNetwork-level task routing with 7-signal weighted scoring
network_briefingComposite cross-instance network pulse

Dynamic Marketplace Tools (v1.4.0 — NEW)

tools/list now dynamically includes installed marketplace agents as tools. Each installed agent becomes a marketplace_{slug} tool.tools/call handles marketplace_* prefixed tools — proxies to agent endpoint.

How It Works

  • • Install an agent → it appears as an MCP tool
  • • Uninstall → tool disappears from tools/list
  • • Tool name: marketplace_{slug} (e.g., marketplace_research_agent)
  • • Input schema pulled from agent's Integration Kit requiredInputSchema
  • • External MCP clients see your installed agents as native tools

Full Tool Inventory (20 static + dynamic)

# Static tools (20)
queue_list, queue_add, queue_update,
contacts_list, contacts_search,
cards_list, mode_get, briefing_get, activity_recent,
job_post, job_browse, job_match, reputation_get,
relay_thread_list, relay_threads, relay_send,
entity_resolve,
serendipity_matches, route_task, network_briefing

# Dynamic tools (per-user, based on installed agents)
marketplace_{slug}  — one per installed agent

5. Agent Card Updates (v0.3.0)

File: src/app/.well-known/agent-card.json/route.ts

New Capabilities

streaming: true
pushNotifications: true
stateTransitionHistory: true
threading: true
structuredArtifacts: true
statusUpdates: true
webhookPush: true

Supported Methods

tasks/send
tasks/get
tasks/list
tasks/respond
tasks/cancel
tasks/update_status
agent/info

Dynamic Skills Array (v1.4.0 — NEW)

Skills array now dynamically includes installed marketplace agents. Each installed agent becomes a skill entry with its task types, and mcpTools includes marketplace_{slug} entries.

Artifact Types

textcodedocumentdatacontact_cardcalendar_inviteemail_draft

Federation Endpoints in Card

federation.connect      /api/federation/connect
federation.relay        /api/federation/relay
federation.jobs         /api/federation/jobs
federation.jobApply     /api/federation/jobs/apply
federation.reputation   /api/federation/reputation
federation.mcp          /api/federation/mcp
federation.entitySearch /api/federation/entity-search
federation.patterns     /api/federation/patterns
federation.briefing     /api/federation/briefing
federation.routing      /api/federation/routing
federation.graph        /api/federation/graph

Webhook Events

task_dispatchednew_messagewakequeue_changedrelay_state_changed

6. System Prompt Changes

New sections added: Federation Intelligence (FVP Brief) + Marketplace Agent Loading (Layer 11)

Action TagSyntaxPurpose
entity_resolve[[entity_resolve:{"query":"email/name/domain"}]]Cross-surface entity resolution
serendipity_matches[[serendipity_matches:{}]]Graph topology matching for connection recommendations
route_task[[route_task:{"taskDescription":"...","taskSkills":["..."],"taskType":"..."}]]Network-level intelligent task routing
network_briefing[[network_briefing:{}]]Composite cross-instance network pulse
Layer 11 — Marketplace Agent Loading (NEW):
  • • System prompt loads only agents with installed: true
  • • Each installed agent's identity, task types, and context instructions loaded into prompt
  • • Non-installed agents: Divi suggests [[install_agent:...]] when relevant
  • • Proactively surface serendipity matches when relevant
  • • Use route_task for skill-matched delegation
  • • Pull network briefings to stay current on federation activity

7. Action Tags Updates

Modified Tags

TagChange
relay_requestNow supports threadId and parentRelayId for threading
relay_broadcastChecks recipient relay preferences before sending
relay_ambientChecks recipient relay preferences before sending

New Tags (FVP)

TagPurpose
entity_resolveResolves entities across all data surfaces

New Tags (Marketplace — NEW)

TagSyntaxPurpose
install_agent[[install_agent:{"agentId":"..."}]]Install a marketplace agent — payment-gated for paid agents, loads Integration Kit into memory
uninstall_agent[[uninstall_agent:{"agentId":"..."}]]Uninstall agent — clears all memory keys for the agent
list_marketplace[[list_marketplace:{"category?":"...","search?":"..."}]]Browse marketplace — enriched with installed/subscribed/isOwnAgent/taskTypes
execute_agent[[execute_agent:{"agentId":"...","input":{}}]]Execute a marketplace agent task with structured input
subscribe_agent[[subscribe_agent:{"agentId":"...","tier":"..."}]]Subscribe to a paid agent — required before install for paid agents

8. Webhook Push System

New event: relay_state_changed

pushRelayStateChanged() fires when relay status transitions (pending → delivered → completed). Wired into:

  • • Relay PATCH handler
  • • Action tags (relay_request, relay_respond)

Webhook config stored in ServiceApiKey with service='webhook_push'.

9. Agent Marketplace System (NEW)

Complete agent lifecycle: register → browse → subscribe → install → execute → uninstall. Agents are only loaded into Divi's context when explicitly installed.

Agent Integration Kit

Seven new fields on MarketplaceAgent that tell Divi how to use an agent — not just that it exists.

What the Kit Contains

  • taskTypes — what this agent can do
  • contextInstructions — how to prepare context
  • requiredInputSchema — JSON schema for input
  • outputSchema — JSON schema for output
  • usageExamples — example invocations
  • contextPreparation — pre-delegation steps
  • executionNotes — timeouts, retries, limits

Memory Keys (per agent)

agent:{id}:identity        (tier 1)
agent:{id}:task_types      (tier 1)
agent:{id}:context_instructions (tier 2)
agent:{id}:preparation_steps    (tier 2)
agent:{id}:input_schema    (tier 2)
agent:{id}:output_schema   (tier 2)
agent:{id}:usage_examples  (tier 3)
agent:{id}:execution_notes (tier 3)

Install / Uninstall Lifecycle

browsesubscribe (if paid)installexecuteuninstall
ActionWhat Happens
Install (free agent)Auto-creates subscription + sets installed=true + loads all Integration Kit memory keys
Install (paid agent)Requires active subscription — sets installed=true + loads memory
UninstallSets installed=false + uninstalledAt timestamp + deletes all memory keys for agent
UnsubscribeCascades to uninstall + clears memory + removes subscription
Register own agentAuto-installs immediately — your own agents are always available

Coherence Rules

  • Own agents: Auto-installed on registration, isOwnAgent: true flag in list responses
  • MCP dynamic tools: Only installed agents appear as marketplace_{slug} tools
  • A2A dynamic skills: Agent card skills array reflects installed agents
  • System prompt: Layer 11 loads only installed: true agents into context
  • UI: Install/Uninstall toggle, green "Installed" badge with pulse animation

10. Changelog Entry

Two entries in src/lib/updates.ts:

Install / Uninstall — Divi Only Learns What You Need (NEW)

April 11, 2026

marketplaceagentsmemorymcpa2aintegration-kit

FVP Integration Brief — 14 Proposals, One Build

April 11, 2026 @ 11:45 PM

federationprotocola2amcpintelligencefvpnetwork

11. PWA / Layout Fixes

globals.css — PWA standalone mode

@media (display-mode: standalone) {
  html {
    height: 100%;
    overflow: hidden;
    overscroll-behavior: none;
  }
  body {
    height: 100%;
    overflow: hidden;
    overscroll-behavior: none;
    padding-top: env(safe-area-inset-top, 0px);
    padding-bottom: env(safe-area-inset-bottom, 0px);
  }
  .app-shell {
    height: 100%;
  }
}

layout.tsx — Body class

- <body className="min-h-full">
+ <body className="min-h-full overflow-x-hidden">

12. Developer Experience (DX) Additions

FilePurpose
scripts/setup.shOne-command setup for macOS/Linux/WSL
scripts/setup.ps1One-command setup for Windows PowerShell
docker-compose.ymlLocal PostgreSQL 16 via Docker
.env.exampleClear Required/Optional variable documentation
README.mdQuick Start-first, troubleshooting FAQ sections

Health Check Enhancement

GET /api/status now returns: database connection status + user count, migration validation, environment variable validation. Returns 200 (healthy) or 503 (unhealthy).

13. MCP Registry Submission Kit

FilePurpose
public/mcp-registry/server.jsonOfficial MCP Registry format
public/mcp-registry/README.mdCopy-paste submission kit for 5 registries (Official, Smithery, PulseMCP, Glama, mcp.so)

14. Files Changed Summary

New Files

# Federation Intelligence (FVP)
src/lib/federation/pattern-sharing.ts
src/lib/federation/graph-matching.ts
src/lib/federation/composite-prompts.ts
src/lib/federation/task-routing.ts
src/lib/entity-resolution.ts
src/lib/task-exchange.ts
src/app/api/federation/patterns/route.ts
src/app/api/federation/briefing/route.ts
src/app/api/federation/routing/route.ts
src/app/api/federation/graph/route.ts
src/app/api/federation/mcp/route.ts
src/app/api/federation/entity-search/route.ts
src/app/api/federation/jobs/apply/route.ts
src/app/api/federation/reputation/route.ts
src/app/api/entity-resolve/route.ts

# Marketplace Install/Uninstall
src/app/api/marketplace/[id]/install/route.ts

# Migrations
prisma/migrations/20260411_add_relay_threading_and_artifacts/
prisma/migrations/20260411_add_portable_reputation/
prisma/migrations/20260411_add_agent_integration_kit/
prisma/migrations/20260411_add_agent_install_management/

Modified Files

prisma/schema.prisma              — AgentRelay (3), ReputationScore (3), MarketplaceAgent (7), MarketplaceSubscription (3)
src/app/api/mcp/route.ts           — v1.4.0, dynamic marketplace tools
src/app/.well-known/agent-card.json/route.ts — dynamic skills + marketplace MCP tools
src/app/api/marketplace/route.ts   — auto-install on registration, Integration Kit memory loading
src/app/api/marketplace/[id]/subscribe/route.ts — unsubscribe cascades to uninstall + memory clear
src/lib/system-prompt.ts           — Layer 11 marketplace agent loading + install suggestions
src/lib/action-tags.ts             — install_agent, uninstall_agent, list_marketplace, execute_agent, subscribe_agent
src/lib/webhook-push.ts            — relay_state_changed event
src/lib/updates.ts                 — Install/Uninstall changelog entry
src/components/dashboard/MarketplaceView.tsx — Install/Uninstall toggle, Installed badge
src/app/globals.css                — PWA viewport fix
src/app/layout.tsx                 — overflow-x-hidden on body
src/app/dashboard/page.tsx         — Mobile flex layout fix
src/components/dashboard/ChatView.tsx — flex-shrink-0 on header/input

15. Deployment Checklist

# 1. Pull latest code
git pull origin main

# 2. Install dependencies
yarn install

# 3. Generate Prisma client
yarn prisma generate

# 4. Apply migrations
yarn prisma migrate deploy

# 5. Build
yarn build

# 6. Verify
curl https://os.dividen.ai/api/status
curl https://os.dividen.ai/.well-known/agent-card.json | jq '.version'
curl -s https://os.dividen.ai/api/mcp -X POST \
  -H 'Content-Type: application/json' \
  -d '{"method":"server/info"}' | jq '.result.version'

Expected Results

  • /api/status → 200 with all checks passing
  • • Agent card version → 0.5.0
  • • MCP server version → 1.6.0
  • tools/list → 22 static tools + dynamic marketplace tools

16. What's NOT in This Build (Future)

  • • No UI for federation intelligence (patterns, graph, briefing, routing are API + MCP only — Divi surfaces them conversationally)
  • • No admin dashboard for federation analytics (telemetry captures data, dashboard TBD)
  • • No automated pattern sharing schedule (manual or Divi-initiated only)
  • • No multi-instance graph visualization (topology data is exportable, viz TBD)
  • • No marketplace analytics dashboard (earnings endpoint exists, UI TBD)
  • • No agent versioning (agents update in place — versioning planned for future)

Download a plain-text copy of this page

Last updated: May 30, 2026

DiviDen Command Center -- Last updated May 30, 2026