Configuration
Alfred keeps project config, model assignment, and profile overrides
separate. Project config stays in .alfred/config.json; user-owned
model assignment lives in ~/.alfred/models.json.
Capability preferences
Releases with the composition layer record approved Workspace, Memory, and Agent Harness selection in .alfred/setup/components.json. Preview and discovery leave it untouched. Managed harness files retain their separate .alfred/setup/installation.json receipt, compatible with 1.1.0.
Each capability owns its state and configuration. Workspace uses its own external data directory; a Memory filesystem workspace binding is a separate tenant-access concept. Choosing components does not connect their services or credentials. See Product capabilities.
Initialize project configuration
From your project root:
curl -fsSL https://raw.githubusercontent.com/GOI17/main/install.sh | sh
The TUI previews suite config and selected harness artifacts before writing. It only applies files after explicit approval.
Schema
{
"schema": "alfred.config/v1",
"tenant": "my-project",
"profile": "coding",
"policy": {
"default": "deny",
"protected_paths": [".ai/", ".opencode/", "harnesses/"],
"destructive_commands": ["rm -rf", "git reset --hard"],
"approval": "human"
},
"memory": {
"hosting": "local",
"store": "sqlite",
"path": "~/.alfred/tenants/my-project.sqlite"
},
"evals": {
"baseline": ".ai/evals/baselines/main.json",
"gates": ".ai/evals/regression-gates.json",
"auto_compare": true
},
"harnesses": {
"primary": "opencode",
"targets": ["opencode", "codex", "pi"]
}
}
Model assignment
You own your model. Alfred does not hardcode a
provider or model name in agent specs. Setup does not create or modify ~/.alfred/models.json. Assign primary models and fallback chains separately through runtime configuration; the example below is illustrative, not a setup-generated default.
{
"*": {
"primary": "ollama/qwen2.5-coder:7b",
"fallbacks": ["openai/gpt-4.1-mini", "anthropic/claude-sonnet-4"]
},
"orchestrator": { "primary": "anthropic/claude-sonnet-4" },
"developer": { "primary": "anthropic/claude-sonnet-4" },
"fallbacks": ["ollama/qwen2.5-coder:7b", "openai/gpt-4.1-mini", "anthropic/claude-sonnet-4"]
}
Context compaction
Alfred triggers local-first context compaction around 35% of detected
model context. Local heuristics run first; provider-assisted summaries
require approval and emit provider_request_reduced.
Policy
policy.default is always "deny". Every
protected path, every destructive command, and every permission
change requires a human approval trace event.
Add a path or command to escalate the gate, never to lower it.
Alfred will not let a subagent remove protected_paths
even if the prompt asks nicely.
Memory hosting
Memory runs only as a local process bound to loopback. The managed hosted service is retired. Use SQLite for a coding tenant or your own Postgres database; database location does not change the local HTTP contract.
The web and both profile names are retained for Postgres-backed local clients. Cloud ChatGPT Actions and AI Studio cannot reach this process.
Environment variables
Sensitive values never live in config.json. Use env
vars; Alfred reads them at startup.
# Local server (use the key issued by alfred init) export ALFRED_MEMORY_REQUIRE_AUTH=true export ALFRED_MEMORY_PORT=3000 export ALFRED_MEMORY_BIND=127.0.0.1 # Local client export ALFRED_MEMORY_BASE_URL=http://127.0.0.1:3000 export ALFRED_MEMORY_API_KEY=alk_...
Validate the config
node scripts/validate-policies.mjs node --test packages/core/test/kernel.test.mjs