Install
openclaw skills install @indigokarasu/ocas-lookConverts user-provided images into validated, decision-ready action drafts. Routes images by inferred intent across domains: events from flyers, macros from meal photos, places to save, products to price, receipts to log, documents to file, civic issues to report. Supports reverse image search via Yandex and Google. NOT for generic OCR, computer vision research, or surveillance.
openclaw skills install @indigokarasu/ocas-lookWhen invoked interactively, present a two-level menu. See references/interactive-menu.md for the full menu structure.
The image-to-draft workflow routes user images through intent inference, domain routing, and draft generation. This workflow exists because raw images alone are not actionable — the agent must extract structured meaning before proposing next steps.
Example: a user provides a flyer image → agent classifies as "event" → extracts date/venue → generates calendar draft → confirms with user.
Look owns image-to-action conversion: ingest, context inference, domain routing, draft generation, and execution with confirmation.
Look does not own: web research (Sift), preference persistence (Taste), communications (Dispatch).
Look works with these types from spec-ocas-ontology.md:
Look includes entity signals in journal payloads using the Signal schema from spec-ocas-shared-schemas.md. The payload.type field must be set to the ontology type of the primary extracted entity (Person, Place, Event, or DigitalArtifact). source_journal_type is "Observation".
Events, food macros, places, products, civic issues, receipts, documents.
Read references/domain_playbooks.md for detailed per-domain behavior.
See references/workflow.md for the full step-by-step procedure, error handling table, and clarification rules.
look.ingest.image — ingest image(s) with optional EXIF and device pre-parselook.propose.actions — generate ActionDrafts with DecisionRecordslook.execute.action — execute a confirmed draft (requires explicit approval)look.rollback.action — attempt rollback for reversible actionslook.status — last ingest, pending drafts, items awaiting confirmationlook.config.set — update configurationlook.journal — write journal for the current run; called at end of every runlook.update — pull latest from GitHub source; preserves journals and datalookup.reverse_search — perform Google reverse image search on an image URL or local file. Returns matching pages, titles, and similar image URLs.Default deny. Request minimally. Drafting continues even without execution permissions. Blocked execution reported, not silently skipped.
See references/workflow.md for the full error handling table.
Look uses reverse image search during step 5 (Research and validate externally). Primary method: Yandex Images via browser (works from cloud IPs). Fallback: google-image-source-search PyPI package (residential IPs only).
Quick reference:
Detailed instructions: references/google-image-source-search.md (Google fallback), references/credential-files.md (Imgur client ID).
Gotchas (also in Gotchas section):
{agent_root}/commons/data/ocas-look/
config.json
state.json
events.jsonl
decisions.jsonl
reports/
artifacts/
{agent_root}/commons/journals/ocas-look/
YYYY-MM-DD/
{run_id}.json
Default config: see references/default_config.md.
See references/okrs.md for the full OKR definitions. Universal OKRs from spec-ocas-journal.md apply to all runs.
Observation Journal — all image ingestion and draft generation runs.
On first invocation of any Look command, run look.init:
{agent_root}/commons/data/ocas-look/ and subdirectories (reports/, artifacts/)config.json and state.json if absentevents.jsonl, decisions.jsonl{agent_root}/commons/journals/ocas-look/look:update if not already present (check the platform scheduling registry first)decisions.jsonlreferences/pip-venv.md for the full setup pattern (install google-image-source-search, pin requests, verify import)| Job name | Mechanism | Schedule | Command |
|---|---|---|---|
look:update | cron | 0 0 * * * (midnight daily) | look.update |
# Task declared in SKILL.md frontmatter metadata.{platform}.cron
look.update pulls the latest package from the source: URL in this file's frontmatter. Runs silently — no output unless the version changed or an error occurred.
See references/self_update.md for the full self-update procedure.
public
vision_analyze uses the vision.model and vision.provider fields in config.yaml, NOT the auxiliary model. Set to a vision-capable model like nvidia/nemotron-nano-12b-v2-vl:free (provider: openrouter). The agent cannot patch config.yaml directly — use hermes config set vision.model <model> or edit manually.content: null with the answer in message.reasoning. The vision_analyze tool doesn't handle this. Use nvidia/nemotron-nano-12b-v2-vl:free for reliable vision analysis.| File | When to read |
|---|---|
references/schemas.md | Before creating evidence, drafts, or receipt records; when validating data structures |
references/domain_playbooks.md | Before domain routing or draft generation; when checking per-domain behavior |
references/decision_policy.md | Before risk assessment or confirmation decisions; when classifying action risk level |
references/command_reference.md | Before any command execution; when checking command syntax or parameters |
references/storage_and_config.md | Before config changes or storage operations; when modifying skill state |
references/journal.md | Before calling look.journal; at end of every run |
references/pip-venv.md | Before installing any pip package for a skill; when setting up Python dependencies |
references/google-image-source-search.md | Before using Google reverse image search fallback; when on residential IP and Yandex is unavailable |
references/credential-files.md | Before reverse image search with local files; when Imgur client ID is needed |
references/default_config.md | Before initialization or config changes; when referencing default config values |
references/okrs.md | Before writing or evaluating OKRs; when checking skill-level targets |
references/workflow.md | Before executing the core workflow; when handling errors during processing |
references/self_update.md | Before running look.update; when debugging self-update failures |
This skill self-updates every 24 hours via:
look.update
This pulls the latest version from GitHub and restarts the skill's background tasks if applicable.