Skip to content

A sidecar for Hermes

Aphrodite

she stands at the gate.

A little server you run yourself. It proves every Discord request is genuine, hands it to the right tool, and never touches your main app.

aphrodite · zsh
$ uvicorn aphrodite.app:create_app --factory --host 127.0.0.1 --port 9079
INFO:     Uvicorn running on http://127.0.0.1:9079
$ curl -fsS http://127.0.0.1:9079/health
{"status": "ok"}

Built with

FastAPI Uvicorn PyNaCl Discord MCP Python 3.10+

Why you'd want it

You built the cool part. This is the rest.

Putting your own tool on Discord means real backend plumbing: proving requests are genuine, sending them to the right place, keeping strangers out, and knowing it still works. Get one piece wrong and anyone can poke your bot. Aphrodite is all of that, already done right, so you can stay on the fun part.

Doing it yourself

A weekend of plumbing.

  • Verify Discord's signatures yourself, and hope the crypto is right.
  • Wire up routing for every button and slash command.
  • Lock things down so strangers can't trigger your bot.
  • Write your own health and status checks.
  • Babysit a server you'd rather not think about.

With Aphrodite

One command, done.

  • One command and you're safely live.
  • Every request is checked before anything runs.
  • Each click already goes to the right tool.
  • Health checks tell you it works before you ship.
  • It stays on your machine and never touches your app.
Get started

How it connects

Where it fits

Hermes uses Aphrodite, not the other way around. You talk to Hermes; it hands the gnarly parts — checking Discord, routing, tools — to Aphrodite, and Aphrodite hands the results straight back. It runs as a separate sidecar, so your Hermes code never changes.

You
01 — caller
Hermes
02 — your agent
uses
answers
Aphrodite sidecar hub
03 — the hub

Aphrodite handles Discord · routing · tools · health

A separate sidecar — it never changes your Hermes files.

Features

What it does for you

Three small jobs, each one easy to follow. No mystery backend, no surprises.

01 Verify

Only real Discord requests get in

Every incoming request is signature-checked, so strangers can't trigger your bot. There's also a no-signature test mode for trying things out on your own machine.

02 Route

Sends each click to the right tool

Tap a button or run a command and Aphrodite works out which of your tools should handle it, then sends it there, with no tangled if-statements to maintain.

03 Health

Tells you it's healthy before you go live

Simple health and status checks, plus a doctor command that flags anything missing, so launching is boring, in the good way.

Modules

Batteries included, and yours to extend

Aphrodite ships with a small native set of tools. Adding your own is one command and a name — no forking, no patching the core.

image_gen

Make images on demand

Generate pictures from a prompt — through one dispatch call or the /image/generate route. It plugs into your assistant's sign-in for the image model, so there's no extra key to manage.

Bundled · on by default

skillopt

Tune and review your skills

Kick off optimization runs, compare diffs, score evaluations, and read it all back in a built-in review page. Self-contained — it only needs a little local storage.

Bundled · on by default

acp_relay

Hold a real conversation

Bridges a multi-turn chat to an external agent and remembers the thread between turns, so each message just adds to the conversation instead of starting over.

Bundled · on by default

Bring your own

Build a module in minutes

One command scaffolds a ready-to-edit package. Aphrodite finds it through a standard entry point, so you just list its name in APHRODITE_MODULES and it's live. Every module answers calls shaped system:v1:action, and an unknown name gets a safe placeholder instead of crashing startup.

Read the module guide
aphrodite · zsh
$ aphrodite new-module my_module$ pip install -e my_module$ export APHRODITE_MODULES=my_module$ aphrodite modules$ aphrodite dispatch-test my_module:v1:ping

Install

Clone it, run it locally.

If you can paste a line into a terminal, you can run it. All you need is Python 3.10+. It pulls in everything else.

From GitHub
$ pip install "git+https://github.com/<org>/aphrodite"$ pip install "aphrodite-sidecar[mcp,acp] @ git+https://github.com/<org>/aphrodite"
From a clone
$ git clone https://github.com/<org>/aphrodite && cd aphrodite$ python -m venv .venv && . .venv/bin/activate$ pip install .$ pip install -e ".[dev]"
Quickstart
$ uvicorn aphrodite.app:create_app --factory --host 127.0.0.1 --port 9079$ curl -fsS http://127.0.0.1:9079/health$ curl -fsS http://127.0.0.1:9079/status

MCP

Use it inside your AI assistant.

Turn on the optional MCP server and Aphrodite hands your tools to AI assistants like Claude. Install the mcp extra, point your assistant at it, and everything stays on your machine and easy to inspect.

Install and run
$ pip install "aphrodite-sidecar[mcp] @ git+https://github.com/<org>/aphrodite"$ python -m aphrodite.mcp_server
Client config
{
  "mcpServers": {
    "aphrodite": {
      "command": "/path/to/.venv/bin/python",
      "args": ["-m", "aphrodite.mcp_server"]
    }
  }
}
Runs on your machine · Open source · MIT

Make it
yours.

Your main app stays untouched, you stay in control, and it all runs on a machine you trust.

Aphrodite mascot inviting you to run the sidecar on your own machine