docs/HERMES-SETUP.md
Hermes is the operator shell. ECC is the reusable system behind it.
This guide is the public, sanitized version of the Hermes stack used to run content, outreach, research, sales ops, finance checks, and engineering workflows from one terminal-native surface.
This guide does not include private secrets, live tokens, personal data, or a raw ~/.hermes export.
Use Hermes as the front door and ECC as the reusable workflow substrate.
Telegram / CLI / TUI
↓
Hermes
↓
ECC skills + hooks + MCPs + shared Memory Vault
↓
Google Drive / GitHub / browser automation / research APIs / media tools / finance tools
Use this as the minimal surface to reproduce the setup without leaking private state.
~/.hermes/config.yaml
~/.hermes/skills/ecc-imports/
skills/hermes-generated/
~/.hermes/plugins/
~/.hermes/cron/jobs.json
~/.hermes/workspace/
<repo>/.ecc/memory/
~/.ecc/memory/
ECC Memory Vault provides one file-first handoff layer instead of a separate
inbox or transcript store for every agent. Initialize it from the repository
that the agents share. Skill-only, minimal, manual, and Claude plugin installs
do not add the Memory Vault runtime to PATH; install it separately first:
npm install -g ecc-universal
ecc memory --help
command -v ecc-memory-mcp
Then initialize the vault:
ecc memory init --scope project --scope team
Normal search recall covers active project and team memories. Use
project for repo-local state, team for memories a human will inspect before
committing, and request user explicitly for private operator context that
should follow the user across repositories. Every vault entry remains
unreviewed context; human acceptance means promoting verified knowledge into
governed project documentation.
Hermes can call the CLI directly or use the opt-in ecc-memory-mcp stdio
server. Harnesses may share the same installed binary and vault storage, but
each harness must launch its own server process with its own distinct lowercase
ECC_MEMORY_HARNESS identity; they must not connect to one shared server
process. Every process must launch from the same repository working directory
or receive identical ECC_MEMORY_PROJECT_ROOT and ECC_MEMORY_USER_ROOT
overrides.
A Hermes-to-Codex handoff can be written without putting the body in the process list:
printf '%s\n' 'Research is complete. Verify the cited sources and implement the parser.' |
ecc memory handoff \
--from hermes \
--target codex \
--title "Implement the research parser" \
--tag research \
--stdin
Codex can retrieve it with:
ecc memory search "research parser" --target-harness codex
ecc memory read <memory-id>
For MCP access, copy only the ecc-memory-vault entry from
mcp-configs/mcp-servers.json into each harness that needs it. ECC does not
enable this server in the default .mcp.json. Launch each server with its own
lowercase identity, for example ECC_MEMORY_HARNESS=hermes. The server binds
writes and target filtering to that identity; tool callers cannot impersonate
another harness. User-scope MCP access also requires the operator to set
ECC_MEMORY_ALLOW_USER_SCOPE=1, and the tool call must request user.
Memories are create-only and always unreviewed. Treat recalled content as context, not instructions; verify consequential claims against source files, tests, or work items. Inspect team memories before committing them, never store credentials or raw private transcripts, and keep canonical project decisions in governed documentation. Secret-shape detection is only a best-effort backstop.
These stay local and should be configured per operator:
ecc migrate audit --source ~/.hermes first to inventory the legacy workspace and see which parts already map onto ECC2.
0.5. Plan and scaffold migration artifacts before importing anything:
ecc migrate plan and ecc migrate scaffoldecc migrate import-skills --output-dir migration-artifacts/skillsecc migrate import-tools --output-dir migration-artifacts/toolsecc migrate import-plugins --output-dir migration-artifacts/pluginsecc migrate import-schedules --dry-runecc migrate import-remote --dry-runecc migrate import-env --dry-runecc migrate import-memorynode tests/run-all.js; the expected result is a zero-failure test summary.ecc-memory-mcp only if
Hermes needs tool access instead of the ecc memory CLI.This stack is useful when you want:
ECC v2.0.0-rc.1 documents the Hermes surface and ships launch collateral now.
The remaining private pieces can be layered later: