observal skill tells coding assistants to run this before reinventing something or declaring a capability unavailable.
Search
' as '\''). Several bare words are still joined into one query, but the text comes from the user and must never be spliced into a shell command unquoted.
JSON returns
query, harness, count, and results[]. Important result fields:
An empty
results array is a successful answer: nothing matched. Try fewer or different words before concluding the resource does not exist.
Inspect
representativeQueries (what the resource is good for), capabilities, the versioned artifact url, and its digest. The predecessor urn:ai: prefix is accepted.
Use
What happens depends on the kind:
- Skills and prompts are text. The exact approved version is fetched from its permanent URL and printed (JSON:
content,activated: true,mode: context). The use is recorded in the capability lock. - MCP servers, agents, sandboxes, and hooks change your setup. Nothing is written; the response carries
next_step, the existing install command (observal registry mcp install …,observal agent pull …), which confirms before touching harness config and takes effect after a restart. JSON:activated: false,mode: next-session.
--yes. A resource whose obs:supportedHarnesses excludes the detected harness is refused; pass --harness to override the detection.
The capability lock
Every activation appends one line to~/.observal/capability_lock.jsonl: timestamp, harness, working directory, identifier, kind, version, digest, and mode. agent pull and the component install commands append too. Session upload (session_push hooks and observal reconcile) attaches the lines that fall inside a session’s harness, directory, and time window as capabilities_used, which is how Observal knows which resources a session relied on. Nothing secret is stored.
Entries older than 30 days are pruned. Related: observal agent init --from-capabilities turns the resources used in a directory into a draft Agent.
Exit codes
Follows the shared CLI error contract:4 permission (unapproved resource without --yes), 5 not found, 7 validation (unknown type, harness, or identifier).
