Skip to main content

helmdeck.memory_store

helmdeck.memory_store writes a durable, user-supplied fact into the caller's memory namespace (ADR 048). Use it when the user shares a preference, project convention, or decision worth remembering across sessions ("I always deploy via Konflux", "prefer React over Vue"). Read helmdeck://my-memory first to avoid duplicates. The default category is user_facts (90-day TTL); pass category for a richer taxonomy. The fact is scoped to the calling JWT subject — facts written under one caller are invisible to another.

Inputs

FieldTypeRequiredDefaultNotes
keystringyesShort identifier for the fact.
valuestringyesThe fact text.
categorystringnouser_factsTaxonomy bucket. pack_history and pipeline_history are reserved for engine audit writes and reject with invalid_input.
tagsarraynoOptional string tags.
ttl_secondsnumberno90 daysMandatory and bounded: min 1h, max 365d.

Outputs

FieldTypeNotes
keystringEchoed key.
categorystringThe assigned (validated) category.
expires_atstringRFC 3339 expiry — surface this to the user so they know what's stored.

Vault credentials needed

  • None.

Use it from your agent (OpenClaw chat-UI worked example)

OpenClaw chat capture pending. See howto/agent-facts.md for the write/read/forget contract.

Developer reference (curl)

curl -fsS -X POST http://localhost:3000/api/v1/packs/helmdeck.memory_store \
-H "Authorization: Bearer $JWT" \
-H 'Content-Type: application/json' \
-d '{
"key": "deploy_pipeline",
"value": "I always deploy via Konflux",
"category": "preferences"
}'

(REST equivalent: POST /api/v1/memory/store.)

Error codes

CodeTriggers
invalid_inputkey/value missing, reserved category, or out-of-range ttl_seconds.
internalMemory store not wired.

Session chaining

  • No session. NeedsSession: false — the namespace is the bare caller, so facts learned in one session appear in the next.

Async behavior

Synchronous only.

See also