Capability Allowlist (A1/A2)
This guide documents the release behavior of capability governance.
1. Files and Merge Model
Allowlist policy is always composed from two layers:
- packaged default:
src/cccc/resources/capability-allowlist.default.yaml - user overlay:
CCCC_HOME/config/capability-allowlist.user.yaml
Effective policy is deterministic merge:
effective = merge(default, overlay)- mapping keys are merged recursively
- non-mapping values (including lists) are replaced by overlay value
No env/path override compatibility remains. Use overlay APIs only.
2. Policy Levels
Supported level values:
indexed: kept in local catalog, hidden from normal discovery/exposuremounted: searchable/discoverable, can be enabled on demandenabled: mounted + preferred baseline intent (does not auto-mutate runtime state by itself)pinned: enabled + long-lived baseline intent (typically applied via actor-profile/role defaults)
Runtime mutation still happens only through explicit enable flows (capability_enable / capability_use) or actor profile default application on actor start.
Release baseline policy:
- third-party sources are discoverable by default (
mounted) - external capability sources default to usable path (
mounted) in normal mode - conservative users can switch external capability sources back to
indexedthroughexternal_capability_safety_mode - runtime flow has no approval gate; enable path is one-step when
enable_supported=true blockedis explicit deny state (policy/source/runtime blocklist), reserved for clear deny signals
Runtime blocklist model:
scope=group: foreman or user can block/unblock capabilities for this groupscope=global: only user can block/unblock capabilities globally- block action immediately revokes bindings and runtime tool visibility (relist/reconnect required)
3. Runtime Discovery Model
Runtime path does not run daemon-side periodic source sync loops.
Discovery flow:
- search local curated catalog first
- optionally augment from remote fallback when local results are insufficient:
- MCP: official MCP Registry
- skill: GitHub / AgentSkills-aligned / SkillsMP / ClawHub remote search
- cache accepted remote hits into local catalog
This keeps runtime stable while preserving long-tail discoverability.
4. Daemon Ops (Global Overlay)
Use these IPC ops for allowlist governance:
capability_allowlist_getcapability_allowlist_validatecapability_allowlist_updatecapability_allowlist_reset
Update/reset require by="user".
capability_allowlist_update supports optimistic concurrency via expected_revision.
5. Web API Endpoints
Web routes map to daemon ops:
GET /api/v1/capabilities/allowlistPOST /api/v1/capabilities/allowlist/validatePUT /api/v1/capabilities/allowlistDELETE /api/v1/capabilities/allowlist
6. External Capability Safety Mode
capability_allowlist_get / validate / update expose external_capability_safety_mode as a thin semantic view over the default posture for external capability sources:
normal=> external capability sources default tomountedconservative=> external capability sources default toindexed
Built-in packs are unaffected. Per-source and per-capability overrides can still be stricter.
7. Recommended Workflow
- call
capability_allowlist_get - inspect
external_capability_safety_modeand current revision - prepare patch (or full replacement)
- call
capability_allowlist_validate - apply with
capability_allowlist_update(expected_revision=...) - if mismatch, refetch and retry
Use capability_allowlist_reset to drop overlay and return to packaged default.