Skip to content

Configuration Reference

Hoard configuration is stored in ${HOARD_DATA_DIR:-~/.hoard}/config.yaml.

Full Configuration

# ${HOARD_DATA_DIR:-~/.hoard}/config.yaml
# Generated by 'hoard init' - edit manually or run 'hoard init' again
# =============================================================================
# SECURITY
# =============================================================================
security:
tokens:
- name: "default"
token: "hoard_sk_544e528b4b1ae6..." # Auto-generated
scopes: ["search", "get", "memory", "sync", "ingest"]
rate_limits:
search_requests_per_minute: 30
get_requests_per_minute: 60
chunks_returned_per_hour: 5000
bytes_returned_per_hour: 50000000 # 50MB
# =============================================================================
# CONNECTORS
# =============================================================================
connectors:
# Local filesystem files
local_files:
enabled: true
paths:
- ~/Documents/Notes
- ~/Documents/Projects
include_extensions:
- .md
- .txt
- .csv
- .json
- .yaml
- .rst
chunk_max_tokens: 400
chunk_overlap_tokens: 50
# Agent inbox
inbox:
enabled: false
path: "${HOARD_DATA_DIR:-~/.hoard}/inbox"
include_extensions:
- .md
- .txt
- .csv
- .json
- .yaml
- .rst
chunk_max_tokens: 400
chunk_overlap_tokens: 50
# Obsidian vault
obsidian:
enabled: false
vault_path: ~/Notes
chunk_max_tokens: 400
chunk_overlap_tokens: 50
# Chrome bookmarks
bookmarks_chrome:
enabled: false
bookmark_path: "" # Auto-detected if empty
# Firefox bookmarks
bookmarks_firefox:
enabled: false
places_path: "" # Auto-detected if empty
# Notion export
notion_export:
enabled: false
export_path: ""
include_databases: true
include_csv_databases: true
schema_sample_rows: 200
max_schema_tags: 200
chunk_max_tokens: 400
chunk_overlap_tokens: 50
# =============================================================================
# SYNC
# =============================================================================
sync:
interval_minutes: 15 # 0 to disable scheduled sync
watcher_enabled: false # Enable file watcher
watcher_debounce_seconds: 2
# =============================================================================
# MEMORY
# =============================================================================
memory:
default_ttl_days: 30
prune_on_sync: true
# =============================================================================
# SEARCH
# =============================================================================
search:
rrf_k: 60 # Reciprocal Rank Fusion constant
max_chunks_per_entity: 3 # Max chunks returned per entity
# =============================================================================
# SERVER
# =============================================================================
server:
host: "127.0.0.1"
port: 19850
allow_remote: false
# =============================================================================
# VECTORS (Optional)
# =============================================================================
vectors:
enabled: false
model_name: sentence-transformers/all-MiniLM-L6-v2
batch_size: 32
prefilter_limit: 1000 # BM25 prefilter candidates for vector search
# =============================================================================
# WRITE LAYER (v2)
# =============================================================================
write:
enabled: true
server_secret_env: "HOARD_SERVER_SECRET"
server_secret_file: "${HOARD_DATA_DIR:-~/.hoard}/server.key"
database:
busy_timeout_ms: 5000
slots:
pattern: "^(pref|fact|ctx|decision|event):[a-z0-9_]+(\.[a-z0-9_]+){0,3}$"
prefixes: ["pref", "fact", "ctx", "decision", "event"]
on_invalid: "reject"
embeddings:
enabled: true
active_model:
name: sentence-transformers/all-MiniLM-L6-v2
version: "2.0.0"
dimensions: 384
format:
dtype: float32
byte_order: little
normalization: l2
proposals:
default_ttl_days: 7
max_ttl_days: 30
limits:
global:
max_memories: 50000
per_agent:
max_writes_per_hour: 100
retention:
default_ttl_days: 365
min_confidence_to_keep: 0.2
unused_decay_after_days: 90
worker:
mode: process
poll_interval_ms: 1000
job_timeout_seconds: 60
lease_duration_seconds: 60
heartbeat_interval_seconds: 30
max_retries: 3
nli:
model: cross-encoder/nli-deberta-v3-small
top_k: 5
contradiction_threshold: 0.7
sensitivity:
sensitive_max_ttl_days: 90
restricted_max_ttl_days: 30
query:
hybrid_weight_vector: 0.6
hybrid_weight_fts: 0.4
slot_match_bonus: 0.1
slot_only_baseline: 0.5
union_multiplier: 2
# =============================================================================
# ARTIFACTS
# =============================================================================
artifacts:
blob_path: "${HOARD_DATA_DIR:-~/.hoard}/artifacts"
inline_max_bytes: 262144
retention_days: 30
# =============================================================================
# ORCHESTRATOR (Beta)
# =============================================================================
orchestrator:
registration_token_env: "HOARD_REGISTRATION_TOKEN"
fallback_max_bytes: 10485760
default_scopes:
- agent.self
- data.search
- data.get
- memory.read
- task.claim
- task.execute
- artifact.read
- artifact.write
- event.read
- cost.write
# =============================================================================
# COST
# =============================================================================
cost:
budgets:
per_agent:
default: 5.0
per_workflow:
default: 50.0
global:
daily: 50.0
monthly: 500.0
# =============================================================================
# STORAGE
# =============================================================================
storage:
db_path: "${HOARD_DATA_DIR:-~/.hoard}/hoard.db"

Section Reference

security

Authentication and rate limiting configuration.

tokens

security:
tokens:
- name: "client-name"
token: "hoard_sk_..."
scopes: ["search", "get", "memory", "sync", "ingest"]
ScopeAllows
searchsearch tool
data.searchAlias for search
getget, get_chunk tools
data.getAlias for get
memoryMemory read and write (legacy scope)
memory.readmemory_get, memory_search tools
memory.writememory_put and other memory write tools
syncsync, sync_status, sync_run, embeddings_build tools
ingestinbox_put tool
agent.registerRegister agents (Orchestrator)
agent.selfManage own agent state (Orchestrator)
agent.readList agents (Orchestrator)
task.createCreate tasks (Orchestrator)
task.claimPoll and claim tasks (Orchestrator)
task.executeStart/complete/fail tasks (Orchestrator)
task.manageCancel tasks (Orchestrator)
task.readRead task details (Orchestrator)
artifact.readRead artifacts (Orchestrator)
artifact.writeWrite artifacts (Orchestrator)
event.readPoll events (Orchestrator)
event.writePublish events (Orchestrator)
cost.readCost summary and budgets (Orchestrator)
cost.writeCost reporting (Orchestrator)
workflow.createCreate workflows (Orchestrator)
workflow.manageStart/pause/resume/cancel workflows (Orchestrator)
workflow.readRead workflow status and definitions (Orchestrator)
sensitiveAccess entities marked as sensitive

rate_limits

FieldDefaultDescription
search_requests_per_minute30Search rate limit
get_requests_per_minute60Get and write rate limit
chunks_returned_per_hour5000Hourly chunk cap
bytes_returned_per_hour50000000Hourly byte cap (50MB)

connectors

Configure data source connectors.

ConnectorDescription
local_filesLocal filesystem files
inboxAgent inbox drop folder
obsidianObsidian vault
bookmarks_chromeChrome bookmarks
bookmarks_firefoxFirefox bookmarks
notion_exportNotion workspace export

See Connectors for detailed options.

local_files

FieldTypeDefaultDescription
enabledbooltrueEnable connector
pathslist[]Paths to index
include_extensionslist['.md', '.txt', ...]File extensions to include
chunk_max_tokensint400Max tokens per chunk
chunk_overlap_tokensint50Overlap between chunks

inbox

FieldTypeDefaultDescription
enabledboolfalseEnable connector
pathstring~/.hoard/inboxInbox folder path
include_extensionslist['.md', '.txt', ...]File extensions to include
chunk_max_tokensint400Max tokens per chunk
chunk_overlap_tokensint50Overlap between chunks

obsidian

FieldTypeDefaultDescription
enabledboolfalseEnable connector
vault_pathstring~/NotesPath to vault
chunk_max_tokensint400Max tokens per chunk
chunk_overlap_tokensint50Overlap between chunks

bookmarks_chrome

FieldTypeDefaultDescription
enabledboolfalseEnable connector
bookmark_pathstring""Path to Bookmarks file (auto-detected if empty)

bookmarks_firefox

FieldTypeDefaultDescription
enabledboolfalseEnable connector
places_pathstring""Path to places.sqlite (auto-detected if empty)

notion_export

FieldTypeDefaultDescription
enabledboolfalseEnable connector
export_pathstring""Path to export directory
include_databasesbooltrueIndex database exports
include_csv_databasesbooltrueIndex CSV database exports
schema_sample_rowsint200Rows to sample for schema detection
max_schema_tagsint200Max tags from schema
chunk_max_tokensint400Max tokens per chunk
chunk_overlap_tokensint50Overlap between chunks

sync

Sync configuration.

FieldTypeDefaultDescription
interval_minutesint15Scheduled sync interval (0 disables)
watcher_enabledboolfalseEnable file watcher
watcher_debounce_secondsint2Debounce window for watcher events

Background sync runs only while the server is running (hoard serve or hoard mcp serve).

memory

Memory configuration.

FieldTypeDefaultDescription
default_ttl_daysint30Default TTL for memory entries
prune_on_syncbooltruePrune expired memory entries during sync

Search behavior configuration.

FieldTypeDefaultDescription
rrf_kint60Reciprocal Rank Fusion constant
max_chunks_per_entityint3Max chunks returned per entity

server

HTTP MCP server configuration.

FieldTypeDefaultDescription
hoststring127.0.0.1Bind address
portint19850Port number
allow_remoteboolfalseRequire explicit opt-in for non-loopback binds

vectors

Vector (semantic) search configuration.

FieldTypeDefaultDescription
enabledboolfalseEnable vector search
model_namestringsentence-transformers/all-MiniLM-L6-v2Embedding model
batch_sizeint32Batch size for embedding generation
prefilter_limitint1000BM25 candidates to prefilter for vector search

write

Write-layer configuration for the v2 memory system and background workers.

FieldDefaultDescription
enabledtrueEnable write layer and worker
server_secret_envHOARD_SERVER_SECRETEnv var for admin token
server_secret_file${HOARD_DATA_DIR:-~/.hoard}/server.keyFile fallback for admin token
database.busy_timeout_ms5000SQLite busy timeout
limits.per_agent.max_writes_per_hour100Per-agent write limit
limits.global.max_memories50000Max memory entries
worker.poll_interval_ms1000Background worker poll interval

artifacts

FieldDefaultDescription
blob_path${HOARD_DATA_DIR:-~/.hoard}/artifactsArtifact storage directory
inline_max_bytes262144Max inline text size
retention_days30Retention for blob storage

orchestrator

FieldDefaultDescription
registration_token_envHOARD_REGISTRATION_TOKENEnv var for agent registration token
fallback_max_bytes10485760Max fallback context size
default_scopessee configDefault scopes for new agents

cost

FieldDefaultDescription
budgets.per_agent.default5.0Default per-agent budget
budgets.per_workflow.default50.0Default per-workflow budget
budgets.global.daily50.0Daily global budget
budgets.global.monthly500.0Monthly global budget

storage

FieldDefaultDescription
db_path${HOARD_DATA_DIR:-~/.hoard}/hoard.dbSQLite database path