AIStor Memory

Configuration

YAML-key reference for the AIStor Memory mount — how you point an agent at its memory on a MinIO AIStor Memory Bucket (cortex). Covers the local staging store, multi-endpoint, health checks, request timeout, metadata TTL, FUSE / S3 client tunables.

An AIStor Memory mount is how an agent reaches its memory: one mount of a MinIO AIStor Memory Bucket (a cortex) that the agent both works in and remembers through. This page is the operator reference for the file that configures that mount. A --config <FILE> YAML file is the canonical way to configure an AIStor Memory mount — anything you'd want to tune at mount time has a key on this page.

aimem my-cortex /workspace --config /etc/aimem/mount.yaml

The cortex and mountpoint are positional — they say which mount this invocation is for; signing credentials come from the environment (AIMEM_ACCESS_KEY / AIMEM_SECRET_KEY). Everything else, including the mandatory local: staging directory, lives in the YAML. A handful of the YAML keys are also exposed as CLI flags and env vars for one-off overrides (noted throughout this page), but the config file is the source of truth.

Every config file must declare its schema version as its first key: version: "1.0" (a quoted string — bare 1.0 parses as a float and is rejected). A file with a missing or unrecognized version is rejected at parse time. This build understands version 1.0.

AIStor Memory mounts only a Memory Bucket (cortex), never a plain S3 bucket. A mount therefore always needs an explicit endpoint (endpoint_url), real signing credentials (AIMEM_ACCESS_KEY / AIMEM_SECRET_KEY), and a target that the Memory API confirms is a cortex on a paid-tier server — otherwise it refuses to start. Create one first with aimem cortex create <name>. See the aimem reference page for the cortex, search, and secret command families. --config is mount-only — the management verbs (cortex, secret, search) take their own flags and ignore the mount config file.

Minimum configuration

# /etc/aimem/mount.yaml
version: "1.0"
local: /var/cache/aimem
endpoint_url:
  - http://aistor{1...4}:9000
region: us-east-1
agent: claude
metadata_ttl: indefinite

Mount it — the mandatory local staging store comes from the local: key in the YAML, so the command line only needs the cortex, the mountpoint, and --config:

aimem my-cortex /workspace --config /etc/aimem/mount.yaml

The staging store is required at every mount, but it can be supplied any one of three ways: the local: config key (shown above), the --local <DIR> CLI flag, or the AIMEM_LOCAL env var. If none of the three is present, AIStor Memory refuses to start.

CLI flags vs config-file keys

The config file is canonical, but a small set of everyday keys are also exposed as CLI flags (and env vars) for one-off overrides — local, endpoint_url, region, request_timeout, health_path, tls_ca_file, read_only, foreground, agent, metadata_ttl, log_directory, debug, no_log — plus the bucket/bucket/prefix/ mountpoint positionals. Everything else on this page is config-file only: the advanced tunables below have no CLI flag and are set only in the YAML, which keeps the everyday aimem --help surface small.

local is the mandatory one of that set: at least one of the local: config key, the --local <DIR> CLI flag, or the AIMEM_LOCAL env var must be present at every mount, or AIStor Memory refuses to start. When more than one is supplied, the CLI flag (or env var) wins over the config key.

The config-file-only keys are advanced tunables — the defaults are right for almost every deployment. Only set them if you know why you need to.

To mount a sub-prefix, use the bucket/prefix/ positional (or an s3://bucket/prefix/ URI) — there is no prefix key.

Recognised keys

The full key vocabulary, grouped by area. Every key is also shown in context with a YAML example in the sections further down.

Schema & staging

KeyWhat it isDefault
versionConfig schema version. Required; must be "1.0" (quoted string). Missing or unrecognised ⇒ rejected at parse time.
localMandatory local staging + read-cache directory. Also settable via --local <DIR> / AIMEM_LOCAL; one of the three is required.

Connection & transport

KeyWhat it isDefault
endpoint_urlMinIO AIStor node URL(s). List several, or use a {1...N} brace range, for failover.
regionRegion used for request signing (e.g. us-east-1).us-east-1
request_timeoutPer-request deadline (seconds); retries on the next endpoint when exceeded.30 (multi-endpoint)
tls_ca_fileExtra CA bundle (PEM) for verifying endpoint TLS. Also --tls-ca-file / AIMEM_TLS_CA_FILE.
insecure_skip_tls_verifySkip endpoint TLS certificate verification.false
virtual_host_styleUse bucket-DNS (virtual-hosted) addressing. The default is path-style, which AIStor supports natively.false
user_agent_prefixPrepend a custom string to the User-Agent header.

Mount & FUSE

KeyWhat it isDefault
read_onlyMount in read-only mode.false
foregroundKeep AIStor Memory in the foreground (don't daemonize).false
auto_unmountAutomatically unmount when AIStor Memory exits.false
allow_rootStandard FUSE access control.false
allow_otherStandard FUSE access control.false
max_threadsMaximum FUSE worker threads.16
uidOwner UID reported by stat().caller's UID
gidOwner GID reported by stat().caller's GID
dir_modeDirectory permissions reported by stat() (octal).0755
file_modeFile permissions reported by stat() (octal).0644

Agent features

KeyWhat it isDefault
agentclaude · codex · cursor · auto — which vendor-memory paths are warmed into the cache.
agent_manifestPath to a custom warmup manifest overriding the built-in per-agent memory paths.

Memory & metadata

KeyWhat it isDefault
max_memory_targetSoft cap (MiB) the prefetcher and buffer pool use to pace allocation.95% of RAM (512 MiB floor)
metadata_ttlHow long the kernel caches FUSE metadata: indefinite · minimal · seconds.indefinite
negative_metadata_ttlTTL for negative (not-found) lookups: seconds · indefinite · minimal.tracks metadata_ttl
metadata_dir_ttlTTL for the directory-listing cache: seconds · indefinite · minimal.off unless set

Transfer tuning

KeyWhat it isDefault
part_sizePart size for multi-part GET and PUT, in bytes.16 MiB
read_part_sizeOverride GET part size only.part_size
write_part_sizeOverride PUT part size only.part_size
upload_checksumscrc32c · off — checksum algorithm sent on upload.crc32c
infer_content_typeGuess and set Content-Type on upload from the file extension.false
storage_classStorage class used for new objects.STANDARD
io_retry_timeoutWall-clock budget (seconds) to ride through a transient backend failure on the data path; 0 fails fast.60

Observability

KeyWhat it isDefault
log_directoryWrite logs to files under this directory instead of stdout.
trace_logWrite a low-level trace log to this file path.
log_metricsEmit metric records to the log stream.false
otlp_endpointExport metrics over OTLP/HTTP.
otlp_export_intervalOTLP push interval (seconds).60
no_logSuppress logging entirely.false
debugRUST_LOG=debug shorthand.false

Health checks

KeyWhat it isDefault
health_pathHTTP path polled per node to check liveness. Required to enable health checks.
health_intervalSeconds between health checks per node.5
health_timeoutSeconds to wait for each health-check response.10
health_optimisticPoll only offline nodes; detect failures reactively for healthy ones.false

Unknown keys are rejected at parse time, so typos surface as unknown field 'X' instead of being silently ignored.

Precedence

For any key that is both a CLI flag and a config key, an explicit CLI flag (or its env var, e.g. AIMEM_LOCAL, AIMEM_ACCESS_KEY) wins and the YAML value fills in only when the flag is absent. Boolean keys treat true as "on"; a YAML false is the same as omitting the key (it can never turn a CLI-enabled toggle off). For the repeated endpoint_url key, the YAML list applies only when no --endpoint-url is passed on the command line; a single CLI --endpoint-url replaces the whole list.


Endpoints and load balancing

AIStor Memory distributes requests across multiple MinIO AIStor nodes using round-robin load balancing. List each node under endpoint_url:

endpoint_url:
  - http://aistor1:9000
  - http://aistor2:9000
  - http://aistor3:9000
  - http://aistor4:9000

MinIO-style brace-range patterns are the recommended shorthand and expand to the same set:

endpoint_url:
  - http://aistor{1...4}:9000

Three dots are required ({1...4}, not {1..4}). Both forms work and can be combined when an endpoint set is heterogeneous.

Health checks

When a node becomes unresponsive, AIStor Memory can automatically remove it from the pool and restore it once it recovers. Set health_path to enable:

endpoint_url:
  - http://aistor{1...4}:9000
health_path: /minio/health/ready
health_interval: 5
health_timeout: 10
health_optimistic: false

These keys are documented in the Recognised keys table above. With health_optimistic, failures on healthy nodes are detected reactively via connectivity errors and request timeouts rather than periodic polling.

With health_path set, a node is also marked offline reactively — immediately on a request that fails with a connectivity error, not only on the periodic poll. Without health_path there is no offline tracking: a failed request is retried on the next endpoint and the node stays in the rotation.

Per-request timeout

request_timeout sets a deadline on each S3 request and retries on the next available endpoint when exceeded:

endpoint_url:
  - http://aistor{1...4}:9000
health_path: /minio/health/ready
request_timeout: 30

Only valid when two or more endpoints are configured. With health_path set, a node that causes a timeout is immediately marked offline until health checks confirm recovery; without it, the request is retried on the next endpoint but the node remains in the pool.

When multiple endpoints are configured and request_timeout is not set explicitly, AIStor Memory applies a default of 30 seconds so the multi-endpoint failover path actually engages.

Metadata TTL

metadata_ttl: indefinite # or `minimal`, or seconds (e.g. 60)
negative_metadata_ttl: 60 # seconds, or `indefinite` / `minimal`

Controls how long the kernel caches FUSE metadata. AIStor Memory's workspace mode assumes a single writer per mount (one agent per mount), so the default is indefinite — entries are not re-looked-up on each access.

Set to minimal (small but non-zero TTL) when other clients may be mutating the bucket under the mount, or to a specific number of seconds for a deterministic cache window. metadata_ttl: 0 is deprecated — interpreted as minimal and prints a warning.

Negative (not-found) lookups have no independent default: the negative-lookup TTL tracks metadata_ttl — indefinite in the default workspace mode. Set negative_metadata_ttl to override it, but note it only takes effect when metadata_ttl is also set explicitly; on the default (unset metadata_ttl) path the negative TTL simply follows the indefinite metadata TTL and negative_metadata_ttl is ignored.

FUSE / mount

read_only: false
auto_unmount: false
allow_root: false
allow_other: false
storage_class: STANDARD
max_threads: 16 # FUSE worker pool size
uid: 1000 # owner UID reported by stat()
gid: 1000 # owner GID reported by stat()
dir_mode: "0755" # directory permissions (quoted octal string)
file_mode: "0644" # file permissions (quoted octal string)

These keys (except read_only) are config-file only. To mount a sub-prefix, use the bucket/prefix/ positional — there is no prefix key. All keys are documented in the Recognised keys table above.

Memory target

max_memory_target: 4096 # MiB; soft cap on AIStor Memory's resident memory

max_memory_target is a soft cap (in MiB) used by the prefetcher and buffer pool to pace allocation and trigger backpressure. The default is 95% of total system memory with a 512 MiB floor — set this lower on shared hosts where other processes need headroom.

Upload checksums

upload_checksums: crc32c # or `off`

Objects are encrypted at rest by the bucket's default encryption; aimem does not set per-object server-side-encryption headers.

Client tunables

user_agent_prefix: "my-app/1.0 "
virtual_host_style: false # default: path-style, which AIStor supports natively
part_size: 16777216 # 16 MiB; shared GET + PUT chunk size
read_part_size: 16777216 # overrides part_size for GET only
write_part_size: 16777216 # overrides part_size for PUT only
io_retry_timeout: 60 # seconds to ride through a transient backend failure

These keys are documented in the Recognised keys table above.

Logging

debug: false
no_log: false
log_directory: /var/log/aimem
log_metrics: false
otlp_endpoint: http://otel-collector:4318
otlp_export_interval: 60
foreground: false

These keys are documented in the Recognised keys table above. In foreground mode, logs go to stdout.

Workspace-specific keys

These belong to AIStor Memory's agent-workspace product surface and are documented in /aimem:

  • agentclaude · codex · cursor · auto — selects which vendor-memory paths get warmed into the --local store on mount.

The local store itself — copy-on-write write staging plus the FUSE-passthrough read cache — is set with the mandatory local: config key, the --local <DIR> CLI flag, or the AIMEM_LOCAL env var. Exactly one of the three is required at every mount; the CLI flag/env var wins over the config key when more than one is given.

The AIStor Memory skill is delivered automatically — no config key. Every mount both prepends an in-memory preamble overlay to instruction files read from the mount (CLAUDE.md / AGENTS.md / .cursorrules) and installs the skill into $HOME/.agents/skills/aimem/ and $HOME/.claude/skills/aimem/. Both are automatic and on by default: disable the install with AIMEM_INSTALL_SKILL=0 (also skipped when $HOME is under the mount), disable the overlay with AIMEM_PREAMBLE_OVERLAY=0, and relocate the Claude target with CLAUDE_CONFIG_DIR. See the SKILLS section on the aimem reference page for details; the public repo copy is npx skills add minio/skills/aimem.

Secrets are a separate CLI surface, not a config-file key. aimem secret provision injects granted secrets into the agent as env vars from the cortex (Memory-API secrets endpoint, --cortex, the default) or, as a bridge, from a generic HTTP store (--store-endpoint) when secrets already live there; aimem secret put/get/list/delete manage secrets stored server-side in a cortex. Described on the aimem reference page.

fstab

When you want the mount to come up at boot, AIStor Memory can be invoked from /etc/fstab via mount.fuse3. Use the same YAML file as the single source of truth:

my-cortex /workspace fuse.aimem _netdev,config=/etc/aimem/mount.yaml 0 0

The local: key in the referenced YAML supplies the mandatory staging store. If you prefer to set it inline instead, the fstab -o surface accepts local=<dir> (and the legacy staging_dir=/staging-dir= spellings). See Operations → fstab for the recipe.