Install
openclaw skills install ocas-corvusExploratory pattern analysis engine for the system knowledge graph and skill journals. Detects routines, emerging interests, anomalies, stalled threads, and...
openclaw skills install ocas-corvusCorvus is the system's curiosity engine — it continuously scans the knowledge graph and skill journals to surface behavioral patterns, emerging interests, stalled threads, and cross-domain opportunities that no single skill would notice on its own. It works by forming hypotheses, testing them against accumulated signals, and emitting validated proposals downstream to Praxis and Vesper for action and briefing.
Corvus owns exploratory pattern analysis across the knowledge graph and skill journals.
Corvus does not own: skill evaluation (Mentor), behavioral refinement (Praxis), web research (Sift), knowledge graph writes (Elephas), preference persistence (Taste), browsing interpretation (Thread).
Corvus emits BehavioralSignal files to Praxis and InsightProposal files to Vesper. Corvus receives research thread signals from Thread.
corvus.analyze.light — run a light analysis cycle: routine detection, thread monitoring, interest clusteringcorvus.analyze.deep — run a deep exploration cycle: cross-domain traversal, hypothesis testing, model refinementcorvus.proposals.list — list current insight proposals with confidence scorescorvus.proposals.detail — show full evidence and reasoning for a specific proposalcorvus.hypotheses.list — list active hypotheses under investigationcorvus.status — return current analysis state: patterns detected, proposals pending, graph coveragecorvus.journal — write journal for the current run; called at end of every runcorvus.update — pull latest from GitHub source; preserves journals and dataRuns frequently during idle periods. Focuses on routine detection, thread monitoring, and interest clustering. Low cost, fast execution.
Runs less frequently during extended idle periods. Performs cross-domain graph traversal, hypothesis testing, and model refinement. Higher cost, produces richer insight proposals.
Corvus prioritizes graph regions for exploration using three internal drives:
Each drive generates hypotheses. Hypotheses are tested through graph queries and evidence gathering. Validated hypotheses become insight proposals.
Read references/curiosity_engine.md for drive mechanics and priority scoring.
Patterns must pass all validation checks before becoming proposals:
Patterns failing validation remain internal hypotheses for future evaluation.
Read references/pattern_engines.md for per-engine detection criteria and validation rules.
Each proposal includes: proposal_id, proposal_type, description, confidence_score, supporting_entities, supporting_relationships, predicted_outcome, suggested_follow_up.
Proposal types: routine_prediction, thread_continuation, opportunity_discovery, anomaly_alert, behavioral_signal.
Read references/schemas.md for exact proposal schema.
After every analysis cycle (light or deep):
proposal_type: behavioral_signal: write a BehavioralSignal file to ~/openclaw/data/ocas-praxis/intake/{signal_id}.jsonbehavioral_signal): write an InsightProposal file to ~/openclaw/data/ocas-vesper/intake/{proposal_id}.json~/openclaw/data/ocas-corvus/intake/ for Thread research signals; process and move to intake/processed/corvus.journalCorvus writes BehavioralSignal files to: ~/openclaw/data/ocas-praxis/intake/{signal_id}.json
Written when a validated pattern has proposal_type: behavioral_signal.
Corvus writes InsightProposal files to: ~/openclaw/data/ocas-vesper/intake/{proposal_id}.json
Written when a validated proposal reaches sufficient confidence (excludes behavioral_signal type).
Corvus receives research thread signals from Thread at: ~/openclaw/data/ocas-corvus/intake/{thread_id}.json
Read during analysis cycles as additional signal context.
See spec-ocas-interfaces.md for schemas and handoff contracts.
~/openclaw/data/ocas-corvus/
config.json
hypotheses.jsonl
patterns.jsonl
proposals.jsonl
decisions.jsonl
intake/
{thread_id}.json
processed/
reports/
~/openclaw/journals/ocas-corvus/
YYYY-MM-DD/
{run_id}.json
Default config.json:
{
"skill_id": "ocas-corvus",
"skill_version": "2.3.0",
"config_version": "1",
"created_at": "",
"updated_at": "",
"curiosity": {
"novelty_weight": 0.4,
"uncertainty_weight": 0.3,
"prediction_error_weight": 0.3
},
"validation": {
"min_signal_count": 3,
"min_confidence_for_proposal": 0.5
},
"retention": {
"days": 0,
"max_records": 10000
}
}
Universal OKRs from spec-ocas-journal.md apply to all runs.
skill_okrs:
- name: proposal_precision
metric: fraction of proposals confirmed as useful within 30 days
direction: maximize
target: 0.70
evaluation_window: 30_runs
- name: pattern_validation_rate
metric: fraction of detected patterns passing all validation checks
direction: maximize
target: 0.80
evaluation_window: 30_runs
- name: graph_coverage
metric: fraction of active graph regions analyzed within one deep cycle
direction: maximize
target: 0.90
evaluation_window: 30_runs
- name: false_anomaly_rate
metric: fraction of anomaly alerts dismissed as noise
direction: minimize
target: 0.15
evaluation_window: 30_runs
Observation Journal — all analysis cycles (light and deep).
On first invocation of any Corvus command, run corvus.init:
~/openclaw/data/ocas-corvus/ and subdirectories (intake/, intake/processed/, reports/)config.json with ConfigBase fields if absenthypotheses.jsonl, patterns.jsonl, proposals.jsonl, decisions.jsonl~/openclaw/journals/ocas-corvus/~/openclaw/data/ocas-praxis/intake/ exists (create if missing)~/openclaw/data/ocas-vesper/intake/ exists (create if missing)corvus:deep if not already present (check openclaw cron list first)corvus:light in HEARTBEAT.md if not already presentcorvus:update if not already present (check openclaw cron list first)decisions.jsonl| Job name | Mechanism | Schedule | Command |
|---|---|---|---|
corvus:deep | cron | 0 3 * * * (daily 3am) | corvus.analyze.deep — full exploration cycle |
corvus:light | heartbeat | every heartbeat pass | corvus.analyze.light — routine detection, thread monitoring |
corvus:update | cron | 0 0 * * * (midnight daily) | corvus.update |
Cron options for corvus:deep: sessionTarget: isolated, lightContext: true, wakeMode: next-heartbeat.
Registration during corvus.init:
openclaw cron list
# If corvus:deep absent:
openclaw cron add --name corvus:deep --schedule "0 3 * * *" --command "corvus.analyze.deep" --sessionTarget isolated --lightContext true --wakeMode next-heartbeat --timezone America/Los_Angeles
# If corvus:update absent:
openclaw cron add --name corvus:update --schedule "0 0 * * *" --command "corvus.update" --sessionTarget isolated --lightContext true --timezone America/Los_Angeles
Heartbeat registration: append corvus:light entry to ~/.openclaw/workspace/HEARTBEAT.md if not already present.
corvus.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.
source: from frontmatter → extract {owner}/{repo} from URLskill.jsongh api "repos/{owner}/{repo}/contents/skill.json" --jq '.content' | base64 -d | python3 -c "import sys,json;print(json.load(sys.stdin)['version'])"TMPDIR=$(mktemp -d)
gh api "repos/{owner}/{repo}/tarball/main" > "$TMPDIR/archive.tar.gz"
mkdir "$TMPDIR/extracted"
tar xzf "$TMPDIR/archive.tar.gz" -C "$TMPDIR/extracted" --strip-components=1
cp -R "$TMPDIR/extracted/"* ./
rm -rf "$TMPDIR"
I updated Corvus from version {old} to {new}public
| File | When to read |
|---|---|
references/schemas.md | Before creating hypotheses, patterns, or proposals |
references/curiosity_engine.md | Before drive scoring or hypothesis generation |
references/pattern_engines.md | Before pattern detection or validation |
references/journal.md | Before corvus.journal; at end of every run |