ExperienceEngine does not primarily record facts. It records reusable execution experience.
That core model is shared across hosts even when installation and daily interaction mechanics differ. Host-specific setup steps should change as little as possible about the product concepts users see:
- shared setup/value states
- shared first-value expectations
- shared distinction between host-native routine interaction and CLI/operator fallback
That means the system is trying to preserve guidance like:
When this integration test times out, check the fraud-check mock first instead of tuning the connection pool.
not just facts like:
This repo uses pnpm.
The user prefers tabs.
An experience node usually includes:
compact_hint- the shortest reusable guidance for a similar future task
trigger_pattern- the kind of task or failure pattern that should match the node
goal- what the node is trying to help accomplish
recommended_steps- the preferred execution order when the node is mature enough to expand
avoid_steps- paths that have already proven wasteful or harmful
success_signal- what a successful application of the node should look like
evidence_summary- a compact explanation of why the node exists
ExperienceEngine also tracks governance fields such as:
statecandidate,active,cooling,retired
usage_counthelped_countharmed_countsupport_countorigin_record_idshelped_record_idsharmed_record_ids
These fields are what make ExperienceEngine different from a fact-memory system. The system does not just remember a piece of content; it tracks whether that content has earned the right to keep intervening.
ExperienceEngine keeps the default intervention compact. The base unit is the compact_hint.
For more mature nodes, ExperienceEngine can expand the injected guidance with structured fields like:
GoalStepsAvoid
That expansion is intentionally gated. The system does not dump every stored field into every prompt.
The routing policy is also intentionally asymmetric:
- strong or well-supported candidates should not be skipped just because the current prompt uses different wording
- uncertain but promising same-family matches should prefer conservative injection over a hard skip
- mature low-risk nodes can expand bounded
Goal / Steps / Avoidguidance even during conservative injection
That same routing now needs to stay explainable in inspection surfaces:
ee inspect --lastshould say whether the route was normal or conservative- it should explain why ExperienceEngine acted, not only expose raw gate codes
- it should show a concise trust signal so users can decide whether to lean on the hint
ee statusandee doctorshould translate recent retrieval health into plain-language operator guidance, not just raw countersee inspect node:<id>should expose a lightweight quality band and applicability profile derived from existing runtime truth
ExperienceEngine now treats task history and reusable experience as two different layers:
task record
-> learning candidate
-> active
-> cooling
-> retired
- every meaningful task can still be recorded as runtime history
- only tasks with transferable decision value should become learning candidates
- wording-only, copy-only, or presentation-only cleanups can remain recorded without being promoted into reusable experience
This split matters because "the task finished successfully" is not the same thing as "the system learned something worth injecting next time."
task signals
-> task record
-> candidate
-> active
-> cooling
-> retired
At a high level:
- broad runtime history is recorded first
- repeated or meaningful signals produce a candidate
- successful reuse or corroboration promotes it into active use
- harmful outcomes reduce confidence
- repeated harm can cool or retire the node
This is a governance lifecycle, not just a storage lifecycle.
ExperienceEngine is best at:
- repeated failure -> fix -> success paths
- configuration and routing troubleshooting
- execution order guidance
- expectation correction
- when a technically valid result is still corrected by the user because the agent solved the wrong problem
Expectation correction is intentionally narrower than a generic rewrite or cleanup:
- it should reflect a changed solution direction, execution order, boundary, or quality bar
- it should not be used for expression-layer refinements like lighter wording, better labels, or cleaner presentation copy
It is not designed to be the primary system for:
- long-term user preferences
- arbitrary repository facts
- emotional feedback
- one-off stylistic requests with no reusable execution value
Most memory systems answer:
- what should be remembered
- what context should be recalled
ExperienceEngine answers:
- when should prior experience intervene
- what short execution guidance should be injected
- when a conservative injection is still worth surfacing instead of skipping
- whether that intervention actually helped
- whether the node should stay active, cool down, or retire
That is why the shorthand is:
Memory does addition. ExperienceEngine does governance.