AIFRED is a small, from-scratch personal agent.
678
A lean, self-hosted personal AI agent. Python, Docker, your models, your data.
AIFRED is a small, from-scratch personal agent: persistent memory, skills that improve over time, tools (including MCP servers), a local knowledge base, and several ways to talk to it, all in one Python process, one SQLite database and one container. It runs on your hardware, uses the LLMs you choose (local or hosted) and is configured entirely from a web dashboard.
Status: first public release (
0.1.0). It is tested (850+ automated tests), but several integrations have so far been exercised mostly against fakes: expect rough edges and please report them.
| This image | https://hub.docker.com/r/lordraw/aifred |
| Source code | https://github.com/lordraw77/AIFRED |
| Deployment guide (OpenBao, backup, recovery) | https://github.com/lordraw77/AIFRED/blob/main/docs/deploy.md |
| Specification | https://github.com/lordraw77/AIFRED/blob/main/docs/specs.md |
| Architecture decisions | https://github.com/lordraw77/AIFRED/blob/main/docs/adr.md |
| Changelog | https://github.com/lordraw77/AIFRED/blob/main/CHANGELOG.md |
| License | MIT |
/v1/chat/completions).pip in the image, strict Content-Security-Policy on the dashboard.Recommended: the full stack (AIFRED + OpenBao for the secrets key), from the repository:
git clone https://github.com/lordraw77/AIFRED.git && cd AIFRED
cp .env.example .env # set AIFRED_ADMIN_USER and AIFRED_ADMIN_PASSWORD (12+ characters)
echo 'AIFRED_IMAGE=lordraw/aifred' >> .env
AIFRED_PULL=1 make docker/run # pulls this image, starts OpenBao and AIFRED
# open http://127.0.0.1:8700
Just to try it (secrets key kept in the data volume, so not for production):
docker run -d --name aifred -p 127.0.0.1:8700:8700 -v aifred-data:/data \
--read-only --tmpfs /tmp:size=64m,mode=1777 --cap-drop ALL --security-opt no-new-privileges:true \
-e AIFRED_ADMIN_USER=admin -e AIFRED_ADMIN_PASSWORD='choose at least 12 characters' \
lordraw/aifred:latest
Then open http://127.0.0.1:8700, sign in, and on Models add a provider (for example Ollama), press Test on a model and put it on the default route. The password variable is only read the first time; remove it afterwards.
| Tag | Meaning |
|---|---|
0.1.0 | A specific version (pin this one for repeatable deployments) |
0.1.0.dev0 | The earlier development build |
latest | The most recent build |
Platform: linux/amd64. An arm64 build is possible from the sources (see the deployment guide).
Almost everything is set on the dashboard and stored in the database. The container reads only:
| Variable | Purpose |
|---|---|
AIFRED_ADMIN_USER, AIFRED_ADMIN_PASSWORD | The admin account, created on first start |
AIFRED_DATA_DIR | Data directory (default /data) |
AIFRED_API_HOST | Listen address (default 0.0.0.0 in the image; publish the port on 127.0.0.1 unless you put HTTPS in front) |
AIFRED_SECRETS_BACKEND and AIFRED_OPENBAO_* | file (default) or openbao for the secrets key |
Port 8700. State lives in the /data volume: database, memory, skills, workspace and knowledge files. Back it up together with the OpenBao volume (see the guide).
AIFRED is open source under the MIT License: use it, change it, fork it, ship your own version. Issues and pull requests are welcome at https://github.com/lordraw77/AIFRED. To build the image yourself: docker build -t aifred . in the repository.
MIT © 2026 Alessandro Pioli.
Content type
Image
Digest
sha256:59be48777…
Size
87.7 MB
Last updated
about 17 hours ago
docker pull lordraw/aifred