Praxis improves future agent behavior through a bounded refinement loop. It records outcomes, extracts lessons from repeated patterns, consolidates them into a small active set of behavior shifts, and produces auditable debriefs.
Praxis is not a diary, general memory system, or self-rewriting identity layer. It is a bounded behavioral refinement loop.
Praxis owns bounded behavioral refinement: events, lessons, shifts, and debriefs.
Praxis does not own: general memory (Elephas), preference persistence (Taste), pattern discovery (Corvus), communications (Dispatch), skill evaluation (Mentor).
Praxis receives BehavioralSignal files from Corvus. Praxis decides whether to act on each signal.
praxis.event.record — record a completed event or outcome with evidencepraxis.lesson.extract — derive micro-lessons from recorded eventspraxis.shift.propose — propose a new behavior shift from lessonspraxis.shift.list — list all shifts with statuspraxis.shift.activate — activate a proposed shift (enforces cap)praxis.shift.expire — expire or reject a shift with reasonpraxis.runtime.brief — generate runtime brief with active shifts onlypraxis.debrief.generate — produce a plain-language debriefpraxis.status — event count, active shifts, cap usage, last debriefpraxis.journal — write journal for the current run; called at end of every runDefault cap: 12 active shifts. When at cap and a new shift is proposed: merge overlapping shifts, replace a weaker shift, or reject the new shift. No duplicate or contradictory active shifts.
The runtime brief is a compact list of active shifts only. Target: 3-12 items. Imperative, behavior-facing, free of historical clutter. Not a narrative log.
Praxis receives BehavioralSignal files from Corvus at: ~/openclaw/data/ocas-praxis/intake/{signal_id}.json
Praxis checks its intake directory during praxis.event.record and during any scheduled pass. Praxis decides whether to record each signal as an event and extract a lesson. It is not obligated to act on every signal.
After processing each file, move to intake/processed/.
See spec-ocas-interfaces.md for the BehavioralSignal schema and handoff contract.
~/openclaw/data/ocas-praxis/
config.json
events.jsonl
lessons.jsonl
shifts.jsonl
debriefs.jsonl
decisions.jsonl
intake/
{signal_id}.json
processed/
reports/
~/openclaw/journals/ocas-praxis/
YYYY-MM-DD/
{run_id}.json
The OCAS_ROOT environment variable overrides ~/openclaw if set.
Default config.json:
{
"skill_id": "ocas-praxis",
"skill_version": "2.0.0",
"config_version": "1",
"created_at": "",
"updated_at": "",
"shifts": {
"max_active": 12
},
"lessons": {
"min_pattern_count": 2
},
"retention": {
"days": 0,
"max_records": 10000
}
}
Universal OKRs from spec-ocas-journal.md apply to all runs.
skill_okrs:
- name: shift_traceability
metric: fraction of active shifts with at least one traced event
direction: maximize
target: 1.0
evaluation_window: 30_runs
- name: cap_compliance
metric: fraction of runs where active shift count is at or below cap
direction: maximize
target: 1.0
evaluation_window: 30_runs
- name: lesson_precision
metric: fraction of extracted lessons leading to activated shifts
direction: maximize
target: 0.50
evaluation_window: 30_runs
- name: debrief_quality
metric: fraction of debriefs rated useful by human review
direction: maximize
target: 0.80
evaluation_window: 30_runs
Action Journal — every event recording, lesson extraction, shift change, and debrief generation.
public
File | When to read
references/data_model.md | Before creating events, lessons, shifts, or debriefs
references/lesson_rules.md | Before extracting lessons from events
references/runtime_rules.md | Before generating runtime brief
references/debrief_templates.md | Before generating debriefs
references/journal.md | Before praxis.journal; at end of every run
共 1 个版本