Home

Achilles

Get Started

Two console steps — deploy and create the owner. From there the platform guides you itself: the dashboard shows a setup panel that links to every screen and checks off what's done.

What you'll need

A Linux server (VPS) with Docker and Docker Compose installed — from 2 vCPU and 8 GB RAM (details in step 1).
A domain whose A record points to the server.
An AI provider API key — Anthropic, OpenAI, Google, a model aggregator (OpenRouter and the like), or your own OpenAI-compatible server, including local Ollama.
SMTP access (a mail server for outgoing email) — needed to invite employees. Can be added later.

Deployment

The platform ships as a set of Docker containers: the database, queues, backend, frontend, and reverse proxy all come up with a single command.

Server requirements minimum · recommended
AI hub (no knowledge base) 2 vCPU · 8 GB RAM · 40 GB SSD
With knowledge base and built-in embedder 8 vCPU · 16 GB RAM · 80 GB SSD
the built-in embedder keeps the model in memory (peak ~6 GB); if an external provider computes the embeddings, the minimum is enough. Running the embedder on an 8 GB host? Add swap (4 GB is enough) — the load peak is transient, but without swap it can OOM the service
1
Clone the repository and fill in the settings
The .env file is the only place you need to edit before launch.
git clone https://github.com/maestrokj/Achilles.git cd Achilles cp .env.example .env
.env fill in these lines
POSTGRES_PASSWORD / REDIS_PASSWORD strong passwords
SECRET_KEY openssl rand -base64 32
CORS_ORIGINS ["https://your-domain.com"]
DOMAIN your-domain.com
PUBLIC_BASE_URL https://your-domain.com
VITE_API_URL https://your-domain.com/api
2
Start the platform
docker compose -f docker-compose.prod.yml up -d
Check: open http://<your-domain>/ — the platform greets you with a status page.
3
Issue a TLS certificate
Certbot is already included. Once the certificate is issued, nginx switches to HTTPS on its own; renewal is automatic.
docker compose -f docker-compose.prod.yml run --rm --entrypoint certbot certbot \ certonly --webroot -w /var/www/certbot -d <your-domain> -d www.<your-domain> docker compose -f docker-compose.prod.yml restart nginx
How it works: Deployment

First login

A fresh platform has no accounts at all. You create the first one — the Owner — yourself; everyone else signs in later by invitation. There are two ways to do it, and both work only while the database is still empty.

A
In the browser — the first-run screen
Just open https://<your-domain>/. On an empty database the platform takes you straight to the owner-creation screen — enter a name, email, and password, and you land in the admin panel already signed in.
B
In the console — a command
Prefer to keep the form off the public domain? Create the Owner on the server, then sign in at https://<your-domain>/login.
docker compose -f docker-compose.prod.yml exec backend \ achilles init-owner --email you@company.com --password '…' --name 'Your name'
The first-run screen is open to whoever reaches the domain first, so create the Owner right after deployment. Once any account exists, both the screen and the command switch off for good, and the domain shows the normal login.
Roles in the platform: Owner — everything, including the audit log and security settings; Admin — the control panel; Member — chat, agents, and personal settings.

The setup panel takes it from here

After the first login the admin dashboard greets you with a setup panel: six steps, each linking to the right screen. The platform checks them off on its own as you go, and once everything is configured the panel retires itself. The sections below walk the same six steps in the same order.

the panel on the dashboard — here every row jumps to its section below

Models for answers

The heart of the platform. One provider and one model is the minimum for chat to work. Everything happens on one screen — https://<your-domain>/admin/ai-models (the "AI models" menu item).

1
Add a provider
"Add provider" → paste the API key → "Test". Any major provider works (Anthropic, OpenAI, Google), as does a model aggregator or your own OpenAI-compatible model — for the latter just point at the server URL.
New provider Test
Provider Anthropic
API key sk-ant-•••••••••••••
2
Enable models
Switch on the models you need from the provider's catalog.
3
Assign them to chat
In the "Assignments" block pick which of the enabled models are available to employees in chat.
Chat is live. Open https://<your-domain>/chat and try it — the remaining panel steps don't block it. This is the employees' workspace: they talk to the AI here, and set up their own agents next door.
How it works: AI Foundation

Embedding model

The same "AI models" screen, the "Assignments" block. The embedding model turns documents into vectors for search — the knowledge base can't be built without one. A built-in embedder ships with the platform and runs on your server, so an external provider is optional.

Pick the model before the first source sync: changing it later means reindexing the entire base.

Data sources

This step turns the platform from an AI hub into company memory: Jira, Confluence, and other sources are gathered into a knowledge graph, and answers start drawing on your documents — with links to the source. The screen is https://<your-domain>/admin/harvester (the "Data sources" menu item).

1
Add a source
The "Add source" button opens a wizard: source type, credentials, connection test, scope.
2
Run a sync
Start it manually or wait for the schedule. The incremental interval is shared across all sources; an individual source can be given its own schedule in its card.
3
Check that people got matched
After the first sync the platform links source accounts to platform users by email. Anyone it couldn't match shows up on the dashboard ("unlinked accounts") and on https://<your-domain>/admin/users → the "Data source links" tab — link them there manually in a couple of clicks. Until an account is linked, that employee only gets public documents in their answers.
4
Keep an eye on the storage
https://<your-domain>/admin/knowledge-store (the "Storage" item) — graph state (entities, chunks, links, vectors), the curation schedule, retention policy, and backups to external storage.
Source access rights are carried into the graph: an employee only gets the documents in their answers that they can access in the original source.
How it works: Harvester Knowledge Store

Models for agents

Agents are autonomous assistants employees set up for recurring work at https://<your-domain>/agents. On the "AI models" screen, in the same "Assignments" block, mark the models agents may use — each employee then picks from that list for their agent.

How it works: Agent Engine

Email delivery

Without it, employee invitations and password resets won't work. On https://<your-domain>/admin/platform (the "Platform" menu item) fill in the SMTP card and click "Test" — the platform sends a test email.

Email (SMTP) Test
Host smtp.yourcompany.com
Port · Encryption 465 · SSL/TLS
Username · Password noreply@yourcompany.com · ••••
Sender address noreply@yourcompany.com
a snippet of the "Platform" screen — green marks what to fill in
How it works: Email

Chat surfaces

Employees can ask the platform right from their messenger — each thread is its own conversation. The cards live on the "Platform" screen, in the "Surfaces" block; connect any or all three.

Surfaces Platform · what each one needs
Slack bot token · signing secret
Mattermost server URL · bot token
Telegram bot token
each card has its own "Test" button — the platform verifies the credentials right away
For the platform to recognize who's writing, each employee links their messenger account in their personal settings — see "Inviting the team" below.
All six checkmarks — the panel retires itself. The platform is configured; what's left is to bring people in.
How it works: Slack Mattermost Telegram

Inviting the team

Accounts are created by invitation only — there's no self-signup. You'll need email configured (panel step 5); if SMTP isn't set up, the invitations screen reminds you.

1
Send an invitation
https://<your-domain>/admin/users (the "Users" item) → the "Invitations" tab → email and role. The link in the email is valid for 48 hours.
Invite an employee Send
Email colleague@company.com
Role Member
2
The employee accepts the invitation
From the link in the email they set a name and password — and land in chat. Their agents, conversation history, notification feed, and personal settings are already waiting for them.
3
Linking a messenger optional
In personal settings (https://<your-domain>/account, the "Connected accounts" section) the employee picks a messenger — the platform issues a short-lived code to send to the bot in a direct message, and the accounts are linked.

Making it yours

Beyond the setup panel — worth a look once the platform is running.

Organization
Company name, logo, timezone, interface language, and date format — defaults every employee can override. /admin/platform
Spend limits
A weekly token cap for agents and a monthly budget alert; spend per employee and per model shows up here too. /admin/ai-usage
AI tools
Web search and page fetching for chat and agents. /admin/ai-tools
Organization prompt
The company's tone, rules, and context that the AI factors into every answer. /admin/ai-prompt
Notifications
Which events reach people and through which channels — in-app feed and email. /admin/notifications

Customization

The platform extends in four directions — each described in the architecture documentation.

Your own surfaces — Public API
An internal portal, another messenger, your own tool — any surface connects through an open HTTP API. Access keys are issued on the "API keys" screen (/admin/api-keys).
External AI assistants — MCP
Claude, IDEs, and other MCP clients connect to the company knowledge base as a tool — switched on with a kill switch on the "Platform" screen.
Your own connectors
A non-standard data source connects via the Harvester contract — syncing, scheduling, and monitoring come for free.
Your own AI tools
The tool catalog is open: the next iteration adds connecting MCP servers with tools for agents.