An SI's key, text or click aimed at an app reaches the window it is working in (SP97 T9)
The bridge sends a call that names only an app (app_id, wm_class or pid) to that app's first window, focusing it first. After a take-over, Kamo's old window sit...
Labels with the principal-private fallback, the source ledger with encrypted excerpts, withheld items and held decisions; mount the platform key (KamoCollab CP07 Task 16)
LabelService resolves labels through CP05's DisclosureLabelClient over the six owners (60 s cache per org and ref; inherited refs to depth 3); a ref no owner la...
The org graph and its eviction, the disclosure settings cache, Redis hash operations and the run context endpoints (KamoCollab CP07 Task 15)
Workstation_open_kamo says where Kamo opened and never to type a password (SP97 T9)
After a supervisor's take-over (which ends the SI's session) the older browser windows on an SI workstation show Kamo's sign-in page. On the next request Ava op...
Declare the disclosure recorder, carry the policy columns, and pre-mint the audit id in a CallLedger (KamoCollab CP08 Task 9)
DisclosureLedgerConfig declares DisclosureRecorder, with **************** joining @EnableJpaRepositories in the same commit. mcp_tool_call_audit gains policy_de...
The link reference text names the six kinds CP05 appends (KamoCollab CP05 Task 7)
A team chat line is SEND_INTERNAL_MESSAGE, free while no charter layer names it (KamoCollab CP04 Task 20)
Defect 5: ChatPack plans a CHAT post as SEND_INTERNAL_MESSAGE (support stays SEND_WEBCHAT_MESSAGE), chat_send/chat_mention declare it in alsoClasses, and chat_f...
Pin an SI's tools/list as origin/main answers it, before CP04 adds SEND_INTERNAL_MESSAGE (KamoCollab CP04 Task 20)
R1-1: the snapshot is the whole tools/list answer for an SI with every right, every app and a defaults-only charter, taken from origin/main fb83529.
DDL for the SI tool-call policy verdict columns (KamoCollab CP08 T2)
Three nullable ADD COLUMN IF NOT EXISTS on mcp_tool_call_audit: policy_decision, policy_rule, disclosure_event_id (spec §5.1, D11; master §6.10). Hand-applied b...
A colleague call refused for consent or hours says how to cite their own request (SP95-T29-1)
Task 29 step 3, live: the owner asked an AUTONOMOUS AI to call them. The model called phone_call without onRequestOf (nothing needed approval), K6 refused NO_VO...
A perception read that hands over nothing from outside taints the run INTERNAL, so a cited request can stand (SP95-F-1)
Every run's PERCEIVE calls notifications_list, mail_list_unread and calendar_list_events with the run id. All three are untrusted and none said where its conten...
Phone_call says plainly when the org's outbound policy blocks a number, and names text or email instead (SP93 T12)
K6 refuses a number the phone server's toll-fraud guards block with 409 BLOCKED_BY_OUTBOUND_POLICY (SP93 T11). phone_call now answers it as its own status, with...
A verified request from someone who may approve is the approval: an ON_REQUEST row, the action at once, its outcome on K3b (SP95 T34)
When the charter asks for approval and the AI cites a verified request (onRequestOf), K3 is asked with mode ON_REQUEST, the requester and the reference. An APPR...
An AI may cite the request it acts on (onRequestOf), checked by reading it; a run's taint says where it came from (SP95 T31)
Every AI write that may need approval takes the optional onRequestOf (chat:<conversation>/<message>, task:<item>, task:<item>/comment:<id>) on tools/list. The p...
Rag_search takes audience PUBLIC, the search the public may read (SP95 T12)
An AI on a phone call answers an anonymous caller, so it searches only the published articles the public may read, never notes (spec D12). The optional audience...
Approvals_request sends a class a tool performs to that tool; the charter stamp keeps tools fresh (SP95 T10)
approvals_request refuses an action class a catalogue tool performs with INVALID_ARGUMENTS USE_TOOL {tool, tools, actionClass}, or NO_TOOL_FOR_YOU when the call...
An upstream image follows the wrapped text instead of filling it (SP98 T25A)
A workstation screenshot is an MCP image block of about 250 KB of base64. The untrusted wrap serialized it into the result text, so the text budget held base64 ...
Phone_call calls a colleague by memberId, as PLACE_INTERNAL_CALL (SP95 T9)
A colleague is named by memberId, never by number: the planner reads their SecurityService call card and dials the cell, else the phone, else the work number on...
Use the RECIPIENTS_UNKNOWN constant instead of a string literal
Review round-1 NIT: the constant was declared and never referenced, so it and the literal in withDirectoryHint could silently drift apart if either were ever ed...
A rejected guessed recipient tells the model to look the person up
EmailService now refuses a send whose recipient names one of the organization's own mail domains but matches no mailbox, alias or member (RECIPIENTS_UNKNOWN, a ...
The Tool Plane needs per-member sticky routing before a second replica
The replicas comment said scaling needed only a PodDisruptionBudget. Since SP05 Task 31 each pod pools its own clients, and an AI workstation's bridge runs one ...
An AI's task without an assignee is its own
tasks_create without an assignee left an AI's task unassigned in its Inbox. SP02's TASK_HANDOFF moves only tasks assigned to the retiring AI, so self-planned wo...
An approved action runs past its run's call cap; a dry run names read-all
SP98-K-1 (SP05 final review M1): SP10 re-executes an approved action under the run id that asked for it. A run that worked on to its maxToolCallsPerRun answered...
Calendar_free_busy answers who is busy when, never what the block is called
A busy block's title (and its event id) can come from an outside invitation, and calendar_free_busy is not an untrusted tool (SP13's voice bookings call it, and...
An MCP server's refresh no longer closes the client calls are using
The 10-minute refresh (I3) and an admin's test evicted the pooled client before listing, which dropped a legacy SSE stream or DELETEd a Streamable HTTP session ...
An org's alias mail domain is internal on both platform apexes
kamouniverse.com is now the platform's primary apex (kamo-shared-library 0e8cf90f), and **************** moved with it. - ForwardedHosts.internalDomains (the e...
A long workstation wake is asked about less often
An AI workstation's wake took 9 min 19 s against ComputeService's 75 s estimate (SP11 Task 30). Every computer_* call on a waking machine answered WORKSTATION_W...
Name K3's NOT_ENROLLED and a missing phone system instead of misreading them
Found by SP05 Task 36 in production (sp00verify): - ApprovalClient read every 404 from K3 as "not deployed". SP10's K3 is deployed and answers 404 {reason:"N...
An approved action that met a "try again" answer keeps its approval
An approved re-execution on its original key that answered a notice (WORKSTATION_WAKING) or a definitive UNAVAILABLE/RATE_LIMITED released the key and its :appr...
Documents, translation and OCR packs
docs_search, docs_read, translate_text and ocr_document (spec 4.20). A document is routed by DocsService's description before any byte is fetched: text is decod...
The AI's workstation — computer_* tools with auto-wake and lease, workstation pack
Approvals pack — decision-only approvals and approval status
approvals_request asks the AI's approver through kamoai-service K3 with toolName null (nothing is re-executed on APPROVE); a class the charter forbids is refuse...
Phone and SMS packs — consent-checked calls, call history, texting
phone_call posts K6 with the caller's run and key; a reason-less 404 is not deployed, a reasoned one (NOT_ENROLLED) is the endpoint's answer. sms_send opens the...
Knowledge base, sales scripts, RAG, directory and notifications packs
Contacts, leads and accounts packs — search, read, create, update, notes, status, claim, history
The 12 CRM tools of spec §4.20 against EmailService and SecurityService as they are on main (SP05-T27): a status without a sub-status clears the old one; a cont...
Calendar and meetings packs — events, availability, scheduled work, dial-in, invites
Beyond the brief (spec SP05-T26-build): no guessed zone (EmailService applies the member's effective zone); reminders only when asked on a create and never re-s...
Tasks pack — lists, create, update, status, assignment, comments, links
Beyond the brief (SP05-T25): an assignee is read as the member id KBService reads (beyond a long is INVALID_ARGUMENTS), an update that changes nothing or both s...
Notes pack — search, read, create, update, journal, links, master note
What KBService really answers shapes three choices (SP05-T24). notes_search matches the query over the title, body, category and tags as the Notes wall does, be...
Chat pack — conversations, unread, read, send, direct chats, mentions
Beyond the brief (SP05-T23): a mention into a support conversation is a web chat message like chat_send; only a team chat or a support conversation takes a post...
Mail pack — read, search, threads, send, reply, forward, drafts, move, flags
Text helpers, id-safe projections and the fake Kamo services harness for packs
HtmlText lays mail HTML out the way a browser shows it (one jsoup walk: collapsed source whitespace, br, block and paragraph breaks, cells, pre); ThreadIds repr...
Remove the execute-as-org tool endpoints now that AIService uses /mcp
/api/mcp/tools/list and /api/mcp/tools/execute answered for a whole org, which the Tool Plane forbids (D28). No deployed client could reach them (AIService call...
Org MCP servers as ext_* tools over Streamable HTTP and legacy SSE; STDIO retired
A server's own words reach a caller only inside the untrusted wrap; nothing sent is definitive (D45); the URL guard runs on every use; one session and one tool ...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
