{
"arguments": [
{
"default": "./areev-data",
"help": "Path to the database directory",
"long": "data-dir",
"name": "data_dir",
"required": false
},
{
"help": "Policy preset (gdpr, ccpa, hipaa, lgpd, pipl, sox, ephemeral, open)",
"long": "policy",
"name": "policy",
"required": false
},
{
"help": "Active user ID for audit logging",
"long": "user",
"name": "user",
"required": false
},
{
"help": "256-bit master key (hex) for encryption",
"long": "master-key",
"name": "master_key",
"required": false
},
{
"help": "Path to NER PII model directory (tokenizer.json + model.safetensors + config.json)",
"long": "ner-model",
"name": "ner_model",
"required": false
},
{
"help": "Path to cross-encoder reranker model directory (tokenizer.json + model.safetensors + config.json)",
"long": "rerank-model",
"name": "rerank_model",
"required": false
},
{
"help": "Postgres DSN for the cell's CNPG cluster (or its pooler). Example: `postgres://areev_cell:****@cell1-pg-pooler-rw:6432/areev`. Required when starting the cell with `--features pg-store`; ignored otherwise",
"long": "database-url",
"name": "database_url",
"required": false
},
{
"help": "OpenBao (Vault) base URL for crypto + audit HMAC keys. Example: `http://openbao.openbao.svc.cluster.local:8200`",
"long": "vault-addr",
"name": "vault_addr",
"required": false
},
{
"help": "OpenFGA sidecar gRPC address. Example: `127.0.0.1:8081`",
"long": "openfga-addr",
"name": "openfga_addr",
"required": false
},
{
"default": "false",
"help": "Permit operation without an OpenFGA authz backend. This is the documented onprem_node single-binary \"single-tenant box\" carve-out (see docs/work/areev-security/threat-model.md). The default fails closed: if `--openfga-addr` / `AREEV_OPENFGA_ADDR` is not set, the cell exits 72 at startup. Setting this flag (or the env var `AREEV_ALLOW_NO_AUTHZ=1` / `=true`) explicitly waives that requirement and reverts `can_access_memory` to the permissive fallback documented in `src/server/auth.rs`. Not for cloud / onprem_cluster",
"long": "allow-no-authz",
"name": "allow_no_authz",
"required": false
},
{
"help": "Cell identity string. Must match `public.cell_metadata.cell_id` on the connected Postgres cluster (verified at startup per ADR-017 §1). On Kubernetes this comes from the pod's `areev.ai/cell-id` label via the downward API",
"long": "cell-id",
"name": "cell_id",
"required": false
},
{
"help": "OpenTelemetry collector address (OTLP gRPC). Phase 1 wiring; Phase 2+ uses it for spans/metrics. Example: `otel-collector.observability.svc:4317`",
"long": "otel-collector-addr",
"name": "otel_collector_addr",
"required": false
}
],
"description": "Areev — Reference implementation of the Open Memory Specification (.mg format)",
"name": "areev",
"subcommands": [
{
"arguments": [
{
"help": "Grain type: fact, event, tool, observation, goal, state, workflow, reasoning, consensus, consent, skill",
"name": "grain_type",
"required": true
},
{
"help": "Key=value pairs for the grain fields",
"name": "fields",
"required": false
},
{
"help": "Extract temporal references from content and auto-populate valid_from",
"long": "extract-event-date",
"name": "extract_event_date",
"required": false
},
{
"help": "Auto-detect updates/extends relationships with existing grains",
"long": "auto-relate",
"name": "auto_relate",
"required": false
},
{
"help": "Decompose content into atomic Fact grains linked via derived_from",
"long": "extract-memories",
"name": "extract_memories",
"required": false
},
{
"help": "Force immediate commit (bypass write batch buffer)",
"long": "sync",
"name": "sync",
"required": false
}
],
"description": "Add a grain to the memory",
"name": "add"
},
{
"arguments": [
{
"help": "Natural language text to remember",
"name": "text",
"required": true
},
{
"help": "Extraction mode (issue #538 R4). \"async\" (default) writes an Observation immediately; \"sync\" runs LLM extraction inline. Takes precedence over `--sync` when both are passed",
"long": "extract-mode",
"name": "extract_mode",
"required": false
},
{
"help": "DEPRECATED — use `--extract-mode sync` instead. Legacy flag kept for backward compatibility with pre-#538 callers",
"long": "sync",
"name": "sync",
"required": false
},
{
"help": "Keep the source Observation after extraction",
"long": "keep-source",
"name": "keep_source",
"required": false
},
{
"help": "Namespace for the observation and extracted facts",
"long": "namespace",
"name": "namespace",
"required": false
},
{
"help": "User ID (mandatory per compliance)",
"long": "user-id",
"name": "user_id",
"required": false
},
{
"help": "Tags (comma-separated)",
"long": "tags",
"name": "tags",
"required": false
},
{
"help": "Source attribution",
"long": "source-type",
"name": "source_type",
"required": false
},
{
"help": "Confidence for LLM-extracted facts (default: 0.9)",
"long": "confidence",
"name": "confidence",
"required": false
}
],
"description": "Ingest natural language text as memory",
"name": "remember"
},
{
"arguments": [
{
"help": "Free-text search query (BM25)",
"long": "query",
"name": "query",
"required": false,
"short": "q"
},
{
"help": "Subject to search for",
"long": "subject",
"name": "subject",
"required": false,
"short": "s"
},
{
"help": "Relation/predicate to search for",
"long": "relation",
"name": "relation",
"required": false,
"short": "r"
},
{
"help": "Object to search for",
"long": "object",
"name": "object",
"required": false,
"short": "o"
},
{
"help": "Filter by namespace",
"long": "namespace",
"name": "namespace",
"required": false,
"short": "n"
},
{
"help": "Filter by user ID",
"long": "user-id",
"name": "user_id",
"required": false
},
{
"help": "Filter by grain type",
"long": "grain-type",
"name": "grain_type",
"required": false
},
{
"help": "Temporal expression (e.g., \"today\", \"last 7 days\", \"yesterday\")",
"long": "temporal",
"name": "temporal",
"required": false,
"short": "t"
},
{
"help": "Filter by tags (comma-separated, AND logic)",
"long": "tags",
"name": "tags",
"required": false
},
{
"help": "Exclude tags (comma-separated)",
"long": "exclude-tags",
"name": "exclude_tags",
"required": false
},
{
"help": "Minimum importance threshold",
"long": "importance",
"name": "importance",
"required": false
},
{
"help": "Minimum confidence threshold",
"long": "confidence",
"name": "confidence",
"required": false
},
{
"help": "Detect contradictions and penalize scores",
"long": "detect-contradictions",
"name": "detect_contradictions",
"required": false
},
{
"default": "20",
"help": "Maximum number of results",
"long": "limit",
"name": "limit",
"required": false
},
{
"help": "Per-query recency weight [0.0–1.0]. 0=pure relevance, 1=pure recency",
"long": "recency-weight",
"name": "recency_weight",
"required": false
},
{
"help": "Entity-centric recall: find grains where entity is subject OR object",
"long": "entity",
"name": "entity",
"required": false
},
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
},
{
"help": "Scoped memory: hierarchical scope path (e.g., \"acme/prod/bot1\")",
"long": "scope-path",
"name": "scope_path",
"required": false
},
{
"help": "Scoped memory: include sibling namespaces at the same depth",
"long": "include-siblings",
"name": "include_siblings",
"required": false
},
{
"help": "Deduplicate grains with similar (subject, relation, object)",
"long": "deduplicate",
"name": "deduplicate",
"required": false
},
{
"help": "Similarity threshold for deduplication (0.0–1.0, default 0.85)",
"long": "deduplicate-threshold",
"name": "deduplicate_threshold",
"required": false
},
{
"help": "Only return grains whose subject contains this substring (case-insensitive)",
"long": "subject-contains",
"name": "subject_contains",
"required": false
},
{
"help": "Only return grains whose object contains this substring (case-insensitive)",
"long": "object-contains",
"name": "object_contains",
"required": false
},
{
"help": "FR-005: Minimum grains per namespace for cross-session coverage",
"long": "min-per-namespace",
"name": "min_per_namespace",
"required": false
},
{
"help": "FR-005: Maximum unique namespaces in results",
"long": "max-namespaces",
"name": "max_namespaces",
"required": false
},
{
"help": "Enable rule-based query expansion (stemming + synonyms + RRF)",
"long": "query-expansion",
"name": "query_expansion",
"required": false
},
{
"help": "Enable rule-based query decomposition (2-4 sub-queries per strategy + RRF)",
"long": "query-decompose",
"name": "query_decompose",
"required": false
},
{
"help": "Keep superseded grains at natural scores for aggregation queries",
"long": "aggregation-intent",
"name": "aggregation_intent",
"required": false
},
{
"help": "Enrich preference queries with co-occurring session grains",
"long": "preference-enrichment",
"name": "preference_enrichment",
"required": false
},
{
"help": "Enable HyDE (Hypothetical Document Embeddings) for vector search",
"long": "hyde",
"name": "hyde",
"required": false
},
{
"help": "Temporal field for time range filtering: created_at, event_date, or both",
"long": "temporal-field",
"name": "temporal_field",
"required": false
},
{
"help": "Include source grains for results that have derived_from links",
"long": "include-sources",
"name": "include_sources",
"required": false
},
{
"help": "Annotate each result with a human-readable relative time label (e.g., \"2 weeks ago\")",
"long": "annotate-relative-time",
"name": "annotate_relative_time",
"required": false
},
{
"help": "Reference date as epoch milliseconds for relative time annotations (defaults to now)",
"long": "reference-date",
"name": "reference_date",
"required": false
},
{
"help": "Target date (epoch ms) for proximity-based scoring",
"long": "target-date",
"name": "target_date",
"required": false
},
{
"help": "Weight [0.0–1.0] for target_date proximity scoring",
"long": "target-date-weight",
"name": "target_date_weight",
"required": false
},
{
"help": "Conflict similarity threshold [0.0–1.0] for conflict_resolution",
"long": "conflict-similarity-threshold",
"name": "conflict_similarity_threshold",
"required": false
},
{
"help": "Count distinct entities (subjects) in results",
"long": "count-entities",
"name": "count_entities",
"required": false
},
{
"help": "Enable exhaustive entity-class recall for aggregation queries",
"long": "exhaustive",
"name": "exhaustive",
"required": false
},
{
"default": "3",
"help": "Maximum expansion rounds for exhaustive recall (1-5, default 3)",
"long": "exhaustive-max-rounds",
"name": "exhaustive_max_rounds",
"required": false
},
{
"help": "Enable session-census retrieval for cross-session queries",
"long": "session-census",
"name": "session_census",
"required": false
},
{
"default": "2",
"help": "Min grains per unrepresented session (1-10, default 2)",
"long": "session-census-min-per-session",
"name": "session_census_min_per_session",
"required": false
},
{
"default": "0.35",
"help": "Min score for census grains (0.0-1.0, default 0.35)",
"long": "session-census-min-score",
"name": "session_census_min_score",
"required": false
},
{
"default": "10",
"help": "Max follow-up queries for session census (1-50, default 10)",
"long": "session-census-max-queries",
"name": "session_census_max_queries",
"required": false
}
],
"description": "Query memory (structural, full-text, or hybrid)",
"name": "recall"
},
{
"arguments": [
{
"help": "Complex question requiring multi-hop reasoning",
"long": "query",
"name": "query",
"required": true,
"short": "q"
},
{
"help": "Filter by namespace",
"long": "namespace",
"name": "namespace",
"required": false,
"short": "n"
},
{
"default": "20",
"help": "Maximum total results",
"long": "limit",
"name": "limit",
"required": false
},
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Multi-hop recall: decompose a complex question into sub-queries, execute each, merge results",
"name": "recall-chain"
},
{
"arguments": [
{
"help": "Hash of the grain to supersede",
"name": "old_hash",
"required": true
},
{
"help": "New grain type",
"name": "grain_type",
"required": true
},
{
"help": "Key=value pairs for the new grain fields",
"name": "fields",
"required": false
}
],
"description": "Supersede a grain with a new version",
"name": "supersede"
},
{
"arguments": [
{
"help": "Grain type (fact, event, etc.)",
"name": "grain_type",
"required": true
},
{
"help": "Target subject for tip resolution",
"long": "subject",
"name": "subject",
"required": false
},
{
"help": "Target relation for tip resolution",
"long": "relation",
"name": "relation",
"required": false
},
{
"help": "Target namespace (defaults to \"default\")",
"long": "namespace",
"name": "namespace",
"required": false
},
{
"help": "Target grain by hash (alternative to subject/relation)",
"long": "hash",
"name": "hash",
"required": false
},
{
"help": "ADD delta operations as field=value pairs (e.g. alpha=0.06)",
"long": "add",
"name": "add_ops",
"required": false
},
{
"help": "SET field operations as field=value pairs (e.g. last_run_id=run_42)",
"long": "set",
"name": "set_ops",
"required": false
},
{
"help": "Reason for the accumulation",
"long": "reason",
"name": "reason",
"required": true
}
],
"description": "Accumulate delta updates into a grain's current tip",
"name": "accumulate"
},
{
"arguments": [
{
"help": "Content address hash (hex)",
"name": "hash",
"required": true
},
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Inspect a grain by its hash",
"name": "inspect"
},
{
"arguments": [
{
"default": "50",
"help": "Maximum number of grains to display",
"long": "limit",
"name": "limit",
"required": false
},
{
"help": "Filter by namespace",
"long": "namespace",
"name": "namespace",
"required": false
},
{
"help": "Filter by grain type",
"long": "grain-type",
"name": "grain_type",
"required": false
}
],
"description": "Dump all grains (optionally filtered)",
"name": "dump"
},
{
"arguments": [
{
"help": "Content address hash (hex) — shorthand for `forget hash <hash>`",
"name": "hash",
"required": false
}
],
"description": "Forget a grain, user, or scope",
"name": "forget",
"subcommands": [
{
"arguments": [
{
"help": "User ID to erase",
"name": "user_id",
"required": true
}
],
"description": "Crypto-erase all data for a user (GDPR Art. 17)",
"name": "user"
},
{
"arguments": [
{
"help": "Scope path to erase (e.g., \"acme/prod/bot1\")",
"name": "scope_path",
"required": true
}
],
"description": "Crypto-erase all data in a scope",
"name": "scope"
}
]
},
{
"description": "Flush the write buffer to disk",
"name": "flush"
},
{
"arguments": [
{
"help": "Path to JSON file containing the ScopeTree definition",
"long": "file",
"name": "file",
"required": true
}
],
"description": "Set the scope tree configuration from a JSON file",
"name": "scope-tree-set"
},
{
"arguments": [
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Get the current scope tree configuration",
"name": "scope-tree-get"
},
{
"arguments": [
{
"help": "Scope path to erase (e.g., \"acme/prod/bot1\")",
"name": "scope_path",
"required": true
}
],
"description": "Erase all grains in a scope (crypto-erasure) [deprecated: use `forget scope`]",
"name": "scope-erase"
},
{
"description": "Purge stale or expired grains",
"name": "purge",
"subcommands": [
{
"arguments": [
{
"default": "100",
"help": "Maximum grains to purge in one batch",
"long": "batch",
"name": "batch",
"required": false
},
{
"default": "7",
"help": "Minimum age in days before a grain can be purged",
"long": "min-age-days",
"name": "min_age_days",
"required": false
},
{
"default": "0.3",
"help": "Retention threshold below which grains are purged",
"long": "threshold",
"name": "threshold",
"required": false
},
{
"default": "30",
"help": "Half-life in days for exponential decay",
"long": "half-life",
"name": "half_life",
"required": false
},
{
"help": "Namespace to scope purging (default: \"default\")",
"long": "namespace",
"name": "namespace",
"required": false
}
],
"description": "Prune stale memories using the decay-curve forgetting engine",
"name": "stale"
},
{
"arguments": [
{
"help": "Namespace name to purge (validated: ≤256 bytes, no control chars, no path separators, not reserved)",
"name": "namespace",
"required": true
},
{
"help": "Return the would-be grain count without deleting. Audit chain still records a DryRun event for forensic transparency",
"long": "dry-run",
"name": "dry_run",
"required": false
},
{
"help": "Override the Consent-grain guard. Subject to active policy: HIPAA blocks unconditionally; GDPR/CCPA/LGPD/PIPL require (a) Owner role and (b) a non-expired purge:override:consent Zanzibar grant on the memory. Restricted grains (GDPR Art. 18) are NEVER overrideable. Requires --reason",
"long": "force",
"name": "force",
"required": false
},
{
"help": "Authorization rationale (SOC 2 CC8.1). Required when --force. Validated: ≤512 chars, no secret patterns, no PII",
"long": "reason",
"name": "reason",
"required": false
},
{
"help": "Emit JSON to stdout instead of a human-readable summary",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Drop every grain in a namespace and reclaim its quota slot",
"name": "namespace"
}
]
},
{
"arguments": [
{
"default": "100",
"help": "Maximum grains to forget in one batch",
"long": "batch",
"name": "batch",
"required": false
},
{
"default": "7",
"help": "Minimum age in days before a grain can be forgotten",
"long": "min-age-days",
"name": "min_age_days",
"required": false
},
{
"default": "0.3",
"help": "Retention threshold below which grains are forgotten",
"long": "threshold",
"name": "threshold",
"required": false
},
{
"default": "30",
"help": "Half-life in days for exponential decay",
"long": "half-life",
"name": "half_life",
"required": false
},
{
"help": "Namespace to scope forgetting (default: \"default\")",
"long": "namespace",
"name": "namespace",
"required": false
}
],
"description": "Run the forgetting engine to prune stale memories [deprecated: use `purge stale`]",
"name": "forget-stale"
},
{
"arguments": [
{
"help": "User ID",
"name": "user_id",
"required": true
},
{
"help": "Purpose (e.g., \"memory_storage\")",
"name": "purpose",
"required": true
}
],
"description": "Grant consent for a user and purpose",
"name": "grant-consent"
},
{
"arguments": [
{
"help": "User ID",
"name": "user_id",
"required": true
},
{
"help": "Purpose",
"name": "purpose",
"required": true
}
],
"description": "Revoke consent for a user and purpose",
"name": "revoke-consent"
},
{
"arguments": [
{
"help": "User ID",
"name": "user_id",
"required": true
},
{
"help": "Reason for restriction",
"name": "reason",
"required": true
}
],
"description": "Restrict processing for a user (GDPR Art. 18)",
"name": "restrict"
},
{
"arguments": [
{
"help": "User ID",
"name": "user_id",
"required": true
}
],
"description": "Lift processing restriction for a user",
"name": "unrestrict"
},
{
"arguments": [
{
"help": "User ID to erase",
"name": "user_id",
"required": true
}
],
"description": "Crypto-erase all data for a user (destroy encryption key) [deprecated: use `forget user`]",
"name": "erase"
},
{
"arguments": [
{
"help": "User ID",
"name": "user_id",
"required": true
},
{
"help": "Export only user-provided data (GDPR Art. 20 portability)",
"long": "portable",
"name": "portable",
"required": false
}
],
"description": "Export all grains for a user as JSON",
"name": "export"
},
{
"arguments": [
{
"help": "Specific regulation to verify (gdpr, ccpa, hipaa, etc.)",
"long": "regulation",
"name": "regulation",
"required": false
}
],
"description": "Run compliance verification checks",
"name": "verify"
},
{
"arguments": [
{
"default": "json",
"help": "Output format: json (default), text",
"long": "format",
"name": "format",
"required": false
}
],
"description": "Export compliance report (CD-3)",
"name": "compliance-export"
},
{
"arguments": [
{
"default": "json",
"help": "Output format: json (default), text, nist, colorado, iso42001",
"long": "format",
"name": "format",
"required": false
},
{
"help": "Critical failure threshold (number of failed checks to trigger Critical risk)",
"long": "critical-threshold",
"name": "critical_threshold",
"required": false
},
{
"help": "Disparity detection threshold multiplier (e.g., 2.0 = flag entities 2x above mean)",
"long": "disparity-threshold",
"name": "disparity_threshold",
"required": false
}
],
"description": "Generate a memory impact assessment (Colorado AI Act, EU AI Act)",
"name": "impact-assessment"
},
{
"arguments": [
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Show compliance status — current violations and check summary",
"name": "compliance-status"
},
{
"arguments": [
{
"default": "20",
"help": "Maximum number of recent violations to display",
"long": "limit",
"name": "limit",
"required": false
},
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Show real-time compliance monitor metrics and recent violations (CD-5)",
"name": "compliance-monitor"
},
{
"arguments": [
{
"help": "Grain hashes (hex) to include in the envelope",
"name": "hashes",
"required": true
},
{
"default": "full",
"help": "Disclosure level: full, metadata_only, existence_only",
"long": "disclosure",
"name": "disclosure",
"required": false
},
{
"default": "areev-cli",
"help": "Signer identity (DID or agent ID)",
"long": "signer",
"name": "signer",
"required": false
},
{
"help": "Output as JSON (default: true since output is an envelope)",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Export grains as a tamper-evident signed envelope (CD-7)",
"name": "share"
},
{
"arguments": [
{
"help": "Path to JSON file containing the signed envelope",
"name": "path",
"required": true
}
],
"description": "Verify a signed envelope's integrity (CD-7)",
"name": "verify-envelope"
},
{
"arguments": [
{
"help": "Text to analyze",
"name": "text",
"required": true
},
{
"help": "Show detailed matches with confidence scores and byte positions",
"long": "detailed",
"name": "detailed",
"required": false
}
],
"description": "Detect PII in text",
"name": "pii"
},
{
"arguments": [
{
"help": "Recall ID (hex) to view a specific provenance record",
"name": "recall_id",
"required": false
},
{
"help": "List provenance records (used when no recall_id is given)",
"long": "list",
"name": "list",
"required": false
},
{
"help": "Filter by namespace",
"long": "namespace",
"name": "namespace",
"required": false
},
{
"help": "Filter by temporal expression (e.g., \"last 7 days\", \"today\")",
"long": "since",
"name": "since",
"required": false
},
{
"default": "20",
"help": "Maximum number of records to list",
"long": "limit",
"name": "limit",
"required": false
},
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "View or list decision provenance records (EU AI Act Art. 86)",
"name": "provenance"
},
{
"arguments": [
{
"help": "Agent ID (e.g., \"agent:planner-v2\")",
"long": "agent-id",
"name": "agent_id",
"required": true
},
{
"help": "Human-readable display name",
"long": "name",
"name": "name",
"required": true
},
{
"help": "Human or agent that delegates to this agent",
"long": "delegated-by",
"name": "delegated_by",
"required": true
},
{
"default": "",
"help": "Allowed namespaces (comma-separated, empty = all)",
"long": "namespaces",
"name": "namespaces",
"required": false
},
{
"default": "read",
"help": "Permission level: read, read_write, admin",
"long": "permission",
"name": "permission",
"required": false
}
],
"description": "Register a new agent identity",
"name": "agent-register"
},
{
"arguments": [
{
"help": "Agent ID",
"name": "agent_id",
"required": true
},
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Get an agent identity",
"name": "agent-get"
},
{
"arguments": [
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "List all registered agents",
"name": "agent-list"
},
{
"arguments": [
{
"help": "Agent ID to deactivate",
"name": "agent_id",
"required": true
}
],
"description": "Deactivate an agent",
"name": "agent-deactivate"
},
{
"arguments": [
{
"help": "Session namespace",
"long": "session",
"name": "session",
"required": true
},
{
"help": "Goal description",
"name": "description",
"required": true
},
{
"help": "Priority: critical, high, medium, low",
"long": "priority",
"name": "priority",
"required": false
},
{
"help": "Success criteria",
"long": "criteria",
"name": "criteria",
"required": false
},
{
"help": "Parent goal hash",
"long": "parent",
"name": "parent",
"required": false
}
],
"description": "Create a new goal in a session",
"name": "goal-create"
},
{
"arguments": [
{
"help": "Hash of the goal to update",
"name": "hash",
"required": true
},
{
"help": "New state: active, satisfied, failed, suspended",
"long": "state",
"name": "state",
"required": true
},
{
"help": "Reason for state change",
"long": "reason",
"name": "reason",
"required": false
}
],
"description": "Update a goal's state",
"name": "goal-update"
},
{
"arguments": [
{
"help": "Session namespace",
"name": "session",
"required": true
},
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Show the goal tree for a session",
"name": "goal-tree"
},
{
"arguments": [
{
"help": "Session namespace",
"name": "session",
"required": true
},
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Show blocked (suspended) goals for a session",
"name": "goal-blocked"
},
{
"arguments": [
{
"help": "CAL query string (e.g., 'RECALL facts WHERE subject = \"john\"')",
"name": "query",
"required": true
},
{
"default": "text",
"help": "Output format: text (default), json",
"long": "format",
"name": "format",
"required": false
}
],
"description": "Execute a CAL query against the memory",
"name": "cal"
},
{
"arguments": [
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Show engine metrics (write/query/latency counters)",
"name": "metrics"
},
{
"arguments": [
{
"help": "Principal (e.g., \"user:john\", \"agent:bot\")",
"long": "principal",
"name": "principal",
"required": true
},
{
"help": "Relation (e.g., \"read\", \"write\", \"admin\")",
"long": "relation",
"name": "relation",
"required": true
},
{
"help": "Resource (e.g., \"namespace:research\", \"namespace:*\")",
"long": "resource",
"name": "resource",
"required": true
}
],
"description": "Grant an authorization tuple",
"name": "authz-grant"
},
{
"arguments": [
{
"help": "Principal",
"long": "principal",
"name": "principal",
"required": true
},
{
"help": "Relation",
"long": "relation",
"name": "relation",
"required": true
},
{
"help": "Resource",
"long": "resource",
"name": "resource",
"required": true
}
],
"description": "Revoke an authorization tuple",
"name": "authz-revoke"
},
{
"arguments": [
{
"help": "Principal to list tuples for",
"long": "principal",
"name": "principal",
"required": true
},
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "List authorization tuples for a principal",
"name": "authz-list"
},
{
"description": "Show database statistics and info",
"name": "info"
},
{
"arguments": [
{
"help": "Output file path (e.g. backup.mg)",
"name": "path",
"required": true
},
{
"help": "Filter by namespace",
"long": "namespace",
"name": "namespace",
"required": false
},
{
"help": "Filter by grain type (fact, event, state, etc.)",
"long": "grain-type",
"name": "grain_type",
"required": false
}
],
"description": "Export memory as an OMS .mg container file",
"name": "export-file"
},
{
"arguments": [
{
"help": "Path to .mg file or directory of .mg files",
"name": "path",
"required": true
}
],
"description": "Import .mg grains from a file or directory",
"name": "import"
},
{
"arguments": [
{
"help": "Path to the document file to import",
"name": "path",
"required": true
},
{
"help": "Target namespace for all imported grains",
"long": "namespace",
"name": "namespace",
"required": false
},
{
"help": "Comma-separated tags to apply to every grain",
"long": "tags",
"name": "tags",
"required": false
},
{
"help": "User ID for audit logging",
"long": "user-id",
"name": "user_id",
"required": false
},
{
"default": "1000",
"help": "Maximum characters per text chunk (default: 1000)",
"long": "chunk-size",
"name": "chunk_size",
"required": false
},
{
"default": "100",
"help": "Overlap characters between adjacent chunks (default: 100)",
"long": "chunk-overlap",
"name": "chunk_overlap",
"required": false
},
{
"default": "0.8",
"help": "Confidence assigned to all grains (default: 0.8)",
"long": "confidence",
"name": "confidence",
"required": false
},
{
"help": "Enable structured (PageIndex-style) import: section tree + entity KG",
"long": "structured",
"name": "structured",
"required": false
},
{
"help": "Enable LLM-powered structure extraction for PDF/DOCX/PPTX (default: true when --structured)",
"long": "llm-structure",
"name": "llm_structure",
"required": false
},
{
"help": "Output result as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Import a document (PDF, DOCX, PPTX, HTML, TXT) and store as grains",
"name": "import-doc"
},
{
"description": "Force flush all data to disk",
"name": "compact"
},
{
"arguments": [
{
"help": "Output result as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Rebuild FTS and vector indexes from the Fjall source of truth",
"name": "rebuild-indexes"
},
{
"arguments": [
{
"default": "cli",
"help": "Actor identifier to record in the audit event (defaults to \"cli\")",
"long": "actor",
"name": "actor",
"required": false
},
{
"help": "Output result as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Hot-reload the predicate cardinality registry from disk",
"name": "reload-predicates"
},
{
"arguments": [
{
"default": "0.0.0.0:4100",
"help": "HTTP bind address",
"long": "http",
"name": "http",
"required": false
},
{
"help": "gRPC bind address (disabled if not specified)",
"long": "grpc",
"name": "grpc",
"required": false
},
{
"help": "Enable MCP protocol endpoint (/mcp)",
"long": "mcp",
"name": "mcp",
"required": false
},
{
"help": "Enable A2A protocol endpoint (/a2a)",
"long": "a2a",
"name": "a2a",
"required": false
},
{
"help": "Serve app static files from this directory",
"long": "app",
"name": "app",
"required": false
},
{
"default": "vault-transit",
"help": "Key management backend. Only \"vault-transit\" is supported (OpenBao Transit envelope) — the legacy local/vault/aws-kms backends were removed in the Fjall teardown. Configure via VAULT_ADDR + the VAULT_TRANSIT_* / VAULT_TOKEN (or kubernetes/approle) auth env vars",
"long": "key-backend",
"name": "key_backend",
"required": false
},
{
"default": "100",
"help": "Rate limit: requests per second (default: 100)",
"long": "rate-limit-rps",
"name": "rate_limit_rps",
"required": false
},
{
"default": "20",
"help": "Rate limit: burst capacity (default: 20)",
"long": "rate-limit-burst",
"name": "rate_limit_burst",
"required": false
},
{
"help": "Disable rate limiting entirely",
"long": "no-rate-limit",
"name": "no_rate_limit",
"required": false
},
{
"default": "0",
"help": "Maximum concurrent recall/search operations (0 = unlimited)",
"long": "max-concurrent-searches",
"name": "max_concurrent_searches",
"required": false
},
{
"help": "Allowed CORS origins (comma-separated). Empty = permissive",
"long": "cors-origins",
"name": "cors_origins",
"required": false
},
{
"help": "OIDC issuer URL (enables OIDC/JWT bearer token validation)",
"long": "oidc-issuer",
"name": "oidc_issuer",
"required": false
},
{
"help": "OIDC audience (required when --oidc-issuer is set)",
"long": "oidc-audience",
"name": "oidc_audience",
"required": false
},
{
"default": "email",
"help": "OIDC claim to use as principal (default: \"email\")",
"long": "oidc-principal-claim",
"name": "oidc_principal_claim",
"required": false
},
{
"help": "Resend API key for sending verification/reset emails",
"long": "resend-api-key",
"name": "resend_api_key",
"required": false
},
{
"default": "noreply@areev.ai",
"help": "Sender email address for outgoing emails",
"long": "email-from",
"name": "email_from",
"required": false
},
{
"default": "Areev",
"help": "Sender display name for outgoing emails",
"long": "email-from-name",
"name": "email_from_name",
"required": false
},
{
"help": "Base URL for email verification links (e.g., \"https://app.areev.ai\")",
"long": "base-url",
"name": "base_url",
"required": false
},
{
"help": "Axtion API base URL (enables Axtion hook delivery mode)",
"long": "axtion-url",
"name": "axtion_url",
"required": false
},
{
"help": "Axtion service API key (Bearer token for system-level auth)",
"long": "axtion-service-token",
"name": "axtion_service_token",
"required": false
}
],
"description": "Start the Areev server (HTTP, gRPC, MCP, A2A)",
"name": "serve"
},
{
"description": "Manage NER/ML models (download, list, inspect)",
"name": "model",
"subcommands": [
{
"arguments": [
{
"help": "Model name (currently: pii-ner)",
"name": "name",
"required": true
},
{
"help": "Force re-download even if files already exist",
"long": "force",
"name": "force",
"required": false
}
],
"description": "Download a model from HuggingFace",
"name": "download"
},
{
"description": "List installed models",
"name": "list"
},
{
"arguments": [
{
"help": "Model name (currently: pii-ner)",
"name": "name",
"required": true
}
],
"description": "Show the local path to an installed model",
"name": "path"
}
]
},
{
"arguments": [
{
"help": "Policy presets (comma-separated: gdpr, hipaa, etc.)",
"long": "policy",
"name": "policy",
"required": true
},
{
"help": "Read master key from environment variable (hex, 64 chars)",
"long": "master-key-env",
"name": "master_key_env",
"required": false
},
{
"default": "none",
"help": "Write-path dedup policy: none (default), exact, fuzzy, upsert",
"long": "dedup",
"name": "dedup",
"required": false
},
{
"default": "0.85",
"help": "Fuzzy dedup similarity threshold (0.0-1.0, default: 0.85)",
"long": "dedup-threshold",
"name": "dedup_threshold",
"required": false
},
{
"help": "Add a guardrail pattern — blocks writes matching this text (can be repeated)",
"long": "guardrail",
"name": "guardrail_patterns",
"required": false
},
{
"default": "contains",
"help": "Guardrail match mode: exact, contains (default), fuzzy",
"long": "guardrail-mode",
"name": "guardrail_mode",
"required": false
},
{
"default": "0.8",
"help": "Fuzzy guardrail threshold (0.0-1.0, default: 0.8)",
"long": "guardrail-threshold",
"name": "guardrail_threshold",
"required": false
}
],
"description": "Create a new database with sealed policies",
"name": "create"
},
{
"arguments": [
{
"help": "Target a specific memory in a multi-memory registry (by ID or name). When --data-dir is a registry root (contains memories.json), this resolves the memory subdirectory automatically",
"long": "memory",
"name": "memory",
"required": false
},
{
"help": "Add a policy (comma-separated)",
"long": "add-policy",
"name": "add_policy",
"required": false
},
{
"help": "Remove a policy (comma-separated)",
"long": "remove-policy",
"name": "remove_policy",
"required": false
},
{
"help": "Reason for policy downgrade (required for removals)",
"long": "reason",
"name": "reason",
"required": false
},
{
"help": "Read master key from environment variable",
"long": "master-key-env",
"name": "master_key_env",
"required": false
},
{
"help": "Change write-path dedup policy: none, exact, fuzzy, upsert",
"long": "dedup",
"name": "dedup",
"required": false
},
{
"help": "Fuzzy dedup similarity threshold (0.0-1.0)",
"long": "dedup-threshold",
"name": "dedup_threshold",
"required": false
},
{
"help": "Add a guardrail pattern — blocks writes matching this text",
"long": "add-guardrail",
"name": "add_guardrail",
"required": false
},
{
"help": "Remove a guardrail rule by pattern",
"long": "remove-guardrail",
"name": "remove_guardrail",
"required": false
},
{
"default": "contains",
"help": "Guardrail match mode for --add-guardrail: exact, contains (default), fuzzy",
"long": "guardrail-mode",
"name": "guardrail_mode",
"required": false
},
{
"default": "0.8",
"help": "Fuzzy guardrail threshold (0.0-1.0, default: 0.8)",
"long": "guardrail-threshold",
"name": "guardrail_threshold",
"required": false
}
],
"description": "Modify the policy configuration of an existing database",
"name": "modify"
},
{
"arguments": [
{
"help": "Confirm destruction (required)",
"long": "confirm",
"name": "confirm",
"required": false
}
],
"description": "Destroy a database and all its data",
"name": "destroy"
},
{
"description": "Manage hooks (CDC event log)",
"name": "hook",
"subcommands": [
{
"arguments": [
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "List all configured hooks",
"name": "list"
},
{
"arguments": [
{
"help": "Hook name",
"long": "name",
"name": "name",
"required": true
},
{
"default": "cdc",
"help": "Delivery mode: cdc (default) or webhook",
"long": "mode",
"name": "mode",
"required": false
},
{
"help": "Webhook URL (required for webhook mode)",
"long": "url",
"name": "url",
"required": false
},
{
"help": "Event type filters (comma-separated: grain_created,grain_forgotten,grain_superseded,crypto_erase,key_rotated)",
"long": "events",
"name": "events",
"required": false
},
{
"default": "full",
"help": "Redaction mode: full, metadata_only, hash_only",
"long": "redaction",
"name": "redaction",
"required": false
}
],
"description": "Add a new hook",
"name": "add"
},
{
"arguments": [
{
"help": "Hook ID (UUID)",
"name": "hook_id",
"required": true
}
],
"description": "Delete a hook",
"name": "delete"
},
{
"arguments": [
{
"help": "Hook ID (UUID)",
"name": "hook_id",
"required": true
}
],
"description": "Pause a hook",
"name": "pause"
},
{
"arguments": [
{
"help": "Hook ID (UUID)",
"name": "hook_id",
"required": true
}
],
"description": "Resume a paused hook",
"name": "resume"
},
{
"arguments": [
{
"default": "0",
"help": "Start after this sequence number (exclusive)",
"long": "after",
"name": "after",
"required": false
},
{
"default": "100",
"help": "Maximum events to return",
"long": "limit",
"name": "limit",
"required": false
},
{
"default": "json",
"help": "Output format: json (default) or ndjson",
"long": "format",
"name": "format",
"required": false
}
],
"description": "Drain events from the event log",
"name": "drain"
},
{
"description": "Show hook system statistics",
"name": "stats"
},
{
"arguments": [
{
"help": "Hook ID (UUID)",
"name": "hook_id",
"required": true
}
],
"description": "Send a test event to a webhook hook",
"name": "test"
}
]
},
{
"arguments": [
{
"default": "specs",
"help": "Output directory (default: ./specs)",
"long": "output",
"name": "output",
"required": false
},
{
"help": "Check if committed specs are up-to-date (exit 1 if stale)",
"long": "check",
"name": "check",
"required": false
}
],
"description": "Export API specifications to a directory",
"name": "spec"
},
{
"arguments": [
{
"help": "Pilot Postgres DSN. Falls back to `$PILOT_DATABASE_URL`",
"long": "pilot-dsn",
"name": "pilot_dsn",
"required": false
},
{
"help": "Org id to verify (UUID or system-org slug)",
"long": "org",
"name": "org",
"required": true
},
{
"help": "Optional memory id — present rows whose payload references this memory only. Useful for ADR-017 §5 cross-cell traces",
"long": "memory",
"name": "memory",
"required": false
},
{
"help": "Optional lower chain_seq bound (default: 1)",
"long": "since-seq",
"name": "since_seq",
"required": false
},
{
"default": "default",
"help": "Region label used to look up the cached audit HMAC key",
"long": "region",
"name": "region",
"required": false
},
{
"help": "Output as JSON",
"long": "json",
"name": "json",
"required": false
}
],
"description": "Verify an org's Postgres-backed audit chain (ADR-006)",
"name": "audit-verify"
}
]
}