A community-driven registry for the Claude Code ecosystem. Not affiliated with Anthropic.
Are you the author? Sign in to claim
An AI co-worker with its own computer. Self-evolving, persistent memory, MCP server, secure credential collection, email
An AI co-worker with its own computer.
Website · Get a Free Phantom · Docs · Issues
AI agents today are disposable. You open a chat, get an answer, close the tab, and the context is gone. Next time you start from scratch. Every session is day one.
Phantom takes a different approach: give the AI its own computer. A dedicated machine where it installs software, spins up databases, builds dashboards, remembers what you told it last week, and gets measurably better at your job every day. Your laptop stays yours. The agent's workspace is its own.
This is not a chatbot. It is a co-worker that runs on Slack, has a web chat interface at /chat, has its own email address, creates its own tools, and builds infrastructure without asking for permission. Don't take our word for it - scroll down to see what production Phantoms have actually built.
These are not mockups. They happened on production Phantom instances.
A Phantom was asked to help with data analysis. It installed ClickHouse on its own VM, downloaded the full Hacker News dataset, loaded 28.7 million rows spanning 2007-2021, built an analytics dashboard with interactive charts, and created a REST API to query the data. Then it registered that API as an MCP tool so it could use it in future sessions and other agents could query it too.
Nobody asked it to build any of this. It identified analytics as useful and built the entire stack.
28.7 million items. 755K unique authors. 4.3 million stories. Built, loaded, and served by a Phantom on its own machine.
Phantom ships with Slack, Telegram, Email, and Webhook channels. It does not ship with Discord. When asked "Can I talk to you on Discord?", the Phantom said: "Not right now. Discord isn't wired up. That said, I could build it."
It explained the Discord Bot API, walked the user through creating a Discord application, provided a magic link for secure token submission, and said: "Once you save it, I'll automatically spin up the container and you'll be live on Discord."
After submitting the token, Phantom went live on Discord. It permanently gained a communication channel it was never designed with.
The agent was honest about what it could not do, then built the capability on the spot.
A Phantom discovered Vigil, a lightweight open-source system monitor with 3 GitHub stars. It understood what Vigil does, integrated it into its existing ClickHouse instance, built a sync pipeline that batch-transfers metrics every 30 seconds, and created a real-time monitoring dashboard showing service health, Docker container status, network I/O, disk I/O, system load, and data pipeline health.
890,450 rows. 25 metrics. Auto-refreshing. The agent is watching its own infrastructure.
It found a 3-star open-source project, integrated it into its data pipeline, and built observability for itself.
This is what happens when you give an AI its own computer.
Phantom is not locked to any single AI backend. It ships with support for seven providers out of the box, configured through a single YAML block:
Switching providers is two lines of YAML:
# phantom.yaml
model: claude-opus-4-7
provider:
type: zai
api_key_env: ZAI_API_KEY
model_mappings:
sonnet: glm-5.1
Set ZAI_API_KEY in .env, restart, done. Both the main agent and every evolution judge flow through the chosen provider from that point on. The tools are the same, the memory is the same, the self-evolution pipeline is the same. Only the brain changes.
Anthropic stays the default. Existing deployments continue to work with no configuration changes. See docs/providers.md for the full reference.
curl -fsSL https://raw.githubusercontent.com/ghostwright/phantom/main/docker-compose.user.yaml -o docker-compose.yaml
curl -fsSL https://raw.githubusercontent.com/ghostwright/phantom/main/.env.example -o .env
# Edit .env - add your ANTHROPIC_API_KEY, Slack tokens, and OWNER_SLACK_USER_ID
docker compose up -d
Your Phantom is running. Qdrant starts for memory, Ollama pulls the embedding model, and the agent boots. Check health at http://localhost:3100/health. With Slack configured, it DMs you when it's ready. Add RESEND_API_KEY for email sending. See Getting Started for full setup.
Security note, Docker socket mount:
docker-compose.yamlmounts/var/run/docker.sockinto the Phantom container so it can spawn sibling containers (e.g. sandboxed code execution). This is an intentional architectural trade-off: the socket grants the container root-equivalent access to the Docker daemon, which means a compromised Phantom process could create, modify, or destroy any container on the host. Mitigations: run Phantom on a dedicated machine or VM (not your personal workstation), and do not expose the host's Docker socket to untrusted workloads. See docs/security.md for the full threat model.
Get a Phantom on a dedicated VM with nothing to install. Bring your Anthropic API key, we give you the machine.
Phantom is not just for engineers. It is for anyone who wants an AI that remembers, learns, and builds things you can actually share.
The key difference: when an AI runs on your laptop, everything it builds is trapped on localhost. Only you can see it. Phantom runs on a VM with a public domain. Dashboards, tools, pages, APIs - they all get a URL you can send to your team, your manager, or your clients. Your laptop is not a server. Phantom's VM is.
You don't need to install developer tools, learn a build system, or figure out hosting. You describe what you want in Slack. Phantom builds it, deploys it on its own machine, and gives you a link.
Most AI assistants run on your computer, share your resources, and forget everything between sessions. Phantom was designed around a different assumption: the agent should have its own workspace.
| Traditional (runs on your machine) | Phantom (its own machine) | |
|---|---|---|
| Your computer | Shared with the agent | Yours alone |
| Security | Agent can access your full filesystem | Isolated VM, you control what it sees |
| Credentials | Often stored in plain text config files | AES-256-GCM encrypted, collected via secure forms |
| Sharing | Trapped on localhost, nobody else can see it | Public URL with auth, share with anyone |
| Tools | Fixed set, defined at install time | Creates its own tools at runtime, persists them across restarts |
| Availability | Only when your machine is on | 24/7, runs in the cloud |
| Cost | Uses your CPU and memory | $7-20/month for a dedicated VM |
"Why does it need its own computer?"
Because you can have an 8GB laptop and give your agent 64GB of RAM for $20/month. Because it can install software, spin up databases, and run services without touching your machine. Because it is always on, even when your laptop is closed. Because everything it builds has a public URL - dashboards, APIs, pages, tools - that you share with a link. Your laptop cannot do that. It does not have a public IP. Phantom's VM does.
"Why does self-evolution matter?"
Because Day 1 Phantom is generic. Day 30 Phantom knows your codebase, your deploy process, your PR conventions, and the fact that your biggest client always asks about uptime before renewal. You never repeat yourself. The agent observes, reflects, proposes changes, validates them through a different model (to avoid self-enhancement bias), and evolves. Every version is stored. You can roll back.
"Why do dynamic tools matter?"
Because the agent that can only use pre-built tools hits a ceiling. Phantom builds what it needs. One Phantom built a send_slack_message tool, registered it, and retired its old workaround. That tool survives restarts. Other agents connecting via MCP can use it too.
| Feature | Why it matters |
|---|---|
| Its own computer | Your laptop stays yours. The agent installs software, runs 24/7, and builds infrastructure on its own machine. |
| Bring your own model | Anthropic, Z.AI (GLM-5.1), OpenRouter, Ollama, vLLM, LiteLLM, or any Anthropic Messages API compatible endpoint. Pick your backend in YAML, same agent everywhere. |
| Self-evolution | The agent rewrites its own config after every session, validated by LLM judges. Day 30 knows things Day 1 didn't. |
| Persistent memory | Three tiers of vector memory. Mention something on Monday, it uses it on Wednesday. No re-explaining. |
| Dynamic tools | Creates and registers its own MCP tools at runtime. Tools survive restarts and work across sessions. |
| Encrypted secrets | AES-256-GCM encrypted forms with magic-link auth. No plain-text credentials in config files. |
| Email identity | Every Phantom has its own email address. Send reports to people outside your Slack workspace. |
| Web chat | A full browser-based chat client at /chat with SSE streaming, file attachments, and Web Push notifications. No Slack required. |
| Shareable pages | Generates dashboards and tools on a public URL with auth. Share a link, anyone can see it. |
| MCP server | Claude Code connects to your Phantom. Other Phantoms connect to your Phantom. It is an API, not a dead end. |
External Clients
Claude Code | Dashboard | Other Phantoms
|
MCP (Streamable HTTP)
|
+------------------------------------------+
| PHANTOM (Bun process) |
| |
| Channels Agent Runtime |
| Slack query() + hooks |
| Web Chat Prompt Assembler |
| Telegram base + role + evolved |
| Email + memory context |
| Webhook / CLI |
| |
| Memory System Self-Evolution Engine |
| Qdrant 6-step pipeline |
| Ollama 5-gate validation |
| 3 collections LLM judges (optional) |
| |
| MCP Server Role System |
| 8 universal YAML-first roles |
| + role tools Onboarding flow |
| + dynamic Evolution focus |
+------------------------------------------+
| |
+---------+ +---------+
| Qdrant | | SQLite |
| Docker | | Bun |
+---------+ +---------+
First, generate a token. The command outputs a bearer token. Save it for the next step.
Bare metal:
bun run phantom token create --client claude-code --scope operator
Docker:
docker exec phantom bun run phantom token create --client claude-code --scope operator
Or just ask your Phantom in Slack: "Create an MCP token for Claude Code." It will generate the token and give you the config snippet.
Then use the token to connect. Replace YOUR_TOKEN below with the token from the command above. For local instances, use http://localhost:3100/mcp instead of the ghostwright.dev URL.
Add via the CLI:
claude mcp add phantom https://your-phantom.ghostwright.dev/mcp \
--transport http \
--header "Authorization: Bearer YOUR_TOKEN"
Or add directly to your project's .mcp.json:
{
"mcpServers": {
"phantom": {
"type": "http",
"url": "https://your-phantom.ghostwright.dev/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
Claude Desktop only supports stdio transport, so you need mcp-remote to bridge the connection.
Add this to your claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"phantom": {
"command": "npx",
"args": [
"mcp-remote",
"https://your-phantom.ghostwright.dev/mcp",
"--header",
"Authorization: Bearer YOUR_TOKEN"
]
}
}
}
Restart Claude Desktop after saving. The first connection may take a moment while mcp-remote is downloaded.
Once connected, Claude can query your Phantom's memory, ask it questions, check status, and use any dynamic tools the agent has built.
The core differentiator. After every session:
Safety-critical gates use Sonnet as the default cross-model judge (main runs on Opus, so judges run on Sonnet to avoid self-enhancement bias). Operators may opt into Opus judges explicitly for deeper reasoning at higher cost. Triple-judge voting with minority veto: one dissenting judge blocks the change. Every version is stored. You can diff day 1 and day 30. You can roll back.
Phantom is the fourth product in the Ghostwright family:
git clone https://github.com/ghostwright/phantom.git
cd phantom
bun install
# Start vector DB and embedding model
docker compose up -d qdrant ollama
docker exec phantom-ollama ollama pull nomic-embed-text
# Initialize config
bun run phantom init --yes
# Set your API key
export ANTHROPIC_API_KEY=sk-ant-...
# Start
bun run phantom start
bun test # 1584 tests
bun run lint # Biome
bun run typecheck # tsc --noEmit
See docs/getting-started.md for detailed Slack setup, .env configuration, VM deployment, and troubleshooting.
We need help with new role templates, channel integrations, memory strategies, and testing across environments. If you are building AI agents that learn and improve, this is the project.
See CONTRIBUTING.md for guidelines.
Apache 2.0. Use it, modify it, deploy it, build on it. See LICENSE.
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Secure MCP server for MySQL database interaction, queries, and schema management
English-first Korean equity intelligence MCP — DART filings, foreign-holder 5%-rule flows, activist filings, KRX news. F