ECC · Analysis for IKA Concierge

Audit of github.com/affaan-m/ECC ("Everything Claude Code") against IKA Concierge needs. Compiled 2026-06-09. Companion to /ika-pro-architecture, /odysseus, /superpowers, /skills.

Executive summary

ECC is a harness-native operator system, not an app. IKA reads it for primitives, not features. Three patterns lift cleanly; one is the single most original idea in the repo.

ECC (MIT, v2.0.0-rc.1) is a plugin pack for AI coding harnesses — 64 specialist agents, 261 skills, 84 commands, ~25 lifecycle hooks, and a continuous-learning subsystem that turns observed sessions into atomic "instincts" with confidence scoring. Built for Claude Code, Cursor, Codex, OpenCode, Gemini, Zed and Copilot — i.e. for developers, not for the prosumer / SMB knowledge-work surface IKA targets. The 261-skill catalog itself is almost entirely coding-specific and irrelevant to IKA. The architecture underneath the catalog, however, contains four things worth lifting: a runtime hook-profile switch, a fact-force gate that blocks first-write-per-file until the agent investigates, a context-budget audit skill, and — most importantly — the "instinct" model: atomic, confidence-weighted, project-scoped learned behaviors that promote to global when seen in two or more projects. IKA Concierge is, in effect, the same problem shape (a long-running agent harness over knowledge-work) without the coding-vertical bias. We adopt the primitives, ignore the catalog, and keep our own posture.

What ECC is

Posture: harness-native operator system for agentic coding work, distributed as an NPM/marketplace install across seven AI coding harnesses. MIT-licensed. Single maintainer, weekly cadence, ~150 GitHub App installs at clone time.

Stack: JavaScript/TypeScript for the hook runtime, Python for the dashboard + LLM core (src/llm/ with provider abstractions over Ollama / AstraFlow / Claude / OpenAI), Rust prototype for an out-of-process control plane (ecc2/), shell installers.

Distribution: ecc-universal + ecc-agentshield NPM packages; ecc-tools GitHub App; gitagent agent.yaml spec; per-harness manifest shells (.claude-plugin/, .codex-plugin/, .opencode/, .cursor/, .kiro/, .gemini/, .qwen/, .zed/, .codebuddy/, .trae/).

Repo shape:

Design choices worth naming:

Component map — ECC primitive → IKA counterpart → verdict

ECC primitiveIKA counterpart todayVerdict
Skill = markdown + trigger-focused frontmatterAlready first-class entity per architecture, with 3-tier vetting + ed25519 + FirecrackerAlready adopted (v25.11 / v25.12)
Specialist subagent (markdown spec)Per-neuron Agents entityAlready adopted
Hook lifecycle events (PreToolUse / PostToolUse / PreCompact / SessionStart / Stop / SessionEnd / PostToolUseFailure)SessionStart hook contract from Superpowers adoption (v25.12) — startup / clear / compact. skill_hooks table exists.EXTEND — add the missing event names; current contract is a subset
Hook profile env-var (ECC_HOOK_PROFILE, ECC_DISABLED_HOOKS)Nothing — hooks are on if present, off if deletedADOPT (E1) — runtime kill-switch
GateGuard fact-force — block first write per file until investigationsuperpowers/verification-before-completion fires at done-time, not write-timeADOPT (E2) — write-time complement to verification-at-done
Context-budget audit skillNothing — no audit of per-neuron component token overheadADOPT (E3) — Engineering-neuron default
Instincts — atomic, confidence-weighted, project-scoped learned behaviors with promotionGbrain dream-cycle writes assessments (about the world), not instincts (about IKA's own behavior)ADOPT (E4) — new data layer, sits between Notes and Skills
In-conversation cost/context monitor — injects warnings into the next system turn on threshold breachPer-IKA cost cap exists at the budget layer; no agent-facing warning channelADOPT (E5) — agent-level self-correction
Status as portable markdown handoff (ecc status --markdown)Conversation Surface morning brief — same shape, single channelADOPT (E6) — multi-channel emit
Safety-Guard freeze mode — lock writes to a directory treeNothing scope-bounded for autonomous Automation runsADOPT (E7) — per-Automation write_scope_path
Iterative-retrieval pattern (4-phase DISPATCH/EVAL/REFINE/LOOP, cap 3)Subagent context-handoff is currently ad-hoc per Paperclip skillWATCH — pattern is correct; we may already cover it implicitly via gbrain RRF + classifier gate. 1h code-walk before deciding.
261-skill catalog (django-tdd, kotlin-coroutines-flows, springboot-security, manim-video…)Per-neuron Skills with per-Company onboarding seed mapSkip — coding-vertical bias; IKA is knowledge-work
Multi-harness manifest translation (agent.yaml + 10 per-harness manifest shells)Anthropic .claude-plugin/plugin.json wire-format already adopted (v25.11)Skip — IKA is the harness
Rust control-plane (ecc2/)Go ika-api backend + Flask BI on :3055Skip — third process language is not on the table; lift the status surface only (E6)
NPM distribution + GitHub App marketplacePer-IKA install + Anthropic plugin marketplace compatibility (v25.11)Skip — distribution model, not architecture
Legacy commands/ shim layer (84 commands)Commands entity (v25.11)Skip — ECC itself flagged this for deprecation
Tkinter dashboard GUI (ecc_dashboard.py)BI shell on main.ika.aiSkip — wrong design language

Patterns to ADOPT — full justification

E1 · Hook profile env-var

Pattern: ECC_HOOK_PROFILE=minimal|standard|strict + ECC_DISABLED_HOOKS=<id>,<id> let an operator turn the hook pipeline down without editing files. Each hook declares which profiles it runs under (e.g. minimal,standard,strict for the metrics bridge; standard,strict for stricter gates).

Why now: IKA shipped the SessionStart hook contract in v25.12. There is no runtime kill-switch yet — a misbehaving hook has to be deleted from skill_hooks, which means a migration. Adding a min_profile column and reading an env var at the dispatcher is ~50 lines and gives us a graceful degradation path for incidents.

IKA integration: extend the skill_hooks table from v25.12 with min_profile TEXT NOT NULL DEFAULT 'standard'. Read IKA_HOOK_PROFILE (default standard) and IKA_DISABLED_HOOKS (comma list of hook ids) in the dispatcher. No new entity, no schema-per-IKA work — global infrastructure.

Effort: ~½ day.

E2 · GateGuard fact-force

Pattern: a PreToolUse hook on Edit/Write that blocks the FIRST modification per file per session until the agent has demonstrably investigated the file's context (importers, schema references, user instructions referencing it). Subsequent edits to the same file in the same session pass without the gate.

Why now: the most common Conversation-Surface failure mode is "IKA wrote the field, but the field doesn't exist in the schema" or "IKA updated the contact name, but the contact lives in a different IKA". A write-time gate that forces a read first turns this from a silent failure into a deliberate investigation. Pairs with superpowers/verification-before-completion, which fires at done-time — fact-force fires at write-time, so the two together bracket every operation.

IKA integration: new PreToolUse hook on Operations Edit / Write tool calls. Track (conversation_id, entity_type, entity_id) "investigated" flags in conversation state. Skip the gate when the user explicitly asked for the change ("agent-initiated" vs "user-explicit" distinction).

Effort: ~1 day including the user-vs-agent classifier wired to the existing conversation-surface classifier gate (v22).

E3 · Context-budget audit as a Skill

Pattern: a skill that scans every loaded component (agents, skills, rules, MCP servers, CLAUDE.md), estimates token overhead (words × 1.3), classifies into Always / Sometimes / Rarely needed, flags bloat (descriptions >30 words, files >200 lines, MCPs wrapping native CLIs, >10 servers, redundant content), and emits a prioritized savings report.

Why now: we are going to land in the exact same trap ECC hit. Once we have 30+ per-neuron Skills, 12+ MCP integrations, 8+ hooks installed across templates, the question "why is the Conversation Surface slow today?" becomes unanswerable without instrumentation. Building the audit as a first-class skill — and surfacing it both as /context-budget and as a chip in MyPanel — turns the question into a one-click answer.

IKA integration: add IKA-curated/context-budget skill backed by a SQL view over neuron_skills / neuron_commands / neuron_plugins / neuron_integrations. Token estimate uses the same words × 1.3 heuristic ECC uses (no need for the actual tokenizer in the audit path). Per-IKA report stored as an Artifact in the Engineering neuron.

Effort: ~1 day.

E4 · Instincts — atomic confidence-weighted learned behaviors

Pattern (the most original idea in the repo): an instinct is a small learned behavior with shape { id, trigger, action, confidence: 0.3–0.9, domain, scope: project|global, evidence: [] }. Observations come in via the hook pipeline; a background Haiku agent (not the main context) clusters and writes instincts. Confidence decays without reinforcement. Project-scoped by default (keyed off git remote URL hash) so behaviors don't leak between projects. Promotion path: an instinct seen in 2+ projects gets promoted to global. Evolution path: instincts → cluster → Skill / Command / Agent.

Why this matters most: IKA already has the dream-cycle (gbrain lift #5) writing assessments — claims about the world. We do not have a place for claims about IKA's own behavior ("when Mats asks for a brief he means morning + Spanish + ≤10 bullets"). Instincts fill that gap with a primitive that is small enough to write automatically, confidence-weighted so the system knows what to trust, and scoped so multi-IKA isolation holds. It sits naturally between Notes (raw, free-form) and Skills (formal, vetted).

IKA integration:

Effort: ~3 days (schema + dream-cycle observer + promotion ladder + skill-promotion surface). Highest-leverage adopt on the page.

E5 · In-conversation cost / context monitor

Pattern: post:ecc-context-monitor injects a structured warning into the agent's next system turn when token cost, context-window utilization, or tool-loop heuristics cross thresholds. The agent self-corrects mid-turn instead of getting hard-stopped by the cap.

Why now: the per-IKA cost cap (in the token-stack section of /ika-pro-architecture) enforces at the budget layer — it kills the request when the cap is breached. The agent has no opportunity to wind down gracefully (write a partial result, defer to a cheaper model, ask the user). Adding the warning-injection pattern at 80% of cap / 70% of context window / 3 consecutive same-tool calls gives the agent a chance to land softly.

IKA integration: wire into the existing per-IKA cost-cap primitive. Emit a structured {type: "cost_warning", budget_remaining_pct, context_used_pct, recent_tool_repeat_count} block into the next system turn. Threshold tunable per-IKA in Settings → Conversation, defaults named above.

Effort: ~½ day.

E6 · Status as portable markdown handoff

Pattern: ecc status --markdown --write status.md produces a portable snapshot covering readiness, active sessions, skill-run health, install health, pending governance events, linked work items. Designed for cross-channel handoff (paste into Slack, email, etc.).

Why now: the Conversation Surface morning brief is already exactly this shape, but it lives only in the IKA thread. Making it emit a markdown variant lets Mats forward "what IKA is on today" into any channel without screenshots. Also lights up the IKA-as-collaborator surface for users who live in Slack/email more than in the IKA chrome.

IKA integration: existing Brief generator gains a format: markdown output path; same data, different serializer. Add an "Export" affordance on every Brief that copies the markdown or pipes it to a configured channel (Slack webhook, email, WhatsApp via per-neuron Integration).

Effort: ~½ day.

E7 · Safety-Guard freeze mode for autonomous runs

Pattern: lock all writes to a specific directory tree for the duration of an autonomous run. Any out-of-scope write is blocked with an explanation; reads remain unrestricted.

Why now: an Automation that runs under an agent identity should not, by default, be allowed to mutate the entire IKA. Today the bound is the per-Automation role/permissions, which is correct for ACL but not enforced at the write-tool layer. Adding a write_scope_path field that the PreToolUse hook checks against every Operations write turns "in theory the agent only touches Engineering" into "in fact the agent cannot touch anything else, even if the prompt convinces it to."

IKA integration: new automations.write_scope_path TEXT NULL; when set, every write tool call from the Automation's agent is checked against it. Out-of-scope = blocked at the hook with an explanation, audited to the per-IKA security log.

Effort: ~½ day.

Patterns to NOT adopt

#SkipReason
S1The 261-skill catalog90%+ of the catalog is dev-harness vertical (Django, Spring Boot, Kotlin coroutines, PyTorch, Manim). IKA's vertical is prosumer / SMB knowledge work. We lift the shape of a Skill (markdown + trigger-focused frontmatter — already done) and ignore the inventory. Building Spanish-first Concierge skills against the IKA-owned 3-tier vetting catalog is the right path, not vendoring 261 English coding skills.
S2Multi-harness manifest translation (agent.yaml, .codex-plugin/, .opencode/, .cursor/, .kiro/, .gemini/, .qwen/, .zed/, .codebuddy/, .trae/)ECC ships into 10 different surfaces because that is its product. IKA is its own harness for its own users. Anthropic-plugin wire-format compatibility was adopted in v25.11 — that is the only translation layer we need.
S3Instinct extraction via background Haiku agent over every tool callThe instinct model is the highest-value adopt (E4). The extraction mechanism — sniff every tool call, ship to a background Haiku, write atomic instincts at Stop — is too noisy for the Conversation Surface and doubles our per-turn cost. Run the same logic as a dream-cycle observer instead, on the per-IKA cadence we already pay for.
S4Rust control-plane (ecc2/) as an architecture modelIKA already has its own Go control-plane (ika-api) and a Flask BI on :3055. A third process language is not on the table. Lift the portable status surface (E6); leave the rest.
S5NPM-packaged plugin distribution + GitHub App marketplaceDistribution model, not architecture. IKA's distribution is per-IKA + Anthropic-plugin marketplace compatibility (v25.11).
S6Legacy commands/ shim layer (84 entries)ECC themselves call this a deprecation surface; new contributions land in skills/. We are net-new and adopt only the skills-first path.
S7Tkinter dashboard GUI (ecc_dashboard.py)Wrong design language. The BI shell on main.ika.ai is the IKA chrome — we do not bolt a separate desktop app onto it.
S8AgentShield as a built-in security scannerAdjacent product, separately monetized by ECC, with overlapping scope to our existing Security baseline + prompt-injection classifier (v21). Not enough delta to justify vendoring.

Open questions — validate before committing

  1. Instinct vs assessment overlap. Both are typed claims with provenance. Decision needed: one table with a subject_type IN ('world', 'self') discriminator, or two tables with a shared evidence join? The choice constrains the dream-cycle observer code. Lean: one table, two indexes, two views.
  2. Fact-force friction in a Conversation Surface. The pattern is borrowed from a coding harness where deliberate writes are the norm. In Concierge, the user expects "add a task called X" to land in one beat. Mitigation: only fire fact-force when the write is agent-initiated (planner / automation / suggestion) — never when the user issued an explicit command. Need to confirm the classifier-gate (v22) reliably distinguishes the two.
  3. Hook profile interaction with Superpowers always_on. v25.12 added always_on BOOL on neuron_skills. Don't ship two parallel disable mechanisms — the new min_profile column should compose with always_on: a hook only runs if (always_on OR profile ≥ min_profile) AND NOT disabled.
  4. Star count credibility. README claims "182K+ stars" in a markdown badge, but the live shields.io badge above does not corroborate that count. The technical patterns stand on their own merit — this matters only if the board narrative leans on social proof. Use the patterns, not the marketing.
  5. License attribution. MIT, clean to vendor. Per-skill attribution row in the IKA-curated vetting tier is sufficient.

Sources

All paths relative to a fresh clone of github.com/affaan-m/ECC on 2026-06-09.

Raw analysis notes: /tmp/ecc-analysis.md.