Capabilities overview
What is a capability?
Section titled “What is a capability?”A capability is the uniform abstraction for anything callable in ESP-Claw. Each cap_* component registers one or more metadata-rich descriptors (claw_cap_descriptor_t) with claw_cap, and all execution funnels through the shared dispatcher.
Capabilities can play three roles:
| Role | kind | Meaning |
|---|---|---|
| Callable tool | CLAW_CAP_KIND_CALLABLE | JSON in, text out; invokable from the LLM, Console, or automation |
| Event source | CLAW_CAP_KIND_EVENT_SOURCE | Long-lived producer feeding claw_event_router |
| Hybrid | CLAW_CAP_KIND_HYBRID | Both callable and event emitting |
Descriptors are grouped into capability groups (claw_cap_group_t)—the smallest unit for registration, start/stop, and LLM visibility toggles.
Built-in taxonomy
Section titled “Built-in taxonomy”| Family | Components | Notes |
|---|---|---|
| IM ingress | cap_im_* | Chat platforms as both event sources and send helpers |
| Filesystem | cap_files | Managed FATFS CRUD + listing |
| Lua | cap_lua | Author, sync/async run, and track Lua jobs |
| Skill admin | cap_skill | Register/unregister/activate/deactivate Skills (core as tools) |
| LLM inspect | cap_llm_inspect | Nested multimodal calls over local images |
| Web search | cap_web_search | External search APIs |
| Time | cap_time | Device clock queries |
| System info | cap_system | Query system/memory/CPU/Wi-Fi/IP status and support operational actions like restart |
| Scheduler | cap_scheduler | Cron-like scheduling |
| Router admin | cap_router_mgr | Dynamic Event Router rule maintenance |
| MCP | cap_mcp_* | Model Context Protocol client/server |
| CLI | cap_cli | Surface caps through terminal helpers |
| Sessions | cap_session_mgr | Session state persistence |
Group registration
Section titled “Group registration”Every cap_* exposes cap_xxx_register_group() for the app to call during init:
claw_cap_register_group enforces unique group ids, runs descriptor init hooks, then finishes registration. claw_cap_start_group later invokes start (e.g. launching the Telegram poll task).
LLM visibility
Section titled “LLM visibility”Not every registered group is visible to the model. claw_cap_set_llm_visible_groups applies an allow-list controlling which tool schemas enter context:
Other groups remain callable from the Console or automation; activating Skills expands the LLM-facing set.
Call paths
Section titled “Call paths”Three primary entry points:
- LLM tool calls:
claw_core→claw_cap_call_from_core(session/channel aware) - Console:
cap call <name> <json>for direct execution - Event Router rules:
call_capactions (see Dataflow and automation)
claw_cap_call_context_t.caller records whether the invoker was SYSTEM, AGENT, or CONSOLE.