# AI Workspace Protocol v1 Status: draft canonical contract. Date: 2026-06-19 Owner: NODE.DC AI Workspace Assistant. This document fixes the platform contract for cross-application assistant execution. It exists to prevent assistant capabilities from spreading through prompt-only rules, app-specific shortcuts, worker code, or transport glue. ## Goal AI Workspace Protocol v1 defines how a user request from any NODE.DC surface is converted into a safe, auditable capability call across HUB, OPS, ENGINE, and future platform applications. The protocol must support hundreds of functional blocks without changing the worker for every new feature. ## Layer Ownership ### Client Surface Examples: ENGINE UI, OPS UI, HUB UI, future platform apps. Owns: - visible UI state; - current surface context; - active selected objects; - user-facing preview and confirmation UI. Must not own: - final permission enforcement; - platform action registry; - backend actor identity; - raw internal tokens. ### AI Workspace Assistant Owns: - assistant thread/session metadata; - selected executor; - run profile construction; - tool manifest construction; - action routing entrypoint; - policy prompts derived from structured contracts; - run-scoped entitlement resolution; - public redaction of run diagnostics. Must be the only platform layer that decides which assistant tools are exposed to a run. ### Ontology Core Owns: - canonical entities and relations; - aliases and resolver rules; - assistant access policy; - assistant action registry; - risk policy; - confirmation policy; - app-owned adapter descriptors. Must not own: - HUB user source data; - OPS card source data; - ENGINE workflow source data; - transport routing; - worker execution. ### AI Hub Owns: - remote worker rendezvous; - pairing; - dispatch relay; - message delivery; - proxying to trusted internal services when configured. Must not own: - assistant action catalog; - business permissions; - prompt policy; - domain-specific decisions. ### Worker Owns: - local/remote executor runtime; - Codex/model process launch; - per-run isolated config; - tool relay based on the received manifest; - event/result streaming. Must not own: - HUB/OPS/ENGINE action IDs as hardcoded product knowledge; - role rules; - app-level permission decisions; - long-lived platform tokens; - app-owned adapters. ### App API / MCP Examples: Launcher/HUB API, OPS Gateway, ENGINE API. Owns: - source-of-truth data; - object-level ACL; - final enforcement; - app-native audit; - app-owned adapter routes. Must reject invalid or forged requests even when AI Workspace allowed the plan. ## Canonical Flow ```mermaid flowchart LR U["User request"] --> C["Client surface context"] C --> A["AI Workspace Assistant"] A --> O["Ontology Core: resolve capability and policy"] O --> A A --> P["Run profile + tool manifest"] P --> W["Worker or in-process executor"] W --> R["Tool relay"] R --> API["App API / MCP"] API --> AUD["Audit + result"] AUD --> A A --> C ``` Read actions may execute after the assistant selects a structured action. Write or privileged actions must use preview first, then explicit confirmation, then execute. Destructive actions are not exposed as assistant capabilities. ## Run Profile Schema version: ```text ai-workspace.run-profile.v1 ``` Required top-level fields: ```json { "schemaVersion": "ai-workspace.run-profile.v1", "runId": "uuid", "createdAt": "2026-06-19T00:00:00.000Z", "expiresAt": "2026-06-19T00:10:00.000Z", "audience": "ai-workspace-worker", "requestId": "uuid-or-nonce", "owner": {}, "sourceSurface": "engine", "activeContext": {}, "toolProfile": {}, "policyPrompt": "derived text", "integrity": {} } ``` Required rules: - `expiresAt` must be short-lived. - `requestId` must be unique enough for replay protection. - `audience` must name the intended recipient class. - `integrity` must contain a server-side hash/signature before production use. - public diagnostics must redact tokens, headers, secrets, and raw internal URLs. ## Actor Claims Actor claims are backend facts, not user text. Canonical owner shape: ```json { "ownerKey": "email:dcctouch@gmail.com", "userId": "platform-user-id", "email": "dcctouch@gmail.com", "role": "root-admin", "groups": ["nodedc:superadmin"] } ``` Rules: - client-supplied actor headers are not trusted directly; - trusted App BFF or AI Workspace must resolve actor claims; - target App API must verify the actor again against app-native state; - app adapters may receive claims, but never treat them as the only authority. ## Tool Profile Schema version: ```text ai-workspace.tool-profile.v1 ``` Shape: ```json { "schemaVersion": "ai-workspace.tool-profile.v1", "enabledToolPacks": ["engine", "ops", "ndc-agent-core"], "mcpServers": [], "assistantActions": { "schemaVersion": "ai-workspace.assistant-actions.v1", "endpoint": "/api/ai-workspace/assistant/v1/actions", "actionIds": ["hub.user.read_admin_summary"], "phases": ["preview", "execute"], "tokenRef": "run-token:assistant-actions" } } ``` Rules: - action IDs come from AI Workspace Assistant + Ontology Core, not from ENGINE local routes or worker source code; - worker may read and expose a generic tool based on this manifest; - worker must not hardcode the product meaning of an action ID; - `tokenRef` or server-side relay is preferred over embedding raw bearer tokens; - if a bearer token is unavoidable during a scaffold phase, it must be short-lived, run-scoped, redacted from public output, and removed before production. ## Assistant Action Call Endpoint: ```text POST /api/ai-workspace/assistant/v1/actions ``` Preview request: ```json { "phase": "preview", "input": { "actionId": "hub.user.block", "targetUserId": "user_123", "idempotencyKey": "hub.user.block:actor:target" } } ``` Execute request: ```json { "phase": "execute", "input": { "actionId": "hub.user.block", "targetUserId": "user_123", "confirmationToken": "preview-token", "idempotencyKey": "hub.user.block:actor:target" } } ``` Rules: - the assistant selects `actionId` after understanding natural language; - preview must return a human-readable expected effect; - write execution must require a matching confirmation token; - write execution must include an idempotency key; - app-owned adapter must re-check permissions; - delete/hard destructive requests resolve to forbidden with safe alternatives. ## Worker Protocol The worker receives a run payload and starts the configured executor. Worker responsibilities: - create isolated per-run config; - expose only tools described by the run profile; - relay tool calls to AI Workspace or app MCP endpoints; - stream model/tool events back to AI Workspace; - redact runtime secrets from logs. Worker non-responsibilities: - it does not decide whether a HUB admin can block a user; - it does not know all HUB/OPS/ENGINE action IDs in source code; - it does not store internal platform tokens after a run; - it does not bypass AI Workspace with raw app API calls. ## Hub Protocol AI Hub may proxy: - worker dispatch; - worker events; - assistant action requests to AI Workspace Assistant. AI Hub must not: - build action catalogs; - evaluate assistant access policy; - mutate app data directly; - accept public actor claims as final truth. ## App Adapter Rules Every app adapter must define: - owning app: `hub`, `ops`, `engine`, or another platform app; - allowed method/path list; - read/write/destructive classification; - required native scope or role; - idempotency behavior for writes; - audit event output; - confirmation mode; - safe alternatives for forbidden actions. HUB examples: - read admin summary; - list pending invites; - list pending access requests; - block/unblock user; - disable membership; - change NDC Core Assistant role. OPS examples: - create/update card; - append report/comment; - read project/card context; - update structured card blocks. ENGINE examples: - read workflow graph; - select workflow/agent node; - inspect workflow errors; - change workflow ACL only through ENGINE-owned adapter. ## Security Requirements Production requirements: - all cross-service traffic uses TLS or an equivalent private secure channel; - no long-lived internal token in worker, prompt, UI, or public diagnostics; - run tokens are scoped by run, audience, capability, and expiry; - run profile integrity is hash/signed by AI Workspace; - writes require idempotency keys; - privileged writes require preview and confirmation token; - target App API performs final authorization; - all writes produce audit events; - app APIs reject forged actor headers from public clients; - secret redaction is covered by smoke tests. ## Localhost vs Production Localhost and production must use the same logical protocol: ```text client -> AI Workspace Assistant -> Ontology Core -> AI Hub/Worker -> App API ``` Allowed differences: - URLs; - network transport; - token issuer; - deployment topology. Not allowed: - separate local-only business rules; - Engine-only action catalog; - worker-only permission model; - production-only policy path that contradicts local behavior. ## Migration From Current Scaffold Current scaffold deviations to remove: 1. ENGINE local bridge owns fallback `ASSISTANT_ACTION_TOOL_PROFILE`. 2. Worker prompt includes concrete HUB action IDs. 3. Worker receives or stores assistant action gateway bearer token. 4. Engine MCP server knows gateway URL/token and owner header rules. 5. AI Hub forwards owner headers without signed actor context. Migration steps: 1. Move assistant action profile source of truth to AI Workspace Assistant. 2. Generate action IDs from Ontology Core action registry. 3. Replace raw token passthrough with run-scoped token or server-side relay. 4. Convert worker action support to generic manifest-driven relay. 5. Add protocol tests for boundary violations. 6. Mark current scaffold paths as legacy/fallback until removed. ## Boundary Tests Minimum tests before production rollout: - public run profile never exposes bearer tokens or internal secrets; - worker source does not contain product action ID allowlists; - ENGINE local routes do not contain HUB action registry; - AI Hub does not evaluate business policy; - forged public actor headers are rejected by app API; - write execution without confirmation token is blocked; - write replay with same idempotency key is safe; - delete actions are unavailable and resolve to safe alternatives; - local and production profiles share the same schema. ## Acceptance Criteria The protocol is ready for product slices when: - adding a new assistant function changes Ontology Core and the target app adapter, not the worker; - AI Workspace Assistant remains the only run profile source of truth; - Hub remains transport-only; - worker can be installed once and keep working as capabilities grow; - target apps remain final enforcement owners; - no prompt-only rule is required for safety-critical behavior.