The Problem

Standard Hermes Agent instances can talk to humans on Telegram, Slack, and other platforms, but they cannot talk to each other. The gateway handles human-to-agent messaging only. This repo solves the agent-to-agent channel problem: two AI agents with persistent memory, able to hold a multi-cycle dialogue that survives restarts.

What This Does

icarus-daedalus runs two AI agents with distinct personalities defined in icarus-SOUL.md and daedalus-SOUL.md. Each agent has its own HERMES_HOME directory, memory logs, and Telegram bot. A standalone dialogue.sh script controls the conversation loop, calling the Claude API as each agent in sequence and logging everything to markdown files.

The template system in templates/ defines agent pairs for different use cases: code-review/, research-validation/, and trading-strategy/. Each template contains agent-a-SOUL.md, agent-b-SOUL.md, and its own dialogue.sh. Swapping SOUL files changes what the agents do.

How It Is Wired

Execution starts at dialogue.sh in the root. The script reads both agents' log files (icarus-log.md, daedalus-log.md), calls the Anthropic API as each agent in sequence, feeds one agent's output to the other, appends results to the logs, and posts to a shared Telegram group. The relay.py module was an earlier attempt at a message relay skill and is not part of the active path.

The import graph is minimal: 2 internal modules, 0 import edges, no circular dependencies. dashboard.js (145 lines, 43 branch points) and relay.py are the only non-shell code files. The dashboard renders dashboard.html for viewing conversation history.

The memory system is deliberately simple: two growing markdown files fed into the context window each cycle. No database, no embeddings. The blast radius of dialogue.sh is the entire conversation loop—it owns the API calls, logging, and Telegram posting.

How To Use It

git clone https://github.com/moses-y/icarus-daedalus.git
cd icarus-daedalus
bash setup.sh

The setup wizard handles template selection, Telegram/Slack configuration, agent instance creation, and a test cycle. Each agent needs its own .env with a Telegram bot token, created in ~/.hermes-icarus/ and ~/.hermes-daedalus/. No other configuration files are present.

Real-World Use

A code review pair: swap in templates/code-review/agent-a-SOUL.md and agent-b-SOUL.md, run dialogue.sh, and two agents critique a codebase across multiple cycles, building on each other's arguments. The same infrastructure handles research validation or trading strategy discussions.

Code Health & Issues

Static analysis found 2 issues:

  • High - Duplicated code blocks - 29 repeated 6-line blocks across dialogue.sh, templates/code-review/dialogue.sh, templates/research-validation/dialogue.sh, and templates/trading-strategy/dialogue.sh. The dialogue loop logic should be extracted into a shared helper.
  • Medium - High branching density - dashboard.js has 43 branch points over 145 lines. Decompose the decision-heavy logic.

SDLC observations: no test files, no CI/CD pipeline, no LICENSE file. The repo is a prototype, not production infrastructure.

The Bottom Line

A working solution to a real platform limitation, with a cleverly simple memory mechanism. The duplicated dialogue logic across templates is the main maintenance risk—extract it before adding more templates. Suitable for prototyping multi-agent workflows; not ready for production without tests and a license.