Single source of truth for IKA's inner shell — the AGI-UX for an AI-first company AND an AI-managed life. v25.1 (2026-04-27).
Who builds: Opus 4.7 ($200/mo plan, sub-agent fan-out) + Codex 5.5 (Max plan), running 24/7 — sequentially on the same focus, not in parallel on different tracks.
Phase 1 (~3–4 swarm-days): both accounts focused on building the React Operations shell INSIDE the existing vanilla shell on main.ika.ai (hybrid mount, file-by-file). No parallel BI rewrite.
Phase 2 (~2–3 swarm-days, after Phase 1 ships): both accounts focused on rewriting the vanilla BI to React inside the same app. End state: one React app, no legacy.
| Workstream | Swarm time |
|---|---|
| Schema-per-IKA + RLS migration | ~6h |
| JWT-off-URL + WS-ticket exchange | ~3h |
| Computer Use credential broker | ~1d |
| Prompt-injection policy + canary CI | ~6h |
| Skill signing + Firecracker isolation | ~1d |
| Encryption-at-rest + age backups + KMS | ~6h |
| Builder host-shell role-gate + Playwright | ~2h |
| Phase 1 — React Operations inside vanilla shell | ~3–4d |
| Phase 2 — vanilla BI → React rewrite | ~2–3d |
| Six gbrain knowledge-graph lifts | ~1–2d |
| Six-layer token stack adoption | ~1d |
| Voice matrix v0 (rolled out in waves) | ~1d |
| Onboarding templates × 6 + starter prompts | ~6h |
| Integration + smoke test (Playwright + Mats walkthrough) | ~1d |
External clocks (lawyer, vendor activations, pen-test schedulers) do not gate the swarm. We ship working code with sensible defaults + draft text now, then swap when the external work returns.
| External item | What ships now | Async swap |
|---|---|---|
| LATAM/EU data residency provisioning | Routing logic + LiteLLM router pinning shipped Sprint 4 (Bedrock EU / Vertex europe-west config ready) | Vendor EU API key activation lands when vendors complete it; no code change required |
| Lawyer review of Computer Use ToS marketing | Draft marketing copy shipped Sprint 0 — non-blocking | Lawyer revision swap when reviewed; same surface, copy-only delta |
| Pen-test | Scheduled ASAP after Sprint 6 (Phase 1 ships); does NOT gate Phase 2 | Fix-list lands as Sprint 9 (or later) post-pen-test |
| DR runbook quarterly test-restore | Runbook documented Sprint 0; first test runs in normal cadence (clock-bound only by quarter) | Subsequent quarterly restores tracked separately |
Wall-clock = full voice matrix waves with Mats UX cycles + integration polish + Mats-review batches between sprints. The historical "cannot compress" items (pen-test, lawyer review, EU/LATAM residency activation) are now treated as non-blocking — see table above — so they no longer dominate the v1 envelope.
| Version | Stack | URL | Status |
|---|---|---|---|
| v1 (BI seed) | Vanilla HTML+JS+Three.js | dev-graph.ika.ai | Original BI dev that became msp's prompt bar / agent BI. Historical reference. |
| v2 | Flutter (Dart) | dev-v2.ika.ai · v2.ika.ai | Frozen historical snapshot; reference only. |
| v3 (msp) | Vanilla HTML+JS+Three.js | msp.ika.ai | Final client-presentation build, frozen. |
| v3 (main) | Vanilla HTML+JS+Three.js | main.ika.ai | Active build target. Phase 1 hybrid mount; Phase 2 full React after Phase 1 ships. |
| v3 first dynamic tenant | Per-tenant deploy | <first-dynamic-tenant>.ika.ai | Slot is TBD. |
| Subdomain | What it is | Live status |
|---|---|---|
intur.ika.ai | INTUR app (separate product) | Live |
queplan.ika.ai | QuéPlan app (separate product) | Live |
bench.ika.ai | Bench / benchmarking surface | 502 — needs systemd unit on 8080. |
rover.ika.ai | Rover landing | No DNS; likely retired. |
dev-pz.ika.ai | PZ dev surface | 530 — Cloudflare origin error. |
| Subdomain | Purpose | Live status |
|---|---|---|
dev-api-v2.ika.ai | Backend API (Go @ :3044 via Cloudflare tunnel) | 404 at root; functional under /api/... |
dev-ws-v2.ika.ai | WebSocket / Socket.IO endpoint (gosf @ :9999) | Tunnel TCP-mode breaks real WS clients. Switch to HTTP + enable WebSockets in CF dashboard. |
| URL | Title | Owning neuron (target) |
|---|---|---|
main.ika.ai/ika-pro-architecture/ | IKA Concierge Architecture (this page) — single source of truth for the v3 build. URL slug pending rename. | main / Engineering / Architecture |
main.ika.ai/graphify/ | Knowledge-Graph Tools — Comparison + Recommendation for IKA | main / Engineering / Research |
main.ika.ai/ika-pro-architecture/#gstack | gstack vs IKA — Findings | main / Architecture |
main.ika.ai/ika-pro-architecture/#hermes | Hermes Agent (Nous Research) vs IKA — Findings | main / Architecture |
main.ika.ai/ika-pro-architecture/#karpathy | Andrej Karpathy — what to adopt for IKA | main / Architecture |
main.ika.ai/ecc/ | ECC (Everything Claude Code) — analysis for IKA Concierge | main / Architecture |
main.ika.ai/odysseus/ | Odysseus (self-hosted AI workspace) — what to adopt for IKA | main / Architecture |
main.ika.ai/skills/ | Anthropic Knowledge-Work Plugins — what to adopt for IKA Concierge | main / Architecture |
main.ika.ai/superpowers/ | obra/superpowers — engineering-discipline meta-skills, what to adopt for IKA Concierge | main / Architecture |
main.ika.ai/ika-pro-architecture/#tokens | Token Optimizer Analysis — RTK + Alternatives | main / Architecture |
main.ika.ai/ika-pro-architecture/#lab | IKA Lab — experimental BI shell | main / Architecture |
main.ika.ai/design/ | IKA — Design System | main / Design |
intur.ika.ai/ | IKA — INTUR (sister-product landing) | intur / root |
intur.ika.ai/v2/ | IKA — INTUR · v2 (Respuestas a Consultas) | intur / Proposals |
intur.ika.ai/design/ | IKA — Design System (INTUR mirror) | intur / Design |
msp.ika.ai/agents/ | IKA — MSP AI Agents (proposal) | msp / Sales / Proposals |
main.ika.ai/pnud/ | IKA Converter — PNUD Honduras (client tool) | main / Clients / PNUD |
msp.ika.ai/prompts/ | IKA · MSP Sitemap — Prompts & Destinations | msp / BI / Sitemap |
main.ika.ai/steering/ | IKA Steering — Two Brains, One System | main / Architecture |
main.ika.ai/infra/ | IKA Infrastructure | main / Engineering / Infra |
One product, two shells: BI (outer) and Operations (inner). Same URL, one hard toggle in chrome flips between them. BI can be turned off per-tenant. Both shells share one stack.
| Surface | Pick | License |
|---|---|---|
| Notes (block editor) | BlockNote primary; TipTap fallback | MPL-2.0 / MIT |
| Calendar / Events | @fullcalendar/react | MIT |
| Project Gantt + dependencies | gantt-task-react | MIT |
| Documents (drag-drop + Drive picker) | @uppy/react + Companion | MIT |
| 3D / icosahedron | react-three-fiber + Three.js | MIT |
| Drag layer | @dnd-kit/core or react-dnd | MIT |
| Pinch / wheel zoom | @use-gesture/react | MIT |
| State | Zustand (or Jotai) | MIT |
| e2e tests | Playwright | Apache-2.0 |
Target market is prosumer. A single user spins up multiple IKAs:
Tenant identity = {user_id, ika_id, scope: business|personal}. Isolation enforced by schema per IKA in one Postgres cluster + Row-Level Security policies. One PgBouncer transaction-pool serves all IKAs; RLS is the floor under every query so a missed WHERE clause still denies the row. Cross-IKA Builder feed and global search are joins inside one cluster.
Every neuron contains sub-neurons, recursively. Soft cap at depth 6; agents see depth 0–3 ancestors + current + immediate children unless explicitly asked.
Every level is a "neuron" — same shell, same entity slots, same agents, same governance. Data model: neuron.parent_id → neuron.id. UI is one component that recurses. Loading is lazy per level.
Core principle: every entity is draggable. Drop one onto another and the receiver becomes the container. Same gesture everywhere. Drag-and-drop is ADDITIVE — every entity also has "+ create child" UI.
Open any neuron and the body shows lists side by side (Sub-neurons · People · Agents · Projects · Tasks · Events · Documents · Notes · Forms · Integrations · Skills · Automations · Artifacts). Each list has its own search bar, "+" button, and drag-drop targets.
| Drag this → | onto Project | onto Task | onto Event | onto Neuron | onto Person |
|---|---|---|---|---|---|
| Project | No nested projects | — | — | Move project to neuron | — |
| Task | Assign to project | Make sub-task | — | Move to neuron | Assign to person |
| Event | Attach to project | Attach to task | — | Move to neuron | Invite to event |
| Note | Attach | Attach | Attach | Attach | Attach |
| Document | Attach | Attach | Attach | Attach | Attach |
| Person | Add to team | Assign / add to participants | Invite | Add to neuron | — |
| Person → Note · Person → Document · Person → Form · Person → Artifact: Add as participant / collaborator. Drag a person onto any element and they're attached. Same gesture everywhere. | |||||
| Agent | Bind to project | Assign task | Bind to handler | Bind to neuron | — |
| Neuron | — | — | — | Becomes sub-neuron | — |
| Artifact | Cross-reference | Cross-reference | Cross-reference | — | — |
When a task is assigned to a project, it appears in BOTH the project's list AND the neuron's outer task list. Same applies to events attached to projects/tasks, notes/documents attached to anything. Container relationship is data; listing is UI — one truth, multiple views.
Frontend: @dnd-kit/core or react-dnd. Backend: each entity has polymorphic container_type + container_id. Drop = PATCH the container fields.
| Scope | What you share | Receiver experience |
|---|---|---|
| 1. Sub-entity (default) | Any entity below depth-1 (sub-neuron at depth ≥ 2, project, task, event, note, doc, form) | Lands inside their SHARED top-neuron. No parent-path leakage. Breadcrumb: "SHARED › <entity>". |
| 2. Top-level neuron | A depth-1 neuron (department-level) | Appears as a peer top-level neuron in their IKA. Full subtree visible; nothing above. |
| 3. Whole-IKA | An entire IKA | Appears in their IKA switcher with a "shared by <name>" badge. |
shares — id, source_ika_id, source_entity_type, source_entity_id, target_user_id, scope, permissions_level (Full/Edit/Comment/Read), created_by, created_at.shares rows.Every CUD-able entity (task, event, project, neuron, note, document, form, agent, automation, skill, integration, artifact) carries the same row of action affordances in its panel header and in its list-row hover toolbar:
| Action | Behavior | Mechanism |
|---|---|---|
| Share 📤 | Opens the share modal: pick recipient (typeahead over platform.people + email invite), pick scope (sub-entity is the default for in-list elements; whole-IKA for IKA-level), pick permission (Full / Edit / Comment / Read). Confirm → writes a shares row and lands the entity in the recipient's SHARED top-neuron. | Same primitive across all entities. Click = modal; voice = "share this with X as Edit" routes through the voice matrix. |
| Add people 👥 | Opens a typeahead picker over platform.people in scope (current IKA's ika_people first, then federated). Pick one or more → they're attached to the entity. Roles vary by entity type: tasks gain assignees; events gain invitees; projects gain team members; notes/documents/artifacts/forms gain collaborators; agents gain owners. | Identical to the drag-drop "Person → entity" gesture in the matrix above. Two paths to the same outcome — drag a person card onto the entity, OR open the entity panel and click "Add people". Either creates an entity_participants(entity_type, entity_id, person_id, role, added_at, added_by) row. |
| Pin 📌 | Toggles the entity in the user's MyPanel (per-user, cross-IKA, platform.user_pins). See the MyPanel section. | Single tap. |
| Delete 🗑 | Soft-delete to the per-IKA Recycling Bin. 5s undo toast. Cascading on recursive entities. See the Recycling Bin section. | Single tap; voice "delete this". |
Visual: these four buttons live in a compact icon row in every entity panel header (right side, opposite the title) AND surface as hover-toolbar icons on every list row. Same icons everywhere — share / people / pin / delete. The collapsible / draggable / extendable behavior of the panel itself (see Visual reference) does not affect these actions; they sit in the title bar, which is the only thing visible when a panel is collapsed.
| Surface | Behavior |
|---|---|
| Per-list search | Top of every list inside a neuron view. Real-time client-side filter on the loaded list. Matches name + description + tags + assignee. |
| Global IKA search | Top of chrome. Auto-populating typeahead across every entity in the current IKA. Results show entity icon + name + breadcrumb path. @/# prefixes filter by entity type. Click = navigate. |
Implementation: per-IKA inverted index over (entity_type, entity_id, name, description, tags, breadcrumb_path) via Postgres tsvector + GIN. Permissions enforced at query time. Cross-IKA search is out of scope for v0.
| State | URL form |
|---|---|
| Home | /#/<ika>/home |
| Global view | /#/<ika>/layer1 |
| Division | /#/<ika>/layer1/<division> |
| Brand | /#/<ika>/layer1/<division>/<brand> |
| Tab + drill | /#/<ika>/layer1/<division>/<brand>?tab=okr&drill=ventas-totales |
/#/<ika>/layer2[/<neuron-path>...][/<entity-type>/<slug>][?tab=<data|timeline|calendar>][&phase=][&subtask=][&drill=]
| Intent | URL |
|---|---|
| Operations root | /#/msp/layer2 |
| Sub-sub-neuron (depth 4) | /#/personal/layer2/social/sports/basketball/tuesday-pickup |
| Open project | /#/msp/layer2/marketing/project/branding-campaign |
| Project Timeline + phase | /#/msp/layer2/marketing/project/branding-campaign?tab=timeline&phase=research |
| Form submission | /#/msp/layer2/hr/form/quarterly-review?drill=submission-12345 |
| SHARED → shared task | /#/msp/layer2/shared/task/help-with-q3-launch |
history.pushState on nav.Builder is the agent-driver overlay used by Mats + IKA team to drive every tenant. End-user prosumers never see it.
| Property | Decision |
|---|---|
| Shape | Single builder.js + builder.css overlay bundle. Sandboxed iframe with strict CSP and DOMPurify for any agent-rendered HTML. |
| Stack | Vanilla. Stays vanilla forever. Same bundle on every host (vanilla + React). Host-agnostic. |
| Visibility | Admin-only. Server-side conditional script-tag emission based on /api/v1/auth/me role. Non-admin sessions never download the bundle. Per-tenant toggle is belt-and-suspenders. |
| Backups | Snapshot the IKA frontend (HTML or React build) AND pin the Builder bundle version active at snapshot time. Builder DATA is always live — never frozen by backups. |
| God view | Separate route at builder.ika.ai for super-admin only. Side-by-side Builder instances, one per tenant. Same bundle, N data scopes. |
| Per-user scope | One Builder panel per admin, aggregating tasks/feed/Q&A from every IKA the user owns (filter chip per IKA). Cross-IKA isolation preserved at data layer. |
| Section | Components |
|---|---|
| Top bar | Voice · Attachment · Snapshot · Pipeline · Steering · Infrastructure · Search-within-Builder |
| Side panel — tasks | Task list (ALL · Active · Q&A · Done · Recycling-bin) · Add-task · Expand/contract |
| Side panel — Q&A | Open questions · Answer composer · Auto-extraction from agent messages |
| Side panel — backups | Snapshot list · Rename · Restore · Description editor |
| Feed area | Message stream (user / agent / thought / question / answer / status / receipt / tasks) |
| NOT Builder | IKA switcher · BI ↔ Operations toggle · Global IKA search · Voice prompt-bar (prosumer-facing) |
God view's control panel lists every subdomain with an on/off switch. Default for new client tenants = OFF; default for IKA-team tenants (main, hybrid, react) = ON. Disabled = script tag is not emitted server-side; bundle never downloads. Audit log records every toggle.
| Endpoint | Method | Schema scope | Auth | Notes |
|---|---|---|---|---|
/api/v1/bi/feed | GET | per-IKA | Cookie JWT | Builder data feed (admin-only after /auth/me gate) |
/api/v1/ops/* | GET/POST/PATCH/DELETE | per-IKA | Cookie JWT | Operations CRUD on neurons / projects / tasks / etc. |
/api/v1/auth/me | GET | platform | Cookie JWT | Returns user role; gates Builder + admin surfaces |
/api/v1/ws/ticket | POST | platform | Cookie JWT | 30-second-TTL nonce for WS handshake |
/api/v1/conversation/turn | POST | platform | Cookie JWT | Hits platform.conversation_* tables (system-wide thread per user). Resolver assembles context, dispatches via LiteLLM, returns turn + action cards. |
/api/v1/identity/payload | GET | platform | none (public) | Identity payload (headline + body + creator + version + "want to talk more about this?" link). Both vanilla BI's submitPrompt() and Operations's <IkaIdentityModal> consume it. |
/api/v1/user_pins/* | GET/POST/DELETE | platform | Cookie JWT | MyPanel pin CRUD across all IKAs the user owns. |
/api/v1/recycling/* | GET/POST | per-IKA | Cookie JWT | List, restore, hard-delete soft-deleted entities per IKA. |
designs may be outdated The screenshots below describe load-bearing card anatomy + behavior. Pixel-level visuals may be out of date until Mats's design refresh lands; spec text is authoritative.
Dual radial chart (% Completed + % Time Left). Phase tabs with per-phase fractions. Priority chip with arrow-cycle. PART OF stats grid as universal entity-anatomy footer.
Phase ribbon across the top. Six column groups (Tasks · Subprojects · People · Events · Docs · Automations) each with their own + button. Right rail: Pomodoro focus circle, MSGS, HISTORY, comment thread.
Event-specific countdown radial as hero element. Type chip with cycle arrows. Universal entity affordances (priority chip, attendees, comments, PART OF footer).
Block-based (BlockNote). Title / Paragraph / Checkbox as minimum block types. Permissions chip first-class. PART OF footer makes cross-references explicit.
Avatar, role, email, "user since". PART OF footer shows what this person is involved in. Send-message footer makes every person card a 1:1 chat surface.
Field-type palette: Date · Dropdown · Checkbox · Text · Title · Paragraph. Sections group fields. Save Data submits. Two states: Form Template + Form Submission.
Five wedges: Pending (dark blue) · In Progress (gold) · Active (green; in-progress AND someone is currently focused via Pomodoro) · Delayed (red) · Completed (green). Aggregated across phases / projects / recursive children of the neuron.
Global user metric. X-axis = time; Y-axis = focused hours per day. Aggregated from Pomodoro sessions across ALL of the user's IKAs. Rendered in chrome (top bar / profile area).
| Affordance | Notes |
|---|---|
| Priority chip | High / Medium / Low. Color-coded. Cycle arrows. |
| Permissions chip | Full / Edit / Comment / Read. Per-entity ACL. |
| PART OF stats grid | Counts of nodes / subnodes / tasks / projects / automations this entity belongs to. |
| Pin button | Pins this entity to MyPanel (per-user, cross-IKA). |
| Delete button | Soft-delete to per-IKA Recycling Bin (5s undo toast). |
| Star (favorite) + share arrow | Mark favorite; forward/share entity. |
| Avatars + comment thread + history | Active collaborators; MSGS + HISTORY counts; add-comment + Post. |
| Type icon | Rocket = project, hexagon = node, calendar = event, etc. |
| Tab | What it shows |
|---|---|
| Data (default) | Top: Task Status donut. Body: 3-column × 5-row grid of all 13 first-class entity lists. Per-task radial with subtask-completion %; per-project compact dual radial. |
| Timeline (Gantt) | Full Gantt of every element in this neuron. Phases shown as colored segments inside project bars. Drag to reschedule; today line; week/month/quarter zoom. Renderer: gantt-task-react. |
| Calendar | Same dated entities as Timeline rendered as Month / Week / Day. Renderer: @fullcalendar/react. |
| Row | Column 1 | Column 2 | Column 3 |
|---|---|---|---|
| 1 | Sub-neurons | People | Agents |
| 2 | Projects | Tasks | Events |
| 3 | Documents | Notes | Forms |
| 4 | Integrations | Skills | Automations |
| 5 | Artifacts (full-width thumbnail tile sub-grid) | ||
Clicking any element in any tab opens an entity card overlay (portal at chrome z-index). The card has one contextual button:
| Currently in tab | Button label | Action |
|---|---|---|
| Data | "Show on Timeline" | Card stays open. Background swaps Data → Timeline. Timeline pans + zooms to fit the bar; bar pulses (gold halo, 2 cycles). |
| Timeline | "Show in Data" | Card stays open. Background swaps Timeline → Data. Relevant cell scrolls into view; row highlights briefly. |
| Calendar | "Show in Data" / "Show on Timeline" | Two buttons; same pattern. |
Closing the card keeps the user in the new tab — the cross-tab move is sticky. The button reads currentTab from store on every render.
Every entity card / content panel (task, event, project, neuron, note, document, form, person, agent, automation, skill, integration, artifact) opens as an overlay panel at chrome z-index — same portal as the v22 entity card, extending its behavior. Reference UX matches the "Project view (full)" screenshot above (which carries the designs may be outdated note — Mats also has updated screenshots of the content panels — project view full, task panel, event panel, etc. — coming; current entity-panel-behavior subsection is implementation-spec'd from his verbal description and pixel-level visuals will be added when screenshots arrive).
| Behavior | How it works |
|---|---|
| Draggable | Header is the drag handle. Mousedown / touchstart on header → move via translate(x,y). Position persists per-user per-entity for the session (resets on app reload) via sessionStorage keyed by entityType + entityId. |
| Collapsible (accordion) | Chevron in the header toggles a .collapsed class. Collapsed = title bar only (~40px); expanded = title bar + full body. max-height transition, 200ms ease. Multiple panels can be open simultaneously and collapse independently — useful when juggling several tasks/events with one expanded at a time. |
| Extendable (drag-resize) | Bottom-right corner has a resize handle (Builder-feed style) via vanilla CSS resize: both on the panel container. Min 320×200; max = full viewport. Sized state persists per-user per-entity-type for the session. |
| Close | Click outside OR the X in the header. |
| Composes with cross-tab focus | Dragging or collapsing never changes the active tab. The "Show on Timeline" / "Show in Data" button works regardless of panel position or collapsed state. |
The full color-token reference (sage #b5d5c8, gold #e6be64, dark base #0e1014/#161a22) lives at msp.ika.ai/design/. This section codifies the texture + state vocabulary that load-bearing chrome uses across the v3 build, so Path C engineers can paste it verbatim.
| Token | Background | Border | Radius | Use |
|---|---|---|---|---|
| Glass Panel | rgba(12,12,16,0.75) + blur(30px) | 1px white/0.08 | 20px | Main content panels. Soft drop shadow. |
| Modal Surface | rgba(14,17,22,0.97) + blur(12px) | 1px sage/0.12 | 16px | Modals, confirmations, identity. |
| Card Surface | rgba(255,255,255,0.03) | 1px white/0.06 | 14px | ika-card / usecase-card / team-card. |
| Quote Block | rgba(181,213,200,0.04) | 3px sage left border | 0/12/12/0 | Pullquotes. |
| Featured Card | rgba(181,213,200,0.06) | 1px sage/0.15 | 14px | Discovery + featured surfaces. |
| Gold Featured | rgba(230,190,100,0.04) | 1px gold/0.2 | 14px | "Llave en mano" + special elements. |
| Cursor Glow | radial-gradient(circle, rgba(181,213,200,0.06) 0%, transparent 70%) | 1px white/0.06 dashed | — | Cursor-following soft glow. |
Used for gate input fields, recessed input wells, anything that should feel "pressed in" / inside the surface. Same dotted radial-gradient texture as the canonical gate-pass input.
.sunken {
background: rgba(10,10,12,1);
background-image: radial-gradient(rgba(255,255,255,0.04) 1px, transparent 1px);
background-size: 6px 6px;
box-shadow:
inset 4px 4px 12px rgba(0,0,0,0.8),
inset -4px -4px 12px rgba(255,255,255,0.05);
border-radius: 12px;
}
When a summary box (KPI tile, donut card, dashboard cell) becomes active (focused / pinned / selected), it gets a 1px conic-gradient outline that animates. The base box stays the Card Surface; only the outline gains the gradient. Drop back to the static 1px white/0.06 border when inactive.
.summary-box.active {
border: 1px solid transparent;
background-image:
linear-gradient(var(--card-bg), var(--card-bg)),
conic-gradient(from 0deg,
rgba(181,213,200,0.4),
rgba(230,190,100,0.4),
rgba(181,213,200,0.4));
background-origin: border-box;
background-clip: padding-box, border-box;
animation: spin-outline 4s linear infinite;
}
@keyframes spin-outline {
to { --angle: 360deg; }
}
Two-tier model:
| Tier | What it is |
|---|---|
| Form Template | Reusable structure: list of typed fields, sections grouping them, default values, validation. Versioned. |
| Form Submission | A specific filled instance bound to a context entity (task / event / project / neuron). Carries answers + assignee + completion timestamp. |
Date · Dropdown · Checkbox · Text · Title · Paragraph. Sections group related fields. Save Data submits.
form_templates — id, neuron_id, name, sections JSON, version, created_by, created_at.form_submissions — id, template_id, template_version, context_entity_type, context_entity_id, assignee_id, answers JSON, status, submitted_at.Source: "Timeline Algorithms" by Eng. Alvaro Hurtado Maldonado + Mats's verbal rules. Caveat: the v2 Flutter reference implementation had bugs — vet every algorithm before lifting; re-derive from the Hurtado PDF anything we can't verify.
| # | Postulate |
|---|---|
| 1.1 | 2D canvas: X = time, Y = rails (one entity per rail or shared by non-overlapping siblings). |
| 1.2 | User-specific view: each user sees their own assigned entities. |
| 1.3 | Hierarchical (projects + tasks). Parent's start/end auto-spans children. |
| 1.4 | Drag-and-drop. Parent drag = children move with it. Drag child outside parent = dissociate. |
| 1.5 | Anti-collider shifts elements along X-axis to resolve overlaps within a rail. |
| 1.6 | Resize parent = children auto-fit. Resize causing collision = shift conflicting elements without altering durations. |
| 1.7 | Initial state: only top-level shown; children load on expand. |
| 1.8 | Five zoom levels: Month · Week · Day · Hour · Minute. |
| 1.9 | Two-finger drag = pan. Pinch + mouse-wheel = zoom. Wrap with @use-gesture/react. |
| 1.10 | Left-side scroll indicator showing position within tracks. |
| 1.11 | Up to 10 extra rails available below visible tracks; created dynamically. |
| 1.12 | Continuous track: rails as floats (-8, 2, 5.5, 19), rendered as discrete integers. |
| 1.13 | External drag-drop integration (in/out of timeline). |
| 1.14 | Element creation from frontend or backend. Default duration = 1 day. |
Add at START → new_rail = first_rail − 10
Add at END → new_rail = last_rail + 10
Add BETWEEN two rails → new_rail = (prev_rail + next_rail) / 2 (interpolation)
| Case | What happens |
|---|---|
| Drag to same object | Changes start date only; duration preserved. For parent entities, system prompts confirmation before moving parent + children. |
| Drag to existing rail receiver | Element assigned to existing rail. Lane-sharing for non-overlapping consecutive elements. |
| Drag to new rail (between two) | Creates new rail via interpolation (prev + next)/2. Elements below shift down by one. |
| Drag to neuron | Entity becomes part of target neuron. |
| Scenario | Resolution |
|---|---|
| Future collision | Shift the dragged element forward in seconds until clear; recursive on subsequent collisions. |
| Past collision | Past element stays fixed; dragged element re-positioned. |
| Existing element clashes with newly-dragged | Move existing future element forward (preserves user's drag intent). |
| Hierarchical scope | Collision logic considers both X-axis time AND Y-axis rails; for parents, accounts for entire range of parent + children. |
| Path | Behavior |
|---|---|
| Frontend (user click/drag) | getAvailableSlots finds free positions at start/end/within parent. |
| Backend autogenerate (automation) | Get parent's rail (railA) → next element's rail (railB) → place at (railA + railB)/2 if railB exists, else railA + 0.1. |
| Backend standard generate (new parent) | Place parent on last available rail + 0.1 offset; +0.2 per child. |
| Voice command creation | Same anti-collision logic; auto-shifts on collision. |
When a new rail is created during drag/insertion, the system shifts elements UPWARD to close visual gaps while preserving parent-child hierarchy.
| Priority | Default placement |
|---|---|
| High | As CLOSE as possible to the current date. |
| Medium | Balanced placement. |
| Low | Placed FURTHER into the future. |
Reciprocal: when an element is created far in the future without explicit priority, auto-assign LOW. Manual override always wins. Priority can auto-promote as deadline approaches.
Recurrence is a PROPERTY on existing Tasks / Events / Form Templates. iCalendar RRULE shape (frequency / interval / byday / until / timezone). Each recurrence generates occurrences rows materialized lazily (on view, not on create) to bound storage. Edits propagate to future occurrences only by default; user can choose "edit just this one" / "edit all future" / "edit all".
Everything you can do via clicking or dragging in Operations should be doable by voice. Full scope: 12 entities × 8 operations × pronouns × undo × cross-session continuity. Implemented in waves.
| Entity | Create | Read | Update | Delete | Move | Assign | Share | Set property |
|---|---|---|---|---|---|---|---|---|
| IKA | "create a new business IKA called Acme" | "open my Acme IKA" | "rename current IKA to Acme Corp" | "delete the Old IKA" | — | — | "share with carlos@…" | "set time zone to CST" |
| Neuron | "create a sub-neuron called Sports" | "open Sports" | "rename Sports to Athletics" | "delete the Empty neuron" | "move Basketball under Athletics" | — | "share Sports with my coach" | "set Sports' icon" |
| Project | "create project Q3 Launch in Marketing" | "open Q3 Launch" | "extend Q3 Launch by 2 weeks" | "delete Old Campaign" | "move Q3 Launch to Operations" | "add Carlos to team" | "share with the agency" | "set priority high" |
| Task | "create task Buy domain in Q3 Launch" | "what tasks are overdue?" | "push to next Friday" | "delete Acquire domain" | "make this a sub-task of Launch Plan" | "assign to Mats" / "assign to marketing agent" | "share with the contractor" | "mark complete" / "make recurring weekly" |
| Sub-task | "create sub-task Check pricing" | "find sub-tasks of Acquire domain" | "rename Check pricing" | "delete Check pricing" | "move Check pricing" | "assign to Carlos" | — | "mark complete" |
| Event | "create event Demo Friday at 3pm" | "what events today?" | "reschedule to Monday 10am" | "delete cancelled meeting" | "attach to Q3 Launch" | "invite Carlos" | "share externally" | "make recurring monthly" |
| Note | "create note Client feedback" | "find notes about INTUR" | "append to Client feedback" | "delete empty draft" | "attach to Q3 Launch" | — | "share with Carlos as Read" | "set permissions to Edit" |
| Document | "upload from desktop" | "find the brief PDF" | "replace with new version" | "delete outdated PDF" | "attach to task" | — | "share with the agency" | "set Read-only" |
| Form | "create Customer Interview form" | "show submissions from last month" | "add a Date field" | "delete unused form" | "attach to all Sales projects" | "send to Carlos" | "share with the agency" | "make recurring weekly" |
| Person | "add Jane Doe, jane@…, role Designer" | "find Carlos" | "update Jane's role" | "remove Jane" | "add to Marketing" | — | — | "set permissions to Full" |
| Agent | "create agent for Sales" | "what agents are running?" | "update Marketing agent prompt" | "deactivate unused agent" | "bind to all sub-neurons" | "assign task to Sales agent" | — | "set monthly budget to $500" |
| Automation | "create automation that posts daily standup at 9am" | "what automations in Sales?" | "change to 10am" | "disable broken automation" | "move to a different project" | "assign failure handler to Mats" | — | "pause for a week" |
| Pattern | Resolution |
|---|---|
| "create a task here" | Container = current neuron in the user's view. |
| "move it to ProjectY" | "it" = most recently created/edited entity in this turn. |
| "and add a sub-task: …" | Parent = the task we just created. |
| "do the same in HR" | Repeat previous operation with container = HR neuron. |
| "undo" | Revert last operation within voice session. |
| Operation class | Policy |
|---|---|
| Create / Update / Move | Echo and execute. Tentative-placement applies. |
| Read | Show results. |
| Delete | Always confirm. Soft-delete to Recycling Bin with 5s undo toast. |
| Share / external recipient | Confirm recipient + permission level; triggers second-opinion if enabled. |
| Money / identity / permission changes | Always confirm + always second-opinion (non-bypassable). |
One JSON file per IKA (operations_item_map.json) loaded into a global OPS_MAP on app boot, hot-patched over WebSocket on every CUD. Indexes: neurons · projects · tasks · events · notes · documents · forms · people (with platform_person_id) · agents · integrations · skills · automations · artifacts · vocab · aliases. Resolver runs in pure JS (<5ms exact + Levenshtein-≤2 fuzzy match) — zero LLM token cost on resolution.
user_ika_spine.json per user, loaded once at login (~<100KB even for 10 IKAs). Indexes: ikas · top_neurons (depth 0–1) · favorites (top-30/IKA by frequency) · recent (last 50 across all IKAs) · people_federation (one row per real human via platform_person_id) · shared vocab. Resolver: three concentric tries — local OPS_MAP → SPINE → server-side resolver. Cross-IKA confirmation toast always echoes destination IKA name.
Voice utterance → IKA picks best guess → entity is persisted immediately with a tentative flag → confirmation modal appears as a passive toast → if dismissed/ignored, entity stays at IKA's best-guess location with a "does this belong here?" badge until reviewed.
| Trigger | Badge |
|---|---|
| Cross-IKA placement | "Placed in Personal — does this belong here?" |
| Ambiguous neuron | "Placed in Marketing (also matched: Sales, Operations) — right home?" |
| Missing container | "Saved to Inbox — move to a project?" |
| Unparseable slot | "Couldn't parse 'next-next Tuesday-ish' — set a date?" |
| Cross-IKA assignee | "Assigned to Carlos (Acme) — same Carlos?" |
| Bulk dump | "5 tasks created — review placements?" |
Schema: every CUD-able entity has tentative (bool) + tentative_reason + created_via_voice (raw utterance). Bulk-review surface: "Tentative items" view per IKA + global "Tentative across all my IKAs" view in chrome.
classifyPrompt(); identity short-circuit fires before the classifier on BOTH typed AND voice input. Voice owns STT + the post-classifier executor; everything between is shared with text.<IkaIdentityModal> opens visually.The prompt bar treats IKA as a CLI. The Conversation Surface makes IKA a conversational entity the user can talk to — knows where they are in the UI, what they just did, who they are, and can both talk and act.
kind | Trigger | Surface |
|---|---|---|
identity | "quien eres" / "who are you" / "what is IKA" / "quien creo IKA" / "sobre IKA". Pre-classifier short-circuit on BOTH typed and voice input. | Open <IkaIdentityModal> (React component mirroring the vanilla DOM). Both BI's submitPrompt() and Operations's classifier consume GET /api/v1/identity/payload. Modal includes a "want to talk more about this?" link that promotes into the conversation pane. |
catalog | "ayuda" / "what can I ask" / "qué prompts" | Open the prompt catalog. |
noop | Greetings, nonsense, mic test | Toast back. No surface opens. |
nav | Navigation verb + resolver hits a target in OPS_MAP / SPINE; or single-shot CRUD that resolves cleanly. | Execute inline. Toast + nav (or toast + tentative-placement). No surface opens. |
query | Explicit analyze keyword OR strong query signals (reasons, comparisons, "why", "how come"). | Open the analyze confirmation modal. Result returns inline; "let's discuss this further" button promotes to conversation. |
conversation | Multi-turn / open-ended / "let's …" / "tell me about …" / direct address to IKA OR pane already open OR explicit chat-icon click. | Open the conversation pane. Utterance becomes first user message in the active thread. Pre-query dedup runs first — see below. |
Before the conversation surface dispatches the Sonnet turn, run a fast pre-flight against the per-IKA knowledge graph. Extract the prompt's key entities + topics with the deterministic typed-link parser (gbrain lift #1, no LLM cost), then RRF-retrieve (lift #2) over assessment titles + tags + body, with backlink boost (lift #3). If a high-confidence match exists (RRF score ≥ threshold) for content the user already wrote, surface it inline before the LLM call:
You wrote about this on 2026-03-12 — open that note, or generate fresh anyway?
→ "Q3 launch retrospective" (assessment, Marketing / Brand-launch, 4 backlinks)
[Open] [Generate anyway]
The user can pick the existing note and continue the conversation from there, or override and generate fresh. A "generate anyway" click logs the dedup-miss for that thread so the dream-cycle can decide whether the new content should update the existing assessment or stand alone.
@ for entity references, / for slash commands.v0: ONE conversation per user, system-wide across ALL their IKAs. Lives in platform.conversation_threads + platform.conversation_messages. Pane scopes context per-turn to in-focus IKA (recorded as focused_ika_id on each message), but the THREAD is single + global. Like iMessage with one contact, where that contact is IKA herself across your whole multi-IKA life.
v1: hybrid sub-conversations — when the user spends >N turns on a single neuron/project, IKA offers "pin this as a thread". Pinned threads listed in a sidebar.
| Layer | Source |
|---|---|
| Where you are | current IKA · neuron breadcrumb · active tab · selected entity |
| Recent actions | last ~20 actions in this session |
| What exists | OPS_MAP (in-focus IKA) + SPINE (cross-IKA slim) |
| What you've decided | per-IKA knowledge-graph (gbrain) — assessments first, events as backup |
| Who you are | Federated Honcho — platform.honcho_profile(user_id) with optional per-IKA overlays |
| Conversation so far | last K=20 turns + summarized older |
| Tools available | full voice matrix + skills installed in this neuron + active integrations |
Entity cards rendered inside the pane carry the same single contextual button as elsewhere — label toggles by current tab ("Show on Timeline" in Data; "Show in Data" in Timeline). Calendar shows both labels. Closing the card keeps the user in the new tab.
When IKA creates entities in response to a user request (project, task, sub-task, event, recurring occurrence), the Timeline tab becomes the canvas where the creation plays out as an animation — so the user watches IKA plan in real time instead of seeing a wall of finished JSON. Same primitive as v22's Show on Timeline, but the trigger is creation, not focus.
| User asks for | What animates |
|---|---|
| Project ("plan a brand-launch project for Q3, with research, design, build, ship phases") | Background tab swaps to Timeline if not already there. Big project block animates in at the chosen rail (slide-in from left, ~250ms). Phase ribbons inside the bar fade in left-to-right. Sub-tasks animate in one at a time, each with its own slide-in (~150ms each, staggered). Each sub-task that has its own sub-tasks expands inline (chevron rotates, max-height transition) and the nested sub-tasks animate in too. The user sees the project skeleton, then the structure, then the leaves — like watching IKA think out loud. |
| Task ("create a task to call Acme on Friday") | Timeline opens; the rail/slot where the task lands lights up briefly (gold halo), then the task bar slides in. Entity panel opens automatically focused on the new task (per the v25.1 panel behavior — draggable / collapsible / extendable). |
| Sub-task ("add a sub-task: check pricing") | Timeline opens; the parent task expands inline (chevron rotates, sub-task lane reveals); the new sub-task animates into the parent's expanded lane. Entity panel for the new sub-task opens. |
| Event ("schedule a Demo with INTUR Friday 3pm") | Timeline opens at the appropriate temporal scale (day-zoom for events <= 1 day; week-zoom for spans up to 7 days; month-zoom otherwise — same auto-zoom as Show on Timeline). The event slot lights up; the event block slides in. |
| Recurring task / event | The first occurrence animates in with the same slide-in. Subsequent occurrences fade in across future weeks at half-opacity (so the user sees the recurrence pattern without it looking like clutter). |
| Note / Document / Artifact / Form / Person / Agent / Automation / Skill / Integration | Background swaps to Data tab. Neuron breadcrumb navigates to the destination neuron. The relevant list cell scrolls into view. The new row flashes (gold halo, 2 cycles). Entity panel auto-opens. See "Non-timeline entities — Data-tab flash" below. |
Entities without a Timeline counterpart (note, document, artifact, form, person, agent, automation, skill, integration) get the Data-tab equivalent of the same animation:
If the destination neuron is in a different IKA from the in-focus one (cross-IKA write per v22 / SPINE), the IKA switcher first animates to the destination IKA (~200ms slide), then the Data-tab flash plays. Mandatory cross-IKA confirmation toast (per v21.4 tentative-placement) still fires alongside the flash so the user sees both "where it landed" + "is this right?".
Server returns the full creation plan as a single response (project + tasks + sub-tasks + dates + assignees) so the animation has the complete dataset before the first frame. Client renders a frame-by-frame timeline of bar-insertions using the existing gantt-task-react renderer + a thin animation layer (CSS transitions on transform + opacity; no extra animation library required). The same primitive composes with v22 cross-tab focus — if the user is in Data when the creation starts, the Show-on-Timeline button on the entity card automatically fires before the animation begins, ensuring the user sees the plan land.
Briefings post into the system-wide conversation thread asynchronously and surface as an unread count on the chat icon. Per-user (not per-IKA — one set per user):
Single opt-out flips all four off in Settings → Conversation. Optimization: morning brief + overdue nudge run on Haiku; evening + weekly stay on Sonnet.
The dream-cycle (gbrain lift #5) already detects orphan neurons + isolated notes — entities with no incoming or outgoing typed-links. v25.9 promotes that finding from a backend audit log into a user-facing morning-brief sub-section. Any neuron / project / note / event / artifact with zero in-edges and zero out-edges as of the last dream-cycle pass shows up under a "Review isolated items" header inside the morning brief. Three inline actions per row: Link (opens a typeahead picker against OPS_MAP to attach to a project / neuron / parent), Confirm standalone (sets a standalone flag so it stops surfacing), Delete (soft-delete to Recycling Bin). Capped at top-10 by recency so a long-neglected backlog doesn't drown the brief; an "(N more)" link expands the rest in the conversation pane.
Voice transcription appears in user message bubble; reply is rendered text AND spoken (per existing IKA voice). Show-thinking toggle controls whether thoughts are spoken (default: no — thoughts are visual only).
You can ask in any IKA's conversation a question that pulls answers from any of your other IKAs via the SPINE. Reads across without confirmation; writes require destination-IKA echo (tentative-placement). RLS isolation preserved server-side. Per-IKA opt-out toggle.
| Role | What they see |
|---|---|
| Client | Conversation pane only. Show-thinking OFF. |
| Admin | Both Builder feed AND client conversation pane. Show-thinking ON. |
| God view | Builder feed only. |
platform.conversation_threads(id, owner_user_id, kind ['main' | 'pinned'], topic_neuron_ref?, created_at, last_active_at)platform.conversation_messages(id, thread_id, role ['user' | 'ika' | 'thought' | 'action'], body, action_payload?, tentative_flag?, focused_ika_id, created_at)platform.conversation_briefings(id, owner_user_id, kind, schedule, last_fired_at, enabled)owner_user_id = current_user_id().Every CUD-able entity (task · event · project · neuron · note · document · form · person · agent · automation · skill · integration · artifact) has a pin button that adds it to the user's MyPanel — the home dashboard / launch view that already exists in BI.
platform.user_pins(user_id, entity_type, entity_ref, ika_id, pinned_at, sort_order).platform.user_pins(user_id, entity_type, entity_ref, ika_id, pinned_at, sort_order) — composite PK on (user_id, entity_type, entity_ref, ika_id).user_id = current_user_id().POST /api/v1/user_pins · DELETE /api/v1/user_pins/:id · GET /api/v1/user_pins (returns full hydrated list across IKAs the user can read).Every CUD-able entity has a delete button that sends the entity to a per-IKA Recycling Bin. Not a hard delete.
deleted_at TIMESTAMP NULL + deleted_by UUID.WHERE deleted_at IS NULL.DELETE /api/v1/ops/:type/:id — sets deleted_at = now().POST /api/v1/recycling/restore/:type/:id — sets deleted_at = NULL; cascades to soft-deleted children.DELETE /api/v1/recycling/purge/:type/:id — hard-delete.GET /api/v1/recycling/:ika_id — list deleted items in this IKA.Every project has phases as first-class structure. Default phases:
Phases are user-customizable per project. Each phase contains its own slice of tasks / subprojects / people / events / docs / automations. The phase ribbon at the top of the project view scrubs across phases; tasks within a phase aggregate up to the project-level "% Completed" radial.
Every Task / Project / Event carries a priority: High / Medium / Low. Used for:
Pomodoro tracks how much time the user is focused on their tasks overall — global flowstate time across all of the user's IKAs combined. Property of the user, not of any particular neuron or IKA.
| Concept | Question | Cardinality |
|---|---|---|
| Leader | Who is accountable for this happening? | Exactly one human, per project + per task |
| Assignee(s) | Who is doing the work? | Zero or more (humans + agents) |
| Permissions (ACL) | Who can see / edit / share? | Many — per the ACL |
| Entity | Has a leader? | Default |
|---|---|---|
| Project | Yes — single human | The user who created the project |
| Task / Sub-task | Yes | Inherited from parent; overridable |
| Event | Yes (the organizer) | The user who created the event |
| Form | Yes (the form owner) | The user who created the template |
| Neuron | Optional (department leader) | Inherited; can be set explicitly |
| Document, Note, Person, Agent, Integration, Skill, Automation | No | — |
At schema level, only one leader_id. A whole-IKA Full share grants the receiver effective co-leadership (they can edit leader_id). This is a design feature; both parties agree socially who is "the" leader. The audit log + leadership_log show every transfer.
Leaders can assign tasks/projects to agents. Agent becomes assignee; leader stays the accountable human. Agent failures spawn a Form addressed to the leader. Cost attribution: agent invocations bill against the agent's budget; over-budget = task auto-paused + leader notified.
Before a leader assigns, IKA presents a ranked list of candidates (humans + agents) with a fit score. Signals: skill match · integration access · current load · past success rate · recency · cost · availability. Auto-assign mode = opt-in per IKA; default OFF.
leader_id column on projects, tasks, events, form_templates, neurons.leadership_log — entity, prior_leader, new_leader, change_reason, changed_by, changed_at, expires_at.assignment_signals materialized view + assignment_suggestions_log for the learn-from-overrides loop.| Level | Can |
|---|---|
| Full | Read + Write + Delete + share + change permissions |
| Edit | Read + Write |
| Comment | Read + add comments |
| Read | Read only |
| None | Hidden / not in queries |
Inherited from parent neuron by default; overridable per entity. Schema: acl table — (entity_type, entity_id, principal_id, level). Enforced via Postgres RLS as the floor; ACL on top.
Every page we've created on the fly (/paperclip, /openclaw, /intur/v2, /queplan/marcas, /tokens, /gstack, /ika-pro-architecture) is an artifact. Self-contained HTML, lives at a stable URL, owned by one neuron.
name — unique per IKA; URL slug.title — display title (changeable without breaking URL).html_path — disk path of the rendered HTML.thumbnail_url — auto-generated screenshot for the grid view.created_by, neuron_id (canonical home), linked_entities (cross-references).version + per-version snapshots; tags; per-entity ACL.Inside row 5 (full-width), Artifacts renders as a thumbnail tile sub-grid (auto-sizing 3-5 tiles per row). Click → opens artifact in a new browser tab. Hover → preview overlay with version + cross-references. Drag a tile onto a project/task → cross-reference. + button → naming dialog → opens an empty editor or imports HTML.
artifacts — id, ika_id, neuron_id, name, title, html_path, thumbnail_path, created_by_id, current_version, tags.artifact_versions — per-version snapshot.artifact_links — cross-references from drag-drop into project/task/event/note.The user shouldn't have to tell IKA where to save things. When the user asks for a write-up or a file, IKA picks the container and the entity type. Asks only when truly ambiguous. No babysitting required.
| User asks for | IKA produces | Saves under | Deeplink shape |
|---|---|---|---|
| "report on …", "summary of …", "write-up", "analysis", "brief" (no file format mentioned) | Artifact (HTML) | Most relevant task / project / neuron | /.../artifacts/<slug> |
| "spreadsheet", "csv", "xlsx", "pdf", "docx", "word doc", "slides", "deck" | Document (file-bytes in SeaweedFS) | Most relevant task / project / neuron + appears in Documents list | /.../documents/<slug> |
| Ambiguous container | Either, at best-guess location, with v22 "does this belong here?" badge | Best-guess | Same shapes; badge surfaces in entity row |
/<ika>/<neuron-path>/<project-id>/<task-id>/artifacts/<artifact-slug>/<ika>/<neuron-path>/<project-id>/artifacts/<artifact-slug>/<ika>/<neuron-path>/artifacts/<artifact-slug>/<ika>/<neuron-path>/<project-id>/<task-id>/documents/<doc-slug> · appears in both the task's documents list and the neuron's Documents cell./<ika>/<neuron-path>/<project-id>/documents/<doc-slug>/<ika>/<neuron-path>/documents/<doc-slug>File-format keywords (spreadsheet, xlsx, csv, pdf, docx, word doc, slides, deck) → Document. Generic "report / analysis / summary / write-up / overview / brief" → Artifact (HTML, lives at a URL). When confidence is low, IKA persists at its best guess and tags with the v22 tentative-placement "does this belong here?" badge — user can confirm, move, or dismiss to keep the badge.
The MCP / API integration registry is global to a tenant's IKA, but each NEURON exposes only the integrations relevant to its domain. Per-neuron scoping = least-privilege for agents + cleaner UX.
| Neuron domain | Typical integrations |
|---|---|
| Finance | QuickBooks · Xero · Plaid · Stripe · banking · Expensify · Gusto |
| HR / People | BambooHR · Gusto · Lattice · Greenhouse · Slack · Workspace admin |
| Marketing | HubSpot · Mailchimp · Buffer · Canva · Photoshop · Adobe CC · Google Ads · Meta Ads |
| Sales | Salesforce · HubSpot · Pipedrive · Apollo · Calendly · Loom · Zoom |
| Operations | Linear · Jira · Notion · Zendesk · PagerDuty · Datadog · GitHub · GitLab |
| Personal — Home | Hue · Nest · Ring · SmartThings · Tesla · iRobot · Sonos · Apple HomeKit |
| Personal — Health | Apple Health · Whoop · Oura · MyFitnessPal · Strava · Cronometer |
| Personal — Family | Google Calendar · Cozi · school portals · pediatrician portal · TimeTree |
| Universal | Google Drive · Gmail · Slack · WhatsApp Business (agent-tool only) · web search · Computer Use |
| Rule | Behavior |
|---|---|
| Inherit from parent | Sub-neuron inherits its parent's connected integrations by default. |
| Override at any depth | A descendant can ADD its own integrations OR DISABLE a parent's integration for this branch. |
| Cross-neuron drag | Copies the credential reference (not the credential — vault still owns it). Revoking at source revokes both. |
| Per-IKA root canonical | The IKA root (depth 0) holds all connected integrations canonically. Sub-neurons display the inherited subset. |
integrations — id, ika_id, type, credential_vault_ref, connected_at, status.neuron_integrations — neuron_id, integration_id, scope ENUM('inherits_down','neuron_only'), overrides_parent BOOL, override_mode ENUM('replace','and_also'), added_by, added_at.inherits_down. Override default = replace; and_also mode = both rows fire.Where Integrations are external connections, Skills are capability bundles — prompts + tools + scripts the agent uses to do something domain-specific. Skills are auto-activated from context: the LLM decides when one fires. Explicitly user-invoked actions live under Commands instead. Skills are also a component of a Plugin bundle (the outer role-shaped install unit per anthropics/knowledge-work-plugins compatibility).
| Neuron domain | Typical installed skills |
|---|---|
| Marketing | programmatic video skill (alternatives: Revideo Apache-2.0 / Manim BSD / FFmpeg pipeline / Veo-router via API) · Image generation (Nano Banana, Imagen, Midjourney router) · Brand-voice copywriter · Social-post composer · Newsletter formatter · A/B-test analyzer · design-motion-principles · frontend design toolkit |
| Sales | CRM-record summarizer · Cold-email composer · Proposal generator · Deal-status reporter · Customer-interview synthesizer · Pricing-comparison builder |
| Finance | Invoice extractor · Expense categorizer · Cash-flow projector · Tax-form filler · Reconciliation helper · Budget vs actual analyzer |
| HR / People | JD generator · Resume ranker · Interview-feedback synthesizer · Performance-review drafter · Onboarding checklist builder |
| Operations / Engineering | Incident postmortem drafter · ADR writer · Runbook generator |
| Personal | Recipe generator · Grocery-list optimizer · Workout planner · Meal planner · Birthday-gift idea generator · Trip itinerary builder · Homework helper |
| Universal | Document summarizer · Translation · Web-research |
always_on BOOL (re-injected on every SessionStart hook event — default false).community-with-sig tier (publish blocked without it) — see Superpowers S4.| Capability | What it does | Type |
|---|---|---|
skill-creator | Bootstraps a new skill from a description. Publishes drafts only; agents cannot invoke own drafts; explicit human publish required. | Command (post-v25.11 migration) |
skill-search | Searches global vetted catalog + per-IKA catalog. Filters by domain, vetting tier, popularity. | Command (post-v25.11 migration) |
| Tier | Source | Install policy |
|---|---|---|
| Anthropic-shipped | Official Anthropic Claude skills | Auto-allowed |
| IKA-curated | Skills we vet + publish | Auto-allowed; flagged "Vetted by IKA" |
| Community-with-sig | Open-source skills with valid ed25519 signature + declared license | Allowed with one-click confirmation; manifest must declare license ("Not stated" → blocked). |
Skills run in Firecracker microVMs (reusing Computer Use infra), not in-process. Hash re-fetched weekly with drift alerts. Per-IKA skill-count cap + weekly digest of new skills authored.
skills — id, ika_id (or NULL for global), name, version, descriptor_json, sha256, signature, license, vetting_tier, source_url.neuron_skills — neuron_id, skill_id, scope ENUM('inherits_down','neuron_only'), overrides_parent BOOL, override_mode, installed_by, installed_at.skill_invocations — id, neuron_id, agent_id, skill_id, invoked_at, cost_tokens, outcome, trace_ref.Where Skills are auto-activated from context, Commands are explicit user-invoked actions surfaced in a slash-command palette and as autocompletes on "/". The split mirrors anthropics/knowledge-work-plugins's skills/ vs commands/ separation (see /skills/). Same per-row inheritance shape as Skills / Integrations / Agents / Automations.
| Neuron domain | Typical commands |
|---|---|
| Sales | /call-prep · /call-summary · /forecast · /pipeline-review · /account-research |
| Marketing | /brand-voice-check · /campaign-plan · /social-post · /newsletter · /ab-test-analyze |
| Finance | /reconcile · /budget-vs-actual · /cashflow · /expense-categorize |
| Operations / Engineering | /security-review · /qa · /codex · /postmortem · /adr · /runbook |
| Customer Success | /ticket-triage · /escalation-draft · /kb-update |
| Product | /spec · /roadmap · /user-research-synth |
| Universal | /learn · /skill-creator · /skill-search · /plugin-install · /deep-research |
commands — id, ika_id (NULL = global), name, plugin_id (NULL if standalone), descriptor_json, sha256, signature, license, vetting_tier, source_url.neuron_commands — neuron_id, command_id, scope ENUM('inherits_down','neuron_only'), overrides_parent BOOL, override_mode ENUM('replace','and_also'), installed_by, installed_at.command_invocations — id, neuron_id, user_id, command_id, invoked_at, cost_tokens, outcome, trace_ref.Commands run under the same Firecracker isolation + cost-cap governance as Skills.
Audit of github.com/obra/superpowers (Jesse Vincent, MIT, cross-platform coding-agent skills framework) — full page at /superpowers/. Different category from Anthropic's role-shaped plugins: Superpowers ships process discipline, not domain knowledge. Five adopts + two mechanical adopts; nine skips.
IKA-curated Engineering-neuron defaults| Skill | Why |
|---|---|
brainstorming | Universal — also applies to Marketing/Product neurons |
writing-plans | Pairs with our Tasks/Projects entities; structured output |
systematic-debugging | Aligns with our "evidence over claims" preference |
verification-before-completion | Default on agent-as-assignee task closure (the "done" button becomes a check, not a claim) |
writing-skills | Lift its rules into the skill-creator system prompt |
Superpowers ships a SessionStart hook on matcher startup|clear|compact that re-injects always-on skill content. Maps onto IKA's Conversation Surface context-assembly:
| Hook event | IKA equivalent | Re-injection |
|---|---|---|
startup | First turn of a new thread | Always-on skills + IKA universal preamble |
clear | User invokes "new conversation" | Same as startup |
compact | Auto-compaction truncates history | Re-inject always-on skills + last-N-message summary so discipline survives the truncation |
Schema: always_on BOOL column on neuron_skills (default false); new skill_hooks table forward-compatible with Anthropic plugin hooks if/when they ship a hook schema.
Skill description must say when to invoke ("Use when…"), never what the skill does. The LLM router reads description first; workflow-summarizing descriptions cause silent failures where the model follows the description and never loads the body. Enforced in skill-creator system prompt + publish-path validator (rejects workflow verbs like "does", "performs", "generates").
Authors of community-with-sig tier skills must ship a test pair: prove the agent fails the task without the skill (RED), then succeeds with (GREEN). New skill_tests table; CI runs at publish-time + weekly drift check. Anthropic-shipped tier exempt; IKA-curated required for new authoring (existing skills back-tested incrementally with 90-day deadline).
plugin.json.Plugin = a role-shaped install unit bundling Skills + Commands + Integrations + Agents + Automations under one manifest. Adopted from anthropics/knowledge-work-plugins — full analysis at /skills/. Sits one level above the four (now five) per-neuron registries; install fans out into all of them; uninstall removes the fan-out.
Today our 6 onboarding templates already act as plugin-shaped bundles, but at the IKA level (top-level neuron + starter content). A Plugin is the same shape one scope smaller: per-neuron. Users install a Plugin into a Sales neuron and get the 5+ skills, 5+ commands, integration recommendations, agent templates, and automations that role typically needs — in one action.
Plugin manifest mirrors Anthropic's .claude-plugin/plugin.json; connector wiring mirrors .mcp.json. Effect: any plugin from anthropics/knowledge-work-plugins (or any community plugin built to the same spec) installs into an IKA neuron without translation. Bidirectional benefit: IKA-built plugins also run in Cowork and Claude Code, growing distribution beyond our own surface.
| Anthropic plugin | IKA neuron domain | Auto-install in template |
|---|---|---|
productivity | Operations (cross-cutting) | Company |
sales | Sales | Company · E-commerce |
marketing | Marketing | Company · E-commerce · Creativity |
finance | Finance | Company (+ light-mode on Personal Finances) |
customer-support | Customer Success | Company · E-commerce |
product-management | R&D / Product | Company |
data | Engineering / Data | Company · E-commerce |
legal | Legal (sub-neuron of Operations) | opt-in |
bio-research | R&D (vertical-specific) | Health (when clinical) |
enterprise-search | Universal (root) | All templates — installs at IKA root, inherits down |
cowork-plugin-management | Universal (meta) | maps to IKA skill-creator/skill-search meta-commands |
enterprise-search for cross-source research.Plan: ship these as IKA-curated tier plugins; contribute back upstream post-v1.
plugins — id, name, description, version, manifest_json (canonical plugin.json), mcp_json (canonical .mcp.json), source_url, sha256, signature, license, vetting_tier, ika_id (NULL = global, else per-IKA private).neuron_plugins — neuron_id, plugin_id, scope, overrides_parent, override_mode, installed_by, installed_at. Same five-field inheritance shape as the others.plugin_skills / plugin_commands / plugin_integrations / plugin_agents / plugin_automations — bundle-membership tables. A row on a component table optionally carries installed_via_plugin_id so uninstall only removes plugin-installed components, leaving user-added ones intact.Anthropic-shipped tier expands to cover the official anthropics/knowledge-work-plugins repo + future Anthropic plugin catalogs. Same auto-allow + hash-drift + weekly-digest machinery; no manifest-checks for sources signed by the trusted org. IKA-curated + Community-with-sig tiers unchanged.
Agents are Paperclip-managed AI workers bound to a neuron (or a task). They consume Skills + Integrations available in their neuron scope and operate under Paperclip's governance + budget rules.
Leaders can assign tasks/projects to agents. Agent becomes assignee; leader stays the accountable human. Agent moves task through pending → in-progress → submitted-for-review.
Same shape as Integrations / Skills / Automations. Schema: neuron_agents with scope ENUM('inherits_down','neuron_only') + overrides_parent BOOL + override_mode. Default scope = inherits_down.
Recurring agent-driven workflows scoped to a neuron. Triggered by events / schedules / state changes.
Same unified shape as Integrations / Skills / Agents. Schema: neuron_automations with scope + overrides_parent + override_mode. An Automation defined on Marketing fires on every project/task in Marketing AND every sub-neuron AND their descendants, until a descendant overrides.
All six link tables (neuron_integrations · neuron_skills · neuron_commands · neuron_agents · neuron_automations · neuron_plugins) share the same per-row schema. neuron_plugins is the bundle-level row whose install fans out into the other five — see Plugins.
scope ENUM('inherits_down','neuron_only') — default inherits_down.overrides_parent BOOLoverride_mode ENUM('replace','and_also') — default replace.| Question | Answer |
|---|---|
| Where does a parent's row fire? | If scope='inherits_down', fires on the defining neuron AND every descendant, until overridden. |
| What data scope when firing on a descendant? | The firing-row's neuron RLS context — sees what an agent/skill/integration scoped to that descendant would see, not what the parent could see. SHARED quarantine still gates inbound shared content. |
| What does a descendant override do by default? | Replaces. Parent's row does NOT fire on this subtree; the descendant's row fires instead. |
| Is there an "and-also" mode? | Yes — override_mode='and_also': both rows fire on this subtree. |
| UX chip per row | "from <parent>" · "this neuron only" · "overrides <parent>" · "+ also from <parent>". |
New users land on a template picker. Each template = a preconfigured top-level IKA (default neurons + skills + integrations + starter content). Six templates ship at v0.
| Template | Primary ICP | Default top-level neurons |
|---|---|---|
| Personal | Anyone running their personal life as a system | Family · Health · Social · Hobbies · Finances · Home · Travel |
| Company | Business owners / founders / B2B services | Operations · Marketing · Sales · HR · Finance · Customer Success · R&D |
| E-commerce | D2C brands / Shopify owners | Inventory · Orders · Suppliers · Marketing · Customer Service · Returns · Fulfillment |
| Creativity | Agencies · creators · production studios | Projects · Clients · Production · Distribution · Portfolio · Reviews · Pitches |
| Health | Athletes · biohackers | Workouts · Meals · Sleep · Supplements · Doctor visits · Medications · Symptoms |
| School / Student | HS / university / professional learners | Subjects · Classes · Assignments · Exams · Notes · Study Groups · Career |
| Template | 5 starter prompts |
|---|---|
| Personal | "Create event for dinner with Mom Sunday at 7pm" · "Add workout to Health for tomorrow morning" · "Create note Vacation ideas in Family" · "Set recurring grocery-shopping every Saturday" · "Show me everything planned this week" |
| Company | "Create project Q3 Launch in Marketing" · "Add task to research competitors and assign to Carlos" · "Schedule 1:1 with Jane next Tuesday at 2pm" · "Create recurring weekly retro form" · "What tasks are overdue across all projects?" |
| E-commerce | "Create project for Holiday campaign" · "Add task refresh product photography by November 1" · "Set recurring inventory check every Monday" · "Create customer-feedback form" · "Show me orders from last week with low margin" |
| Creativity | "Create client project Acme Brand Refresh" · "Add task draft 3 logo concepts by Friday" · "Schedule review call next Wednesday at 10am" · "Make recurring weekly status form for client check-ins" · "Show all projects in Production phase" |
| Health | "Create recurring strength workout MWF at 7am" · "Add doctor visit October 15 at 3pm" · "Set meal planning task every Sunday evening" · "Log sleep quality as daily habit" · "Show Whoop data for past week" |
| School | "Create project for Calculus midterm in 3 weeks" · "Add tasks for chapters 5 through 8" · "Schedule study group every Tuesday at 6pm" · "Create recurring assignment-tracker form" · "Show upcoming exams sorted by date" |
End-user-facing catalog embedded in onboarding, the help menu, and contextual "Try this" hints inside Operations. Distinct from the internal voice command matrix.
title · example_text · language (en/es) · entity_type · operation · domain_tags · skill_required · screenshot · variations| Surface | Behavior |
|---|---|
| Onboarding step 6 | 5 starter prompts filtered by chosen template |
| Help menu | Browse-able catalog by entity type → operation. Copy + Run buttons. |
| Empty-state hints | Show 2-3 catalog entries relevant to the empty list. |
| Slash menu | Typing / opens catalog as typeahead. |
| Voice listening hint | Rotating ghost-text shows random catalog examples. |
| "Try this" toasts | After a successful action, suggest the next 1-2 logical prompts. |
Starter prompts hardcoded in the React bundle. popularity_score + prompt_runs telemetry catalog table deferred to v1.
| Category | Examples | Connection method |
|---|---|---|
| Communication | Slack · Discord · Email · SMS (Twilio) · WhatsApp Business (agent-tool only) | MCP server or OAuth + API |
| Calendar / Scheduling | Google Calendar · Outlook · Calendly | OAuth + API |
| File / Storage | Google Drive · Dropbox · OneDrive · Box | Uppy Companion |
| Creative | Adobe Premiere · Photoshop · Illustrator · Figma · Canva | Adobe APIs / Figma REST / Photoshop UXP |
| Code / Dev | GitHub · GitLab · Linear · Jira · Vercel · Netlify | OAuth + API; many have official MCP servers |
| Finance | Stripe · QuickBooks · Plaid · banking APIs | OAuth + API (high-trust, governance gating mandatory) |
| CRM / Sales | HubSpot · Salesforce · Pipedrive | OAuth + API |
| Browser / Web | Playwright · web search · scrapers | Already in IKA stack |
| Computer Use | Anthropic Computer Use — drives any desktop app inside per-tenant ephemeral VM | Wrapped as Paperclip MCP plugin (see Computer Use section) |
SaaS APIs cover ~70% of Operations automations. The remaining 30% live in apps with no API (Premiere, Photoshop, legacy ERPs). Anthropic Computer Use closes this gap — the agent literally sees a screen, moves a mouse, types on a keyboard. Wrapped as a Paperclip MCP plugin with per-tenant sandboxed VMs.
| Capability | What the agent can do |
|---|---|
| Screenshot | Snapshot of current desktop / window |
| Mouse | Move, click (left/right/double), drag |
| Keyboard | Type strings, press individual keys (Tab, Enter, Esc, modifiers) |
| Scroll, window management | Switch apps, resize, minimize, focus |
| Vision-grounded reasoning | Claude reads the screen at every step (multi-modal API) |
Credential broker on the host, NOT clipboard inside the VM. The browser inside the VM talks to a host-side localhost proxy; the proxy injects the auth header for known domains and never exposes the secret to the VM process. For non-HTTP apps (Premiere license server, Photoshop activation, legacy thick-client logins), an OS-level keychain is mounted read-only into the VM with per-app entitlements. Vault holds underlying secrets encrypted. Clipboard- and autofill-based delivery are explicitly forbidden.
Both features are OPTIONAL in Settings → Governance, default OFF per IKA. Admin must explicitly enable each. Settings page surfaces a running monthly cost projection if either is enabled (Computer Use ≈ 10× normal text-turn cost; council ≈ 3× normal cost).
cu_sessions — id, ika_id, agent_id, task_id, app, container_id, started_at, ended_at, status, recording_path, cost_tokens.cu_app_policy — per-IKA: app name, allowed (bool), second_opinion_override (bool), notes.cu_recordings stored in SeaweedFS under cu/<tenant>/<date>/<session-id>.mp4 + per-frame screenshot index.| # | Layer | What it optimizes | Est. reduction |
|---|---|---|---|
| L1 | Anthropic Prompt Caching | Cached prefix tokens at 90% off | 30–50% per call |
| L2 | LiteLLM proxy + semantic cache + smart routing | Cache near-identical queries; route low-stakes to Haiku. Every LLM call routes through it from day 1 even at 0% cache hit, so vendor switching is one config flip. | 20–40% (depends on cache hit rate + Haiku-suitable fraction) |
| L3 | RTK shell-output filter | Filters / dedupes / truncates noisy shell-command output BEFORE it enters the LLM context | 60–90% on shell output |
| L4 | Anthropic Message Batches | 50% discount on non-urgent batched calls (24-hour SLA). Dream-cycle uses this by default. | 50% on the batched portion |
| L5 | Pattern cache for known intents | Deterministic responses for known query patterns — bypass the LLM entirely | ~95% off when matched |
| L6 | Graphify (code-graph) | Graph over codebase; agents query graph nodes + neighborhood instead of grep/dump | ~71.5× on codebase Q&A (Graphify's documented number) |
IKA Lab is the experimental BI shell — Mats's prototype sandbox, served at main.ika.ai/lab/. Drag-drop layouts, magic-palette color wheel, lights, particle effects, and other unstable experiments live here before any of them get promoted into the main shell.
It is not a release target and not part of the v0 build plan; it is a parallel canvas. Patterns that earn their keep get ported to the React Operations shell during Phase 1 / Phase 2.
Color coding: safe permissive · notice attribution / acceptable copyleft · risk unverified / commercial.
| Component | License | Status |
|---|---|---|
| Paperclip (forked → ika-operations) | MIT | Safe |
| Anthropic Claude API | Proprietary SaaS | Notice — paid usage; per-IKA budgets |
| Postgres + pgvector + ltree | PostgreSQL License (BSD-style) | Safe |
| Redis | BSD-3 (≤ 7.2) / RSALv2 + SSPL (7.4+) | Pin to ≤ 7.2 OR Valkey (BSD-3 fork) |
| SeaweedFS (S3-compat document store) | Apache-2.0 | Safe — replaces MinIO |
| nginx / Cloudflare Tunnel | BSD-2 / Proprietary SaaS | Safe / Notice |
| Library | License | Status |
|---|---|---|
| React · Vite · react-three-fiber · Three.js | MIT | Safe |
| BlockNote | MPL-2.0 | Notice — file-level copyleft, OK as dep |
| @fullcalendar/react · gantt-task-react · @uppy/react + Companion | MIT | Safe |
| @use-gesture/react · Zustand · date-fns | MIT | Safe |
| Playwright | Apache-2.0 | Safe |
| Layer | Component | License |
|---|---|---|
| L1 / L4 | Anthropic Prompt Caching / Message Batches | Native API (free) |
| L2 | LiteLLM | Apache-2.0 / MIT |
| L3 | RTK | Apache-2.0 |
| L5 | Pattern cache (IKA-bespoke) | Our code |
| L6 | Graphify | MIT |
| Source | What we lift | License |
|---|---|---|
| gstack | Prompt-injection ML classifier (22MB) + canary token format · OWASP/STRIDE prompt templates (opportunistic) | MIT — vendored under /vendored/gstack/ |
| karpathy/llm-council | Multi-vendor council fan-out + reconciliation | Verify license before vendoring |
| garrytan/gbrain (six lifts) | Typed-link extraction · RRF fusion · backlink boosting · compiled-truth schema · dream-cycle · skillify | MIT |
| NousResearch/hermes-paperclip-adapter | TS adapter that runs Hermes Agent inside Paperclip | MIT |
| plastic-labs/honcho | Federated dialectic user modeling (platform.honcho_profile) | MIT |
| agentskills.io standard | Open SKILL.md format spec | Open standard |
| NousResearch/hermes-agent-self-evolution (v1) | DSPy + GEPA evolutionary optimization (≥50 skills required first) | MIT |
| v2 Flutter Timeline (own code) | 26 Dart files: anti-collider, anti-space, interpolation, priority placement (vet before lifting; v2 had bugs) | Proprietary (ours) |
| Anthropic Computer Use reference server | Sandboxed-VM control logic; wrap as Paperclip MCP plugin | MIT |
Remotion dropped due to per-seat licensing model. Alternatives: Revideo (Apache-2.0, Remotion-shape API) · Manim (BSD, mathy/explainer videos) · raw FFmpeg pipeline (Apache-2.0 binary) · Veo / Sora API router (per-call cost, no seats).
gstack is an open-source LLM-security toolkit (MIT). The full comparison vs IKA lives at main.ika.ai/gstack/; this section anchors the inventory.
What we lift: gstack #6 — the 22MB prompt-injection ML classifier + canary-token format, vendored at /vendored/gstack/. This is a v0 launch blocker for any agent that ingests external content (web, email, files). Fail-closed when unavailable.
Opportunistic lifts: OWASP/STRIDE prompt templates for red-teaming. Everything else (auth, sandboxing, rate-limits) we already cover via Firecracker + per-IKA RLS.
| # | Adopt | Phase | Effort |
|---|---|---|---|
| H1 | hermes-paperclip-adapter as agent class | v0 | ~½ day |
| H2 | Honcho dialectic user modeling — federated platform.honcho_profile(user_id) | v0 | ~2 days + ½ day federation |
| H3 | FTS5-style session search via Postgres tsvector (folds into RRF retrieval) | v0 | ~1 day |
| H4 | agentskills.io standard for skill catalog | v0 | ~½ day |
| H5 | hermes-agent-self-evolution (DSPy + GEPA) | v1 (≥50 skills required) | ~3 days when adopted |
| # | Skip | Reason |
|---|---|---|
| H6 | Replace Paperclip with Hermes | Stack rewrite. Hermes is single-user-shaped; multi-tenant adaptation = months for no functional gain over the adapter. |
| H7 | Multi-platform messaging gateway (Telegram / WhatsApp / Slack / etc. as user↔IKA chat surface) | All user↔IKA chat is through the IKA app or web only. Per-neuron Slack/Email integrations as agent tools remain in scope; user-facing chat surface does not. |
| H8 | Daytona / Modal serverless terminal backend | Overlaps Computer Use + Firecracker. Switching abandons credential-broker design + signed-skill isolation pairing. |
| H9 | Atropos RL / trajectory compression | Out of scope until we train our own model. |
| H10 | Hermes voice-memo transcription | IKA voice already shipped. |
Andrej Karpathy's open-source pattern catalog. Full analysis at main.ika.ai/karpathy/.
What we adopt: llm-council — multi-vendor council fan-out + reconciliation, used as our second-opinion governance middleware on high-stakes agent decisions (irreversible writes, external sends, financial actions). License verify pending before vendoring.
Everything else (nanoGPT, micrograd, LLM101) is reference reading, not lifted code.
Odysseus is a self-hosted, privacy-first AI workspace (MIT, Python + FastAPI). Opposite posture from IKA — they self-host model weights (vLLM/llama.cpp/Ollama); we use Anthropic. Despite the posture gap, two patterns lift cleanly. Full analysis at main.ika.ai/odysseus/.
| # | Adopt | Phase | Effort |
|---|---|---|---|
| O1 | Deep Research loop (plan → search → synthesize → reflect, ported from Alibaba DeepResearch). Core IKA Concierge capability — Pro and Enterprise both; sits above the classifier gate as a stakes-triggered escalation in the Conversation Surface. Output writes to Artifact entity with a "convert to Document" affordance for further editing. Pipes citations to assessments table. Per-IKA cost cap (same budget primitive as the rest of the token stack — no separate tier policy). | v0 | ~2 days (skeleton + assessments wiring + budget governance + UX) |
| O2 | Cookbook decision-table pattern — single cookbook.pick(request) entrypoint collapsing the v17 threshold table, gstack #3 second-opinion gate, and the 6-layer token stack into one routing decision per request. Same shape as Odysseus's VRAM-aware fitter, different inputs (tier + budget + SLO instead of VRAM). | v0 (refactor) | ~½ day |
| # | Watch | Reason |
|---|---|---|
| O3 | Odysseus Memory skill-evolution loop (skills mutate based on invocation outcomes) | 1-hour code-walk before specing v1 skill-evolution. Storage layer (ChromaDB) skipped — we're on pgvector + tsvector RRF. |
| # | Skip | Reason |
|---|---|---|
| O4 | OpenCode agent runtime as alt to Hermes-paperclip-adapter | Mats 2026-06-01: Hermes for now. No v1 bench. |
ECC (affaan-m/ECC, MIT, v2.0.0-rc.1) is a harness-native operator system for AI coding agents — 64 agents, 261 skills, ~25 lifecycle hooks, a continuous-learning subsystem. The 261-skill catalog itself is coding-vertical and out of scope for IKA Concierge, but the primitives underneath ride straight onto our existing per-neuron Skills / Commands / Plugins entities. Full analysis at main.ika.ai/ecc/.
| # | Adopt | Why | Effort |
|---|---|---|---|
| E4 | Instincts — atomic, confidence-weighted (0.3–0.9), domain-tagged, evidence-backed learned behaviors with a scope ladder (neuron → ika → global) and a promotion rule (seen in 2+ scopes → promote). Sits between Notes (raw) and Skills (formal) on the formality axis, and between assessments-about-the-world (gbrain lift #4) and skills on the self/other axis. | Highest-leverage primitive in the repo. IKA has nowhere to store claims about IKA's own behavior today; the dream-cycle observer can write instincts on the cadence we already pay for, without per-turn background-Haiku cost. | ~3d |
| E1 | Hook profile env-var — IKA_HOOK_PROFILE=minimal|standard|strict + IKA_DISABLED_HOOKS=…. Add a min_profile column to skill_hooks (v25.12) so a misbehaving hook can be turned down at runtime instead of requiring a migration. | ~50 lines of plumbing for a graceful-degradation kill-switch on the hook pipeline we just shipped. | ~½d |
| E3 | Context-budget audit skill — scans per-neuron Skills / Commands / Plugins / Integrations, estimates token overhead (words × 1.3), classifies Always / Sometimes / Rarely needed, flags bloat patterns, emits a savings report. Ships as IKA-curated/context-budget + /context-budget command, with a MyPanel chip. | Once we have 30+ skills × 12+ MCPs per IKA, "why is the Conversation Surface slow?" becomes unanswerable without instrumentation. Builds the answer-surface before the question arrives. | ~1d |
Implemented on our own schema-per-IKA Postgres + ltree + pgvector. Total adopt-cost ~9.5 days. knowledge-graph (gbrain lifts, user content) is distinct from code-graph (Graphify, codebase, L6).
| # | Lift | Axis | Effort |
|---|---|---|---|
| 1 | Typed-link extraction without LLM calls — deterministic markdown parser detects attended/works_at/reports_to/blocks/mentions via regex + grammar. Zero prompt-injection surface. Saves ~$30–120/mo/IKA at active scale. | COST | ~2d |
| 2 | RRF hybrid search fusion — Reciprocal Rank Fusion of pgvector + tsvector results (score = Σ 1/(k+rank), k=60). ~50 lines in Paperclip retrieval handler. | RECALL | ~1d |
| 3 | Backlink-boosted ranking — multiply retrieval score by log(1 + backlink_count). Free signal — graph already exists from lift #1. | SIGNAL | ~½d |
| 4 | Compiled-truth schema — two-tier storage: events (raw timeline) vs assessments (curated, high-trust statements). Retrieval prefers assessments; falls back to events. | DISCIPLINE | ~1d |
| 5 | Nightly dream-cycle as Paperclip heartbeat — per-IKA cron walks new events and writes/audits assessments + enforces backlinks + flags orphans. Cap 200 events/run, prioritized by typed-link density. Haiku for assessment-writer; Sonnet for citation-audit. Layer 4 Message Batches by default. Per-IKA budget separate from interactive. | SELF-HEALING | ~3d |
| 6 | Skillify pipeline — 10-step checklist converts a one-off agent fix into a reusable, tested skill. Pairs with skill-creator meta-skill. | COMPOUNDING | ~2d |
| Required | Action |
|---|---|
| Privacy policy published | Draft GDPR/LGPD-compliant privacy policy; link from every tenant's footer + login. |
| Documented data-handling map | One-page customer-facing data-flow diagram. |
| Right to delete | Per-IKA "Delete my IKA" flow with 30-day SLA. NO data-export feature — product surface never offers an export button. For EU tenants where GDPR Art.20 portability is legally required, evaluate the minimum legally-mandated shape at v1, separate from any convenience UX. |
| Cookie/tracking consent | Minimal consent banner before any analytics fires; remember choice per tenant. |
| Data residency | Per-IKA "data residency" setting pins LiteLLM router to in-region providers (Bedrock EU / Vertex europe-west / Anthropic EU). Extend to platform.people + platform.honcho_profile + platform.conversation_*. |
| Header | Recommended |
|---|---|
Content-Security-Policy | Restrict script/img/connect-src to self + known CDNs. |
Strict-Transport-Security | max-age=31536000; includeSubDomains. |
X-Frame-Options | SAMEORIGIN. |
X-Content-Type-Options | nosniff. |
Referrer-Policy | strict-origin-when-cross-origin. |
Permissions-Policy | Disable unused browser features. |
22MB classifier vendored from gstack. Launch blocker for any agent ingesting external content. Policy:
JWT moved off URL paths everywhere (HTTP + WS). WS-ticket exchange: browser POSTs /api/v1/ws/ticket over authenticated HTTPS → server returns 30-second-TTL nonce → WS connects with nonce in first frame → server exchanges nonce for JWT-derived session and discards it. JWT itself in HttpOnly Secure cookie scoped to *.ika.ai with SameSite=Lax. Never in URL path, query string, or referer.
| Storage | Action |
|---|---|
| Postgres (schema-per-IKA cluster) | TDE on managed deploy OR LUKS on self-host. |
| SeaweedFS document store | SSE-KMS with per-tenant KMS key (one per IKA, matches schema-per-IKA). Keys in HashiCorp Vault. Annual rotation. |
| Backups | age -R recipients.txt on every snapshot before write. Quarterly key rotation. |
| Computer Use recordings | Same SSE-KMS as documents. |
| In-transit | TLS 1.2+ on all endpoints (Cloudflare-terminated). HSTS preload. |
Postgres Row-Level Security policies as the floor under every query. ACL on top in the application layer. Property-based fuzzing in CI (random user, random entity → assert 403 unless ACL grants).
People are federated single records living in platform.people. Per-IKA visibility via platform.ika_people linking rows. RLS-enforced.
| Path | Detail |
|---|---|
| (a) Migration | One-time merge: for every IKA's people table, INSERT into platform.people with dedup heuristic = email match (canonical primary) + fallback (name + phone) fuzzy match with Levenshtein-≤2 on name AND exact phone match. Collisions land in a manual-review queue. Per-IKA ika_people linking row is created with the resolved platform_person_id. Migration is idempotent. |
| (b) RLS policy | CREATE POLICY platform_people_visibility ON platform.people FOR SELECT USING (EXISTS (SELECT 1 FROM platform.ika_people ip JOIN platform.user_ikas ui ON ui.ika_id = ip.ika_id WHERE ip.platform_person_id = platform.people.person_id AND ui.user_id = current_setting('app.current_user_id')::uuid)); |
| (c) Backup atomicity | Single backup job covers platform schema + every ika_* schema atomically (pg_dump --schema=platform --schema='ika_*' in one transaction or via pg_basebackup). Restore replays the same set; partial-restore is forbidden (cross-schema FKs would dangle). |
| (d) DR runbook | After restore, run consistency check that every ika_people.platform_person_id resolves to an existing platform.people row; orphans surface in Builder DR-status panel for manual reconciliation. |
| Action | What gets deleted | What stays |
|---|---|---|
| Delete IKA-A | IKA-A's schema (ika_a.*) including its ika_people linking rows; per-IKA conversation messages scoped via focused_ika_id get a tombstone marker; per-IKA artifacts. | platform.people rows that other IKAs still reference; platform.honcho_profile for the user; the system-wide conversation thread. |
Person becomes orphaned (last ika_people link removed) | Soft-delete of platform.people row with 30-day grace. Recoverable if user re-adds the person to any IKA inside the grace window. | Audit log entries kept for legal-retention; redacted on user-initiated full-account-delete. |
| GDPR Art.17 erasure | Hard-delete every ika_* schema for that user; hard-delete platform.honcho_profile(user_id); hard-delete platform.conversation_* rows for that user; hard-delete orphaned platform.people rows. | Anonymized aggregates for ops + legal retention only. |
platform.conversation_threads + platform.conversation_messages + platform.conversation_briefings all live in platform, NOT per-IKA. One thread per user across all their IKAs. Pane scopes context per-turn to the in-focus IKA (recorded as focused_ika_id on each message), but the THREAD is single + global. Briefings recompute downward — 4 per user, not 4×N.
Icon row at the top of the window, drag-rearrangeable, persistent per user. Each IKA renders as an icon (color + initial). Active IKA gets a ring. "+" at the end opens the new-IKA flow. Hover = tooltip with full IKA name.
┌─────────────────────────────────────────────────────────────────────────┐ │ row 0 [IKA-1] [IKA-2] [IKA-3] [+] (IKA chrome) │ ← IKA switcher (icon strip, NOT Builder) ├─────────────────────────────────────────────────────────────────────────┤ │ row 1 ( BI | Operations ) │ ← BI ↔ Operations toggle ├─────────────────────────────────────────────────────────────────────────┤ │ row 2 [global search ........................] [voice] [chat-icon●] │ ← global search + voice + chat icon (unread count from briefings) ├──────────────────────────────────────────────────────────┬──────────────┤ │ │ │ │ ACTIVE SHELL BODY (BI or Ops) │ Builder │ ← Builder feed = right-side panel sibling │ │ feed │ │ │ (admin-only)│ └──────────────────────────────────────────────────────────┴──────────────┘
Lists user's own IKAs (business + personal), then a divider, then shared IKAs (with shared-by badges).
Items captured here so the spec doesn't lose them, with the explicit understanding that they ship after v1. Not in any of the 8 v0 sprints. Promoted to a real sprint plan only once v1 is feature-complete and production-stable.
| Capability | Shape | Effort estimate | Why deferred |
|---|---|---|---|
| IKA-as-meeting-bot (native) | Calendar-invite-driven (ika@<tenant>.ika.ai as attendee). Computer Use bot driver in v0 of the capability (reuses our existing Computer Use infra, no new SDK lock-in). Native SDK paths per platform (Zoom Meeting SDK, Microsoft Graph + Teams Bot Framework, Google Meet REST + headless) in v1 of the capability, unified behind a meeting_bot abstraction routed by platform. Capture pipeline: audio → Whisper-large-v3 (in-region equivalent if the tenant has R5 data residency) → speaker diarization → structured JSON → platform.meeting_transcripts + recording in SeaweedFS under meetings/<ika_id>/<date>/<meeting_id>.mp4 with SSE-KMS per-tenant key (M8). Dream-cycle reads new rows + updates Person + Topic pages identical shape to gbrain pipeline. No third-party SaaS (explicitly NOT Granola or Fireflies — Mats's call 2026-04-29). Speaker identity links to federated platform.people records (Q4) so there's no fuzzy reconciliation between someone else's speaker IDs and ours. | ~3 days for the Computer Use shape; ~1 week for the native-SDK shape with Zoom + Meet + Teams. Full feature ~1.5 weeks at swarm pace. | v1 already has a long external-clock list (pen-test, lawyer review, EU residency provisioning). Meeting-bot is a real engineering build with calendar OAuth + audio pipeline + diarization + per-platform driver — fits cleanly post-v1 once those clocks have run. Per Mats 2026-04-29. |
Sprint-based delivery, no blocking. While building, the swarm never stops to wait on Mats — except at sprint review boundaries. Within a sprint, agents proceed; if a question arises, they make the best call (with v22 tentative-placement / "does this belong here?" badging) and surface it for Mats's later review. Sprint cadence: ~1 day swarm work + ~½ day Mats review buffer (default 1.5d sprint). Narrow features can run as ½-day swarm + same-day review.
| Sprint | Scope | Length | Status |
|---|---|---|---|
| 0 — kickoff | The 7 v0 blockers (B1–B7) + supporting infra: gstack prompt-injection lift, Paperclip fork + schema-per-IKA + RLS + platform schema, JWT-off-URL + WS-ticket, Computer Use credential broker, Skill signing + Firecracker, encryption-at-rest + age backups + KMS, Builder host-shell role-gate. | ~1d | awaiting-review |
| 1 — Phase 1 part A | React+Vite+TS skeleton in <div id="ika-react-root">; Operations shell mount inside vanilla; neuron tree; drag-drop; Forms; Phases. | ~1.5d | pending |
| 2 — Phase 1 part B | Leadership; Sharing; Search; Deep-linking; Artifacts grid; 13-cell layout completed. | ~1.5d | pending |
| 3 — Phase 1 part C | Voice matrix v0 (create + read on tasks/events/notes; expand in waves) + IKA Conversation Surface (classifier-gate + drawer + briefings ON + Honcho federated + system-wide threads). | ~1.5d | pending |
| 4 — Phase 1 part D | 6 gbrain lifts (typed-link extraction, RRF fusion, backlink boosting, compiled-truth schema, dream-cycle, skillify) + 6-layer token stack adoption (LiteLLM at L2, Prompt Caching, RTK, Message Batches, pattern cache, Graphify). | ~1.5d | pending |
| 5 — Phase 1 part E | Onboarding × 6 templates + prompt catalog + Skills/Integrations/Agents/Automations with unified inheritance + MyPanel pin + Recycling Bin. | ~1d | pending |
| 6 — Phase 1 final | Integration + smoke test pass (E2E Playwright + a real prosumer walkthrough) + bug-fix loops. | ~1d | pending |
| 7 — Phase 2 start | Vanilla BI rewrite — re-implement charts, drill-downs, query overlay, palette, modal analysis. | ~1.5d | pending |
| 8 — Phase 2 finish | Three.js icosahedron via react-three-fiber inside the same React app + visual regression vs frozen msp.ika.ai. | ~1d | pending |
| Term | Definition |
|---|---|
| IKA | The product. An AI-first management surface for a company or a life context. A user can own multiple IKAs; each is isolated by Postgres schema + RLS. v3 is the current generation. |
| Neuron | The fractal unit of organization inside an IKA. Top-level neurons are departments. Soft cap depth 6. |
| Sub-neuron | A neuron whose parent is another neuron. Same UI primitives — fractal all the way down. |
| SHARED top-neuron | System pseudo-neuron pinned at depth 0 of every user's IKA. Receives entities shared at the sub-entity scope. |
| MyPanel | The user's home dashboard / launch view. Renders the user's pinned entities (per-user, cross-IKA) as a 3-column grid. |
| Recycling Bin | Per-IKA chrome surface listing soft-deleted entities. Auto-purge after 30 days (configurable). Cascading restore. |
| Leader | The single human accountable for delivery of a project / task / event / form / neuron. Distinct from assignee. |
| Assignee | The human or agent doing the work. Many possible per entity; not the leader. |
| Owner | The user who created an entity, or who holds the IKA. The IKA owner has Full ACL by default. |
| code-graph (Graphify) | Graph over the codebase, scoped per repo. L6 of the token stack. |
| knowledge-graph (gbrain) | Graph over user content (notes, events, projects, decisions), scoped per IKA. Lives in each IKA's Postgres schema with ltree + pgvector. |
| Builder | The agent-driver overlay (top bar + side panel + feed + tasks + Q&A + snapshots). Admin-only. Vanilla, host-agnostic, sandboxed iframe with strict CSP + DOMPurify. |
| Builder bundle | Shipped JS+CSS payload at /builder.js, version-pinned by snapshot. |
| Host shell | The IKA app HTML page into which the Builder bundle is conditionally injected at server-render time based on the user's role. |
| Phase 1 | Both Opus + Codex focused on building the React Operations shell INSIDE the existing vanilla shell on main.ika.ai — file-by-file hybrid mount via <div id="ika-react-root">. ~3–4 swarm-days. |
| Phase 2 | After Phase 1 ships, both accounts focused on the vanilla BI → React rewrite inside the same React app. ~2–3 swarm-days. End state: one React app, no legacy vanilla. |
| Honcho | Plastic Labs's dialectic user-modeling microservice. Lifted to platform.honcho_profile(user_id) with optional per-IKA overlays — one canonical user-self model across all the user's IKAs. |
| Conversation thread | One thread per user, system-wide across all their IKAs. Lives in platform.conversation_threads + platform.conversation_messages. Pane scopes context per-turn to in-focus IKA via focused_ika_id. |
| Computer Use | Anthropic's sandboxed desktop-control capability. OPTIONAL, default OFF per IKA in Settings → Governance. |
| LLM council | Multi-vendor second-opinion middleware. OPTIONAL, default OFF, ~3× normal cost; user invokes per-turn with "/council" prefix when enabled. |
| Second opinion | Single-vendor (Codex) review of a high-stakes agent plan. Triggered by money / identity / external-recipient policies. OFF by default; admin opts in. |
| Dream-cycle | Per-IKA nightly Paperclip heartbeat that walks new events and writes/audits assessments + enforces backlinks + flags orphans. Cap 200 events/run; Haiku for assessment-writer, Sonnet for citation-audit; Layer 4 Message Batches; per-IKA budget separate from interactive. |
| Skillify | 10-step pipeline that converts a one-off agent fix into a reusable, tested skill. gbrain lift #6. |
| RRF | Reciprocal Rank Fusion — score = Σ 1/(k+rank), k=60 — combines pgvector and tsvector retrieval. gbrain lift #2. |
| ltree / pgvector | Postgres extensions for hierarchical paths and vector embeddings. |
| RLS | Row-Level Security — Postgres feature that enforces per-row access policies inside the database. The floor under every query. |
| Phases | First-class structure inside a project: Initiation / Definition / Research / Planning / Design / Development / Implementation / Follow-up + custom. |
| Priority | High / Medium / Low chip on every task / project / event. Drives default sort + visual weighting + Timeline placement. |
| Flowstate | GLOBAL user-level metric of focused time across all the user's IKAs. Aggregated from Pomodoro sessions. Rendered in chrome. |
| Pomodoro | 25-minute focus + 5-minute break loop bound to a task. Sessions feed the global Flowstate metric. |
| Forms | Two-tier (Template + Submission) typed data-collection primitive. Field types: Date / Dropdown / Checkbox / Text / Title / Paragraph. |
| Artifacts | On-the-fly created HTML pages owned by a neuron. 13th first-class entity. |
| Integrations | Per-neuron MCP/API connections. Inheritable from parent neuron with override. |
| Skills | Capability bundles installable per-neuron. Every skill row signed (sha256 + ed25519) and license-required; runs in Firecracker. |
| Automations | Recurring agent-driven workflows scoped to a neuron. |
| Events | Time-bounded items with start/end + invitees. |
| Notes | Block-editor (BlockNote) rich-text content attached to a neuron / project / task / event / person. |
| Documents | File-bytes attached via Uppy + Companion. Stored in SeaweedFS. |
| People | Federated human records living in platform.people; per-IKA visibility via ika_people linking rows. One canonical record per real human across all your IKAs. |
| Agents | Paperclip-managed AI workers bound to a neuron (or a task). Can be assignees but never leaders. |
| Projects | Containers for tasks. Have phases, leader, priority, status, dual radial. |
| Tasks | The unit of work. Recursive (sub-tasks). |
| Occurrences | Materialized instances of a recurring task / event / form (iCalendar RRULE). Materialized lazily. |
| Deep-link | Stable URL grammar that addresses any entity inside the fractal. Layer 1 (BI) + Layer 2 (Operations). |
| Layer 1 (BI) | The outer shell — charts, drill-downs, query overlay, palette, modal analysis, neuron icosahedron at BI level. |
| Layer 2 (Operations) | The inner shell — neuron tree, entity lists, drag-drop matrix, plugins, forms, phases, search, sharing. |
| msp / main / intur | Subdomain identifiers. msp = frozen client-presentation. main = active build target. intur = sister product. |
| Prompt-injection classifier | 22MB ML model vendored from gstack #6. Launch blocker. Fail-closed when unavailable. |
| MCP | Model Context Protocol — the integration shape we use for every external service. |
| RTK | Shell-output filter from /tokens. L3 of the token stack. |
| LiteLLM | Vendor-agnostic LLM proxy + router + cache. L2 of the token stack. Every LLM call routes through it from day 1. |
| Message Batches | Anthropic Message Batches API — 50% off for non-user-blocking workloads. L4 of the token stack. |
| Prompt Caching | Anthropic Prompt Caching — re-use cached prefix tokens at large discount. L1 of the token stack. |
| SHARED | Pseudo-neuron rendered at depth 0 by joining the user's shares rows with scope = sub_entity. Receivers see only the shared entity + its descendants — no parent leakage. |
| OPS_MAP | Per-IKA item map (operations_item_map.json) loaded into a global on app boot. Indexes every entity for <5ms voice resolution. |
| SPINE | Per-user cross-IKA spine (user_ika_spine.json) loaded once at login. Indexes IKAs + top-neurons + favorites + recent + people_federation. Resolves cross-IKA voice commands without context-switching. |
| Tentative-placement | Voice utterance → entity persisted immediately at IKA's best guess with a tentative flag → passive confirmation toast → if dismissed, badge stays until reviewed. Voice input never lost. |
#ecc anchor section alongside #odysseus/#superpowers/#plugins. Inventory row added. The 261-skill catalog is coding-vertical and out of scope for Concierge; the architectural primitives underneath are what we lift. Three highest-leverage adopts: (E4) Instincts — atomic, confidence-weighted (0.3–0.9), domain-tagged, evidence-backed learned behaviors with a neuron → ika → global scope ladder and a "seen in 2+ scopes" promotion rule. New instincts table per IKA; observation rides the existing dream-cycle cadence (not a per-turn background Haiku, out of cost posture); clustered + high-confidence + ≥5 evidence rows surfaces a "promote to Skill" suggestion via the existing skill-creator. Sits between Notes (raw) and Skills (formal); disjoint from gbrain assessments via a subject_type IN ('world','self') discriminator (decision deferred to migration time). (E1) Hook profile env-var — IKA_HOOK_PROFILE=minimal|standard|strict + IKA_DISABLED_HOOKS=…; new min_profile TEXT NOT NULL DEFAULT 'standard' column on skill_hooks; composes with v25.12's always_on BOOL via (always_on OR profile ≥ min_profile) AND NOT disabled. Runtime kill-switch on the hook pipeline. (E3) Context-budget audit skill — IKA-curated/context-budget backed by a SQL view over neuron_skills / neuron_commands / neuron_plugins / neuron_integrations; words × 1.3 token heuristic; per-IKA report stored as an Artifact in the Engineering neuron; surfaced as /context-budget command + MyPanel chip. Four further adopts: (E2) GateGuard fact-force — PreToolUse hook blocking the first agent-initiated Edit/Write per (conversation, entity) until investigation is demonstrated; classifier-gate (v22) gates user-explicit vs agent-initiated writes. (E5) In-conversation cost/context monitor — structured cost_warning block injected into the next system turn at 80% of per-IKA cap / 70% of context window / 3 consecutive same-tool calls; the agent self-corrects mid-turn instead of getting hard-stopped. (E6) Brief-as-markdown — Conversation Surface morning brief gains a markdown serializer + "Export" affordance for Slack/email/WhatsApp handoff. (E7) Per-Automation write_scope_path — Safety-Guard freeze pattern: writes outside the configured tree are blocked at the PreToolUse hook, audited to the per-IKA security log. Skipped: (S1) the 261-skill catalog (coding-vertical bias) · (S2) multi-harness manifest translation across 10 harness shells (IKA is the harness) · (S3) extracting instincts via a background Haiku agent per tool call (cost; ride the dream-cycle instead) · (S4) the Rust ecc2/ control-plane (third process language not on the table; lift the status surface only via E6) · (S5) NPM distribution + GitHub App marketplace (distribution model, not architecture) · (S6) legacy commands/ shim layer (ECC themselves flag it for deprecation) · (S7) Tkinter dashboard GUI · (S8) AgentShield (adjacent product; overlaps existing Security baseline). Open questions: instincts/assessments table-shape decision · fact-force friction in Concierge (mitigated by classifier-gate distinguishing user-explicit vs agent-initiated) · star-count credibility in README (treat patterns on merit, not social proof). Effort estimate: ~6 days total for E1–E7 (E4 ~3d, E2 ~1d, E3 ~1d, E1/E5/E6/E7 ~½d each). All slot inside existing Skills / Commands / Plugins / Superpowers sections plus one new instincts table — no new entity introduced.#superpowers anchor section alongside #plugins/#commands. Inventory row added. Different category from Anthropic plugins (those are role-shaped domain bundles; Superpowers is engineering-discipline meta-skills). Five skill adopts as IKA-curated Engineering-neuron defaults: brainstorming · writing-plans · systematic-debugging · verification-before-completion · writing-skills. Two mechanical adopts: (a) SessionStart hook contract — named events startup / clear / compact for the Conversation Surface re-injection path; new always_on BOOL column on neuron_skills + new skill_hooks table forward-compatible with Anthropic plugin hooks. (b) Trigger-focused description rule — skill description must say "Use when…", never workflow-summarizing; enforced in skill-creator system prompt + publish-path validator. Vetting addition: RED/GREEN test pair required for community-with-sig tier (publish blocked without proof the skill changes behavior); new skill_tests table; IKA-curated back-tested incrementally with 90-day deadline; Anthropic-shipped exempt. Default behavior change: verification-before-completion fires on every agent-as-assignee task closure — writes evidence (logs, artifacts, asserts) to the task's review thread before flipping to submitted-for-review. Skipped: iron-law TDD as universal default · invoke-skill-before-any-response rule · git-worktrees / finishing-a-development-branch · dispatching-parallel-agents / subagent-driven-development (duplicate Paperclip) · cross-platform installer (we are our own platform). Skill anatomy section updated to reflect the trigger-focused description + always_on flag + RED/GREEN test gate. Effort estimate: ~4 days for S1–S6 (skill import + hook contract + description rule + RED/GREEN test + verification default + skill-creator prompt update). All slot inside existing Skills + Commands + Plugins sections — no new entity introduced.Plugin as new first-class entity (the 14th) — role-shaped bundle of Skills + Commands + Integrations + Agents + Automations under one manifest. New plugins table + neuron_plugins link table + 5 plugin_* bundle-membership tables. Install fans out, uninstall removes fan-out. New Plugins section. (2) Command as new first-class entity (the 15th) — explicit slash-invoked actions, bifurcated from Skills (which stay auto-activated-from-context). Today's /security-review, /qa, /codex, /learn, skill-creator, skill-search migrate to Commands. New Commands section. (3) Wire-format compatibility — speak .claude-plugin/plugin.json + .mcp.json so any anthropics/knowledge-work-plugin installs into an IKA neuron without translation, and IKA-built plugins install into Cowork + Claude Code. Inheritance semantics extended from 4 link tables to 6 (added neuron_commands + neuron_plugins). Onboarding-template seed map: each Company-template neuron pre-installs its corresponding Anthropic plugin under the Anthropic-shipped vetting tier (Sales → sales; Marketing → marketing; Finance → finance; Operations → productivity+data; Customer Success → customer-support; R&D → product-management). enterprise-search installs at IKA root, inherits down everywhere. Personal template stays IKA-original (Anthropic ships no Personal plugins) — wedge opportunity. HR/People plugin to be IKA-curated and contributed back upstream. Differentiators kept: per-neuron scoping + inheritance, 3-tier vetting + license enforcement + ed25519, Firecracker microVM isolation, per-IKA cost cap — Anthropic has none of these. WATCH: cowork-plugin-management meta-plugin (overlaps with skill-creator); 1-hour code-walk before specing v1 Plugin authoring UX. Effort estimate: ~4–5 days for P1–P5 (Plugin entity + Command entity + manifest reader/writer + 6-link-table inheritance + template seeds); P6 code-walk 1h; P7 contribute-back post-v1./ika-pro-architecture/ still in place, rename pending (touches nginx + cross-links across /karpathy/, /gstack/, /hermes/, /secondbrain/, /odysseus/, /tokens/, /graphify/). (2) Removed invented tier framing — prior v25.10 / v25.10.1 wrote "default OFF free / opt-in pro / ON enterprise" for Deep Research. IKA has no free tier; Pro and Enterprise are the only tiers. Per Mats 2026-06-01, Deep Research is core IKA Concierge capability for both Pro and Enterprise — no tier toggle, governed by the same per-IKA cost cap as the rest of the token stack. Tier language scrubbed from #odysseus and the /odysseus/ page. Origin of the error: I invented "free tier / pro / enterprise" from generic SaaS patterns instead of reading the architecture page first; no source in the doc claims a free tier exists. Logged so it doesn't repeat.query exit. (2) Output container locked to Artifact + "convert to Document" affordance for further editing. (3) O2 Cookbook refactor greenlit — collapse v17 threshold table + gstack #3 gate + 6-layer token stack into a single cookbook.pick(request) entrypoint. (4) O4 OpenCode skipped — Hermes-paperclip-adapter is the agent runtime, no v1 bench. Adoption tables in #odysseus updated to reflect locked decisions. (Note: the "default-OFF for free tier" framing in this entry was wrong and is corrected in v25.10.2 — IKA has no free tier.)#odysseus anchor section added alongside #karpathy/#hermes/#gstack. Inventory row added. Two adopts: (O1) Deep Research loop, (O2) Cookbook decision-table refactor. Two watches: (O3) Memory skill-evolution loop, (O4) OpenCode runtime bench. Skipped: model serving, ChromaDB, SearXNG, email/calendar/editor clients, image editing, file upload, 2FA, GPU passthrough, native install — out of posture. (Original wording included invented "free / pro / enterprise" tier framing for Deep Research — corrected in v25.10.2.)/design/ subdomain split. The Design System lived at bi/design/, served only on msp.ika.ai. main.ika.ai/design/ was returning the SPA fallback (1.19 MB index, no design content). Mats flagged it. Same pattern as v25.8 pnud/steering/infra: moved bi/design/ → bi/main/design/, removed the location /design block from msp's nginx vhost, restarted container. Now: main.ika.ai/design/ serves the real Design System; msp.ika.ai/design/ falls through to SPA; intur.ika.ai/design/ unchanged (its own copy at intur/design/). Inventory row updated to main.ika.ai/design/.#orphan-in-brief under Conversation Surface § Briefings. Zero additional LLM cost — the dream-cycle pass already produces the list. (2) Pre-query knowledge-graph dedup — before the conversation surface dispatches a Sonnet turn, run a fast RRF + backlink-boost lookup against assessments. If a high-confidence match exists, surface the existing note inline before generating: 'You wrote about this on YYYY-MM-DD — open or generate anyway?'. ~5ms pure-JS pre-flight, zero LLM cost. New subsection #pre-query-dedup under Conversation Surface § Classifier gate. Threshold tunable per-IKA in Settings → Conversation, default RRF score 0.6. (3) IKA-as-meeting-bot DEFERRED to post-v1 — Mats's call 2026-04-29: the native meeting-bot capability (calendar invite + Computer Use bot driver / native SDKs + Whisper capture pipeline + diarization + dream-cycle integration) ships after v1, not in any of the 8 v0 sprints. Captured in a new #post-v1 Post-v1 capabilities section so the spec keeps it on the radar.pnud/, steering/, infra/ moved from build/web/bi/ to build/web/bi/main/; they now serve only on main.ika.ai and disappear from msp.ika.ai. (2) Archived 7 pages to build/web/bi/.archived/ (no longer linked, no longer served): builderv3test, os, rc, pre3JSupdate, updated3j, ika-bi-snapshot-20260414, deprecated. (3) Inventory anchor-folding — the five adopted-analysis pages (/gstack/, /hermes/, /karpathy/, /tokens/, /lab/) now point at architecture-page anchors (#gstack, #hermes, #karpathy, #tokens, #lab) since this doc is the canonical home for adoption decisions. Added three short summary subsections (gstack / Karpathy / Lab) to back the anchors; Hermes / Knowledge graph / Token economics already had bodies, just got ids. Removed the parenthetical /graphify/ redundancy from the /graphify/ row. (4) Design spec section added after Visual reference — 7 texture tokens (Glass Panel, Modal Surface, Card Surface, Quote Block, Featured Card, Gold Featured, Cursor Glow), the sunken-area inset-shadow pattern, and the active-state conic-gradient outline animation, all with paste-ready CSS snippets. Color tokens kept at /design/.main.ika.ai URLs. Reality: msp.ika.ai is rooted at build/web/bi/, main.ika.ai is rooted at build/web/bi/main/ — different filesystem paths. Pages that exist only under bi/ (agents, pnud, prompts, steering, infra, builderv3test, os, rc, deprecated, snapshots, design) must be linked at msp.ika.ai/<path>/; main.ika.ai falls back to its SPA index.html for any missing path, which is what produced the "Error loading dashboard_data_full.json" Mats hit on main.ika.ai/pnud/. All 13 such rows corrected, plus the v25.3 /design/ row (was pointing at the wrong subdomain). Subdomain root rule documented inline below the inventory./agents/ (MSP AI Agents proposal), /pnud/ (PNUD client tool), /prompts/ (sitemap), /steering/, /infra/, /builderv3test/, /os/, plus 4 historical snapshots (/rc/, /pre3JSupdate/, /updated3j/, /ika-bi-snapshot-20260414/) tagged with status pills, and /deprecated/ tagged accordingly. Inventory now lists 23 artifacts (was 11). Both msp.ika.ai and main.ika.ai resolve every entry — they share the bi/ root.shares; lands in recipient's SHARED top-neuron). Add people opens a typeahead over platform.people (current IKA first, then federated) and writes to entity_participants(entity_type, entity_id, person_id, role, added_at, added_by); roles vary by entity type (assignee / invitee / collaborator / owner / team member). Identical outcome whether the user drags a person card onto the entity OR clicks the Add people button. Drop matrix updated with explicit Person → Note / Document / Form / Artifact rows. Two-button overlap clarified: Share = grant cross-ACL access via SHARED; Add people = attach an in-scope person as a participant.resize: both, min 320×200, sized state per entity-type). Composes with v22 cross-tab focus. Artifacts vs Documents auto-routing — IKA picks container + entity type by request shape; file-format keywords (spreadsheet, csv, xlsx, pdf, docx, slides, deck) → Document, generic "report / summary / write-up / analysis / brief" → Artifact (HTML at a URL). Deeplink shapes for task / project / neuron scope. Ambiguous container = best-guess + tentative-placement badge. Concrete next steps replaced with 8-sprint plan (~10–11 calendar days) + placeholder progress bar (status pills per sprint). "Non-blocking external work" subsection added: lawyer review, EU/LATAM residency provisioning, pen-test, DR test-restore — none gate the swarm. v1 estimate paragraph rewritten accordingly.platform.user_pins) — every entity has a pin button. Added Recycling Bin (soft-delete with deleted_at; per-IKA chrome surface; restore / hard-delete actions; 30-day auto-purge; cascading; voice "delete/restore"; 5s undo toast). Sticky mobile TOC dropdown (collapsible from chrome) implemented for <1100px viewports.platform.honcho_profile(user_id). Conversations system-wide (platform.conversation_*) — one thread per user. Inheritance schema unified across neuron_integrations / neuron_skills / neuron_agents / neuron_automations with scope + overrides_parent. Briefings reframed as async-into-thread + unread badge. <IkaIdentityModal> spec'd. OPS_MAP people carries platform_person_id. MinIO swept to SeaweedFS. "before pnud" rewritten to "before first dynamic tenant (TBD)". MAJOR PLAN CHANGE: Path A / Path C dual-track is DEAD — replaced with sequential two-phase plan (Phase 1 React Operations inside vanilla, Phase 2 vanilla BI → React rewrite). Both accounts on same focus per phase. ~5–8 calendar days for v0.platform.people + ika_people. pnud descoped from first-dynamic-tenant slot. Proactive briefings flipped ON by default.builder.ika.ai. Per-user, Builder is GLOBAL across all the user's IKAs. Backups snapshot the IKA frontend AND pin the Builder bundle version, but Builder DATA is always live.