Some checks failed
Forge CI / smoke-and-build (pull_request) Failing after 24s
Full feature census of hermes-agent codebase covering: - Feature Matrix (memory, tools, sessions, plugins, config, gateway) - Architecture Overview (dependency chain, data flow) - Recent Development Activity (last 30 days, 1750+ commits) - Overlap Analysis (what to use vs what to build) - Contribution Roadmap (upstream vs Timmy Foundation) Refs: #290
31 KiB
31 KiB
Hermes Agent — Feature Census
Epic: #290 — Know Thy Agent: Hermes Feature Census Date: 2026-04-11 Source: Timmy_Foundation/hermes-agent (fork of NousResearch/hermes-agent) Upstream: NousResearch/hermes-agent (last sync: 2026-04-07, 499 commits merged in PR #201) Codebase: ~200K lines Python (335 source files), 470 test files
1. Feature Matrix
1.1 Memory System
| Feature | Status | File:Line | Notes |
|---|---|---|---|
add action |
✅ Exists | tools/memory_tool.py:457 |
Append entry to MEMORY.md or USER.md |
replace action |
✅ Exists | tools/memory_tool.py:466 |
Find by substring, replace content |
remove action |
✅ Exists | tools/memory_tool.py:475 |
Find by substring, delete entry |
| Dual stores (memory + user) | ✅ Exists | tools/memory_tool.py:43-45 |
MEMORY.md (2200 char limit) + USER.md (1375 char limit) |
| Entry deduplication | ✅ Exists | tools/memory_tool.py:128-129 |
Exact-match dedup on load |
| Injection/exfiltration scanning | ✅ Exists | tools/memory_tool.py:85 |
Blocks prompt injection, role hijacking, secret exfil |
| Frozen snapshot pattern | ✅ Exists | tools/memory_tool.py:119-135 |
Preserves LLM prefix cache across session |
| Atomic writes | ✅ Exists | tools/memory_tool.py:417-436 |
tempfile.mkstemp + os.replace |
| File locking (fcntl) | ✅ Exists | tools/memory_tool.py:137-153 |
Exclusive lock for concurrent safety |
| External provider plugin | ✅ Exists | agent/memory_manager.py |
Supports 1 external provider (Honcho, Mem0, Hindsight, etc.) |
| Provider lifecycle hooks | ✅ Exists | agent/memory_provider.py:55-66 |
on_memory_write, prefetch, sync_turn, on_session_end, on_pre_compress, on_delegation |
| Session search (past conversations) | ✅ Exists | tools/session_search_tool.py:492 |
FTS5 search across SQLite message store |
| Holographic memory | 🔌 Plugin slot | Config memory.provider |
Accepted as external provider name, not built-in |
| Engram integration | ❌ Not present | — | Not in codebase; Engram is a Timmy Foundation project |
| Trust system | ❌ Not present | — | No trust scoring on memory entries |
1.2 Tool System
| Feature | Status | File:Line | Notes |
|---|---|---|---|
| Central registry | ✅ Exists | tools/registry.py:290 |
Module-level singleton, all tools self-register |
| 47 static tools | ✅ Exists | See full list below | Organized in 21+ toolsets |
| Dynamic MCP tools | ✅ Exists | tools/mcp_tool.py |
Runtime registration from MCP servers (17 in live instance) |
| Tool approval system | ✅ Exists | tools/approval.py |
Manual/smart/off modes, dangerous command detection |
| Toolset composition | ✅ Exists | toolsets.py:404 |
Composite toolsets (e.g., debugging = terminal + web + file) |
| Per-platform toolsets | ✅ Exists | toolsets.py |
hermes-cli, hermes-telegram, hermes-discord, etc. |
| Skill management | ✅ Exists | tools/skill_manager_tool.py:747 |
Create, patch, delete skill documents |
| Mixture of Agents | ✅ Exists | tools/mixture_of_agents_tool.py:553 |
Route through 4+ frontier LLMs |
| Subagent delegation | ✅ Exists | tools/delegate_tool.py:963 |
Isolated contexts, up to 3 parallel |
| Code execution sandbox | ✅ Exists | tools/code_execution_tool.py:1360 |
Python scripts with tool access |
| Image generation | ✅ Exists | tools/image_generation_tool.py:694 |
FLUX 2 Pro |
| Vision analysis | ✅ Exists | tools/vision_tools.py:606 |
Multi-provider vision |
| Text-to-speech | ✅ Exists | tools/tts_tool.py:974 |
Edge TTS, ElevenLabs, OpenAI, NeuTTS |
| Speech-to-text | ✅ Exists | Config stt.* |
Local Whisper, Groq, OpenAI, Mistral Voxtral |
| Home Assistant | ✅ Exists | tools/homeassistant_tool.py:456-483 |
4 HA tools (list, state, services, call) |
| RL training | ✅ Exists | tools/rl_training_tool.py:1376-1394 |
10 Tinker-Atropos tools |
| Browser automation | ✅ Exists | tools/browser_tool.py:2137-2211 |
10 tools (navigate, click, type, scroll, screenshot, etc.) |
| Gitea client | ✅ Exists | tools/gitea_client.py |
Gitea API integration |
| Cron job management | ✅ Exists | tools/cronjob_tools.py:508 |
Scheduled task CRUD |
| Send message | ✅ Exists | tools/send_message_tool.py:1036 |
Cross-platform messaging |
Complete Tool List (47 static)
| # | Tool | Toolset | File:Line |
|---|---|---|---|
| 1 | read_file |
file | tools/file_tools.py:832 |
| 2 | write_file |
file | tools/file_tools.py:833 |
| 3 | patch |
file | tools/file_tools.py:834 |
| 4 | search_files |
file | tools/file_tools.py:835 |
| 5 | terminal |
terminal | tools/terminal_tool.py:1783 |
| 6 | process |
terminal | tools/process_registry.py:1039 |
| 7 | web_search |
web | tools/web_tools.py:2082 |
| 8 | web_extract |
web | tools/web_tools.py:2092 |
| 9 | vision_analyze |
vision | tools/vision_tools.py:606 |
| 10 | image_generate |
image_gen | tools/image_generation_tool.py:694 |
| 11 | text_to_speech |
tts | tools/tts_tool.py:974 |
| 12 | skills_list |
skills | tools/skills_tool.py:1357 |
| 13 | skill_view |
skills | tools/skills_tool.py:1367 |
| 14 | skill_manage |
skills | tools/skill_manager_tool.py:747 |
| 15 | browser_navigate |
browser | tools/browser_tool.py:2137 |
| 16 | browser_snapshot |
browser | tools/browser_tool.py:2145 |
| 17 | browser_click |
browser | tools/browser_tool.py:2154 |
| 18 | browser_type |
browser | tools/browser_tool.py:2162 |
| 19 | browser_scroll |
browser | tools/browser_tool.py:2170 |
| 20 | browser_back |
browser | tools/browser_tool.py:2178 |
| 21 | browser_press |
browser | tools/browser_tool.py:2186 |
| 22 | browser_get_images |
browser | tools/browser_tool.py:2195 |
| 23 | browser_vision |
browser | tools/browser_tool.py:2203 |
| 24 | browser_console |
browser | tools/browser_tool.py:2211 |
| 25 | todo |
todo | tools/todo_tool.py:260 |
| 26 | memory |
memory | tools/memory_tool.py:544 |
| 27 | session_search |
session_search | tools/session_search_tool.py:492 |
| 28 | clarify |
clarify | tools/clarify_tool.py:131 |
| 29 | execute_code |
code_execution | tools/code_execution_tool.py:1360 |
| 30 | delegate_task |
delegation | tools/delegate_tool.py:963 |
| 31 | cronjob |
cronjob | tools/cronjob_tools.py:508 |
| 32 | send_message |
messaging | tools/send_message_tool.py:1036 |
| 33 | mixture_of_agents |
moa | tools/mixture_of_agents_tool.py:553 |
| 34 | ha_list_entities |
homeassistant | tools/homeassistant_tool.py:456 |
| 35 | ha_get_state |
homeassistant | tools/homeassistant_tool.py:465 |
| 36 | ha_list_services |
homeassistant | tools/homeassistant_tool.py:474 |
| 37 | ha_call_service |
homeassistant | tools/homeassistant_tool.py:483 |
| 38-47 | rl_* (10 tools) |
rl | tools/rl_training_tool.py:1376-1394 |
1.3 Session System
| Feature | Status | File:Line | Notes |
|---|---|---|---|
| Session creation | ✅ Exists | gateway/session.py:676 |
get_or_create_session with auto-reset |
| Session keying | ✅ Exists | gateway/session.py:429 |
platform:chat_type:chat_id[:thread_id][:user_id] |
| Reset policies | ✅ Exists | gateway/session.py:610 |
none / idle / daily / both |
| Session switching (/resume) | ✅ Exists | gateway/session.py:825 |
Point key at a previous session ID |
| Session branching (/branch) | ✅ Exists | CLI commands.py | Fork conversation history |
| SQLite persistence | ✅ Exists | hermes_state.py:41-94 |
sessions + messages + FTS5 search |
| JSONL dual-write | ✅ Exists | gateway/session.py:891 |
Backward compatibility with legacy format |
| WAL mode concurrency | ✅ Exists | hermes_state.py:157 |
Concurrent read/write with retry |
| Context compression | ✅ Exists | Config compression.* |
Auto-compress when context exceeds ratio |
| Memory flush on reset | ✅ Exists | gateway/run.py:632 |
Reviews old transcript before auto-reset |
| Token/cost tracking | ✅ Exists | hermes_state.py:41 |
input, output, cache_read, cache_write, reasoning tokens |
| PII redaction | ✅ Exists | Config privacy.redact_pii |
Hash user IDs, strip phone numbers |
1.4 Plugin System
| Feature | Status | File:Line | Notes |
|---|---|---|---|
| Plugin discovery | ✅ Exists | hermes_cli/plugins.py:5-11 |
User (~/.hermes/plugins/), project, pip entry-points |
| Plugin manifest (plugin.yaml) | ✅ Exists | hermes_cli/plugins.py |
name, version, requires_env, provides_tools, provides_hooks |
| Lifecycle hooks | ✅ Exists | hermes_cli/plugins.py:55-66 |
9 hooks (pre/post tool_call, llm_call, api_request; on_session_start/end/finalize/reset) |
| PluginContext API | ✅ Exists | hermes_cli/plugins.py:124-233 |
register_tool, inject_message, register_cli_command, register_hook |
| Plugin management CLI | ✅ Exists | hermes_cli/plugins_cmd.py:1-690 |
install, update, remove, enable, disable |
| Project plugins (opt-in) | ✅ Exists | hermes_cli/plugins.py |
Requires HERMES_ENABLE_PROJECT_PLUGINS env var |
| Pip plugins | ✅ Exists | hermes_cli/plugins.py |
Entry-point group: hermes_agent.plugins |
1.5 Config System
| Feature | Status | File:Line | Notes |
|---|---|---|---|
| YAML config | ✅ Exists | hermes_cli/config.py:259-619 |
~120 config keys across 25 sections |
| Schema versioning | ✅ Exists | hermes_cli/config.py |
_config_version: 14 with migration support |
| Provider config | ✅ Exists | Config providers.*, fallback_providers |
Per-provider overrides, fallback chains |
| Credential pooling | ✅ Exists | Config credential_pool_strategies |
Key rotation strategies |
| Auxiliary model config | ✅ Exists | Config auxiliary.* |
8 separate side-task models (vision, compression, etc.) |
| Smart model routing | ✅ Exists | Config smart_model_routing.* |
Route simple prompts to cheap model |
| Env var management | ✅ Exists | hermes_cli/config.py:643-1318 |
~80 env vars across provider/tool/messaging/setting categories |
| Interactive setup wizard | ✅ Exists | hermes_cli/setup.py |
Guided first-run configuration |
| Config migration | ✅ Exists | hermes_cli/config.py |
Auto-migrates old config versions |
1.6 Gateway
| Feature | Status | File:Line | Notes |
|---|---|---|---|
| 18 platform adapters | ✅ Exists | gateway/platforms/ |
Telegram, Discord, Slack, WhatsApp, Signal, Mattermost, Matrix, HomeAssistant, Email, SMS, DingTalk, API Server, Webhook, Feishu, Wecom, Weixin, BlueBubbles |
| Message queuing | ✅ Exists | gateway/run.py:507 |
Queue during agent processing, media placeholder support |
| Agent caching | ✅ Exists | gateway/run.py:515 |
Preserve AIAgent instances per session for prompt caching |
| Background reconnection | ✅ Exists | gateway/run.py:527 |
Exponential backoff for failed platforms |
| Authorization | ✅ Exists | gateway/run.py:1826 |
Per-user allowlists, DM pairing codes |
| Slash command interception | ✅ Exists | gateway/run.py |
Commands handled before agent (not billed) |
| ACP server | ✅ Exists | acp_adapter/server.py:726 |
VS Code / Zed / JetBrains integration |
| Cron scheduler | ✅ Exists | cron/scheduler.py:850 |
Full job scheduler with cron expressions |
| Batch runner | ✅ Exists | batch_runner.py:1285 |
Parallel batch processing |
| API server | ✅ Exists | gateway/platforms/api_server.py |
OpenAI-compatible HTTP API |
1.7 Providers (20 supported)
| Provider | ID | Key Env Var |
|---|---|---|
| Nous Portal | nous |
NOUS_BASE_URL |
| OpenRouter | openrouter |
OPENROUTER_API_KEY |
| Anthropic | anthropic |
(standard) |
| Google AI Studio | gemini |
GOOGLE_API_KEY, GEMINI_API_KEY |
| OpenAI Codex | openai-codex |
(standard) |
| GitHub Copilot | copilot / copilot-acp |
(OAuth) |
| DeepSeek | deepseek |
DEEPSEEK_API_KEY |
| Kimi / Moonshot | kimi-coding |
KIMI_API_KEY |
| Z.AI / GLM | zai |
GLM_API_KEY, ZAI_API_KEY |
| MiniMax | minimax |
MINIMAX_API_KEY |
| MiniMax (China) | minimax-cn |
MINIMAX_CN_API_KEY |
| Alibaba / DashScope | alibaba |
DASHSCOPE_API_KEY |
| Hugging Face | huggingface |
HF_TOKEN |
| OpenCode Zen | opencode-zen |
OPENCODE_ZEN_API_KEY |
| OpenCode Go | opencode-go |
OPENCODE_GO_API_KEY |
| Qwen OAuth | qwen-oauth |
(Portal) |
| AI Gateway | ai-gateway |
(Nous) |
| Kilo Code | kilocode |
(standard) |
| Ollama (local) | — | First-class via auxiliary wiring |
| Custom endpoint | custom |
user-provided URL |
1.8 UI / UX
| Feature | Status | File:Line | Notes |
|---|---|---|---|
| Skin/theme engine | ✅ Exists | hermes_cli/skin_engine.py |
7 built-in skins, user YAML skins |
| Kawaii spinner | ✅ Exists | agent/display.py |
Animated faces, configurable verbs/wings |
| Rich banner | ✅ Exists | banner.py |
Logo, hero art, system info |
| Prompt_toolkit input | ✅ Exists | cli.py |
Autocomplete, history, syntax |
| Streaming output | ✅ Exists | Config display.streaming |
Optional streaming |
| Reasoning display | ✅ Exists | Config display.show_reasoning |
Show/hide chain-of-thought |
| Cost display | ✅ Exists | Config display.show_cost |
Show $ in status bar |
| Voice mode | ✅ Exists | Config voice.* |
Ctrl+B record, auto-TTS, silence detection |
| Human delay simulation | ✅ Exists | Config human_delay.* |
Simulated typing delay |
1.9 Security
| Feature | Status | File:Line | Notes |
|---|---|---|---|
| Tirith security scanning | ✅ Exists | tools/tirith_security.py |
Pre-exec code scanning |
| Secret redaction | ✅ Exists | Config security.redact_secrets |
Auto-strip secrets from output |
| Memory injection scanning | ✅ Exists | tools/memory_tool.py:85 |
Blocks prompt injection in memory |
| URL safety | ✅ Exists | tools/url_safety.py |
URL reputation checking |
| Command approval | ✅ Exists | tools/approval.py |
Manual/smart/off modes |
| OSV vulnerability check | ✅ Exists | tools/osv_check.py |
Open Source Vulnerabilities DB |
| Conscience validator | ✅ Exists | tools/conscience_validator.py |
SOUL.md alignment checking |
| Shield detector | ✅ Exists | tools/shield/detector.py |
Jailbreak/crisis detection |
2. Architecture Overview
┌─────────────────────────────────────────────────────────┐
│ Entry Points │
├──────────┬──────────┬──────────┬──────────┬─────────────┤
│ CLI │ Gateway │ ACP │ Cron │ Batch Runner│
│ cli.py │gateway/ │acp_apt/ │ cron/ │batch_runner │
│ 8620 ln │ run.py │server.py │sched.py │ 1285 ln │
│ │ 7905 ln │ 726 ln │ 850 ln │ │
└────┬─────┴────┬─────┴──────────┴──────┬───┴─────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────┐
│ AIAgent (run_agent.py, 9423 ln) │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Core Conversation Loop │ │
│ │ while iterations < max: │ │
│ │ response = client.chat(tools, messages) │ │
│ │ if tool_calls: handle_function_call() │ │
│ │ else: return response │ │
│ └──────────────────────┬───────────────────────────┘ │
│ │ │
│ ┌──────────────────────▼───────────────────────────┐ │
│ │ model_tools.py (577 ln) │ │
│ │ _discover_tools() → handle_function_call() │ │
│ └──────────────────────┬───────────────────────────┘ │
└─────────────────────────┼───────────────────────────────┘
│
┌────────────────────▼────────────────────┐
│ tools/registry.py (singleton) │
│ ToolRegistry.register() → dispatch() │
└────────────────────┬────────────────────┘
│
┌─────────┬───────────┼───────────┬────────────────┐
▼ ▼ ▼ ▼ ▼
┌────────┐┌────────┐┌──────────┐┌──────────┐ ┌──────────┐
│ file ││terminal││ web ││ browser │ │ memory │
│ tools ││ tool ││ tools ││ tool │ │ tool │
│ 4 tools││2 tools ││ 2 tools ││ 10 tools │ │ 3 actions│
└────────┘└────────┘└──────────┘└──────────┘ └────┬─────┘
│
┌──────────▼──────────┐
│ agent/memory_manager │
│ ┌──────────────────┐│
│ │BuiltinProvider ││
│ │(MEMORY.md+USER.md)│
│ ├──────────────────┤│
│ │External Provider ││
│ │(optional, 1 max) ││
│ └──────────────────┘│
└─────────────────────┘
┌─────────────────────────────────────────────────┐
│ Session Layer │
│ SessionStore (gateway/session.py, 1030 ln) │
│ SessionDB (hermes_state.py, 1238 ln) │
│ ┌───────────┐ ┌─────────────────────────────┐ │
│ │sessions.js│ │ state.db (SQLite + FTS5) │ │
│ │ JSONL │ │ sessions │ messages │ fts │ │
│ └───────────┘ └─────────────────────────────┘ │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Gateway Platform Adapters │
│ telegram │ discord │ slack │ whatsapp │ signal │
│ matrix │ email │ sms │ mattermost│ api │
│ homeassistant │ dingtalk │ feishu │ wecom │ ... │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Plugin System │
│ User ~/.hermes/plugins/ │ Project .hermes/ │
│ Pip entry-points (hermes_agent.plugins) │
│ 9 lifecycle hooks │ PluginContext API │
└─────────────────────────────────────────────────┘
Key dependency chain:
tools/registry.py (no deps — imported by all tool files)
↑
tools/*.py (each calls registry.register() at import time)
↑
model_tools.py (imports tools/registry + triggers tool discovery)
↑
run_agent.py, cli.py, batch_runner.py, environments/
3. Recent Development Activity (Last 30 Days)
Activity Summary
| Metric | Value |
|---|---|
| Total commits (since 2026-03-12) | ~1,750 |
| Top contributor | Teknium (1,169 commits) |
| Timmy Foundation commits | ~55 (Alexander Whitestone: 21, Timmy Time: 22, Bezalel: 12) |
| Key upstream sync | PR #201 — 499 commits from NousResearch/hermes-agent (2026-04-07) |
Top Contributors (Last 30 Days)
| Contributor | Commits | Focus Area |
|---|---|---|
| Teknium | 1,169 | Core features, bug fixes, streaming, browser, Telegram/Discord |
| teknium1 | 238 | Supplementary work |
| 0xbyt4 | 117 | Various |
| Test | 61 | Testing |
| Allegro | 49 | Fleet ops, CI |
| kshitijk4poor | 30 | Features |
| SHL0MS | 25 | Features |
| Google AI Agent | 23 | MemPalace plugin |
| Timmy Time | 22 | CI, fleet config, merge coordination |
| Alexander Whitestone | 21 | Memory fixes, browser PoC, docs, CI, provider config |
| Bezalel | 12 | CI pipeline, devkit, health checks |
Key Upstream Changes (Merged in Last 30 Days)
| Change | PR | Impact |
|---|---|---|
| Browser provider switch (Browserbase → Browser Use) | upstream #5750 | Breaking change in browser tooling |
| notify_on_complete for background processes | upstream #5779 | New feature for async workflows |
| Interactive model picker (Telegram + Discord) | upstream #5742 | UX improvement |
| Streaming fix after tool boundaries | upstream #5739 | Bug fix |
| Delegate: share credential pools with subagents | upstream | Security improvement |
| Permanent command allowlist on startup | upstream #5076 | Bug fix |
| Paginated model picker for Telegram | upstream | UX improvement |
| Slack thread replies without @mentions | upstream | Gateway improvement |
| Supermemory memory provider (added then removed) | upstream | Experimental, rolled back |
| Background process management overhaul | upstream | Major feature |
Timmy Foundation Contributions (Our Fork)
| Change | PR | Author |
|---|---|---|
| Memory remove action bridge fix | #277 | Alexander Whitestone |
| Browser integration PoC + analysis | #262 | Alexander Whitestone |
| Memory budget enforcement tool | #256 | Alexander Whitestone |
| Memory sovereignty verification | #257 | Alexander Whitestone |
| Memory Architecture Guide | #263, #258 | Alexander Whitestone |
| MemPalace plugin creation | #259, #265 | Google AI Agent |
| CI: duplicate model detection | #235 | Alexander Whitestone |
| Kimi model config fix | #225 | Bezalel |
| Ollama provider wiring fix | #223 | Alexander Whitestone |
| Deep Self-Awareness Epic | #215 | Bezalel |
| BOOT.md for repo | #202 | Bezalel |
| Upstream sync (499 commits) | #201 | Alexander Whitestone |
| Forge CI pipeline | #154, #175, #187 | Bezalel |
| Gitea PR & Issue automation skill | #181 | Bezalel |
| Development tools for wizard fleet | #166 | Bezalel |
| KNOWN_VIOLATIONS justification | #267 | Manus AI |
4. Overlap Analysis
What We're Building That Already Exists
| Timmy Foundation Planned Work | Hermes-Agent Already Has | Verdict |
|---|---|---|
| Memory system (add/remove/replace) | tools/memory_tool.py with all 3 actions |
USE IT — already exists, we just needed the remove fix (PR #277) |
| Session persistence | SQLite + JSONL dual-write system | USE IT — battle-tested, FTS5 search included |
| Gateway platform adapters | 18 adapters including Telegram, Discord, Matrix | USE IT — don't rebuild, contribute fixes |
| Config management | Full YAML config with migration, env vars | USE IT — extend rather than replace |
| Plugin system | Complete with lifecycle hooks, PluginContext API | USE IT — write plugins, not custom frameworks |
| Tool registry | Centralized registry with self-registration | USE IT — register new tools via existing pattern |
| Cron scheduling | cron/scheduler.py + cronjob tool |
USE IT — integrate rather than duplicate |
| Subagent delegation | delegate_task with isolated contexts |
USE IT — extend for fleet coordination |
What We Need That Doesn't Exist
| Timmy Foundation Need | Hermes-Agent Status | Action |
|---|---|---|
| Engram integration | Not present | Build as external memory provider plugin |
| Holographic fact store | Accepted as provider name, not implemented | Build as external memory provider |
| Fleet orchestration | Not present (single-agent focus) | Build on top, contribute patterns upstream |
| Trust scoring on memory | Not present | Build as extension to memory tool |
| Multi-agent coordination | delegate_tool supports parallel (max 3) | Extend for fleet-wide dispatch |
| VPS wizard deployment | Not present | Timmy Foundation domain — build independently |
| Gitea CI/CD integration | Minimal (gitea_client.py exists) | Extend existing client |
Duplication Risk Assessment
| Risk | Level | Details |
|---|---|---|
| Memory system duplication | 🟢 LOW | We were almost duplicating memory removal (PR #278 vs #277). Now resolved. |
| Config system duplication | 🟢 LOW | Using hermes config directly via fork |
| Gateway duplication | 🟡 MEDIUM | Our fleet-ops patterns may partially overlap with gateway capabilities |
| Session management duplication | 🟢 LOW | Using hermes sessions directly |
| Plugin system duplication | 🟢 LOW | We write plugins, not a parallel system |
5. Contribution Roadmap
What to Build (Timmy Foundation Own)
| Item | Rationale | Priority |
|---|---|---|
| Engram memory provider | Sovereign local memory (Go binary, SQLite+FTS). Must be ours. | 🔴 HIGH |
| Holographic fact store | Our architecture for knowledge graph memory. Unique to Timmy. | 🔴 HIGH |
| Fleet orchestration layer | Multi-wizard coordination (Allegro, Bezalel, Ezra, Claude). Not upstream's problem. | 🔴 HIGH |
| VPS deployment automation | Sovereign wizard provisioning. Timmy-specific. | 🟡 MEDIUM |
| Trust scoring system | Evaluate memory entry reliability. Research needed. | 🟡 MEDIUM |
| Gitea CI/CD integration | Deep integration with our forge. Extend gitea_client.py. | 🟡 MEDIUM |
| SOUL.md compliance tooling | Conscience validator exists (tools/conscience_validator.py). Extend it. |
🟢 LOW |
What to Contribute Upstream
| Item | Rationale | Difficulty |
|---|---|---|
| Memory remove action fix | Already done (PR #277). ✅ | Done |
| Browser integration analysis | Useful for all users (PR #262). ✅ | Done |
| CI stability improvements | Reduce deps, increase timeout (our commit). ✅ | Done |
| Duplicate model detection | CI check useful for all forks (PR #235). ✅ | Done |
| Memory sovereignty patterns | Verification scripts, budget enforcement. Useful broadly. | Medium |
| Engram provider adapter | If Engram proves useful, offer as memory provider option. | Medium |
| Fleet delegation patterns | If multi-agent coordination patterns generalize. | Hard |
| Wizard health monitoring | If monitoring patterns generalize to any agent fleet. | Medium |
Quick Wins (Next Sprint)
- Verify memory remove action — Confirm PR #277 works end-to-end in our fork
- Test browser tool after upstream switch — Browserbase → Browser Use (upstream #5750) may break our PoC
- Update provider config — Kimi model references updated (PR #225), verify no remaining stale refs
- Engram provider prototype — Start implementing as external memory provider plugin
- Fleet health integration — Use gateway's background reconnection patterns for wizard fleet
Appendix A: File Counts by Directory
| Directory | Files | Lines |
|---|---|---|
tools/ |
70+ .py files | ~50K |
gateway/ |
20+ .py files | ~25K |
agent/ |
10 .py files | ~10K |
hermes_cli/ |
15 .py files | ~20K |
acp_adapter/ |
9 .py files | ~8K |
cron/ |
3 .py files | ~2K |
tests/ |
470 .py files | ~80K |
| Total | 335 source + 470 test | ~200K + ~80K |
Appendix B: Key File Index
| File | Lines | Purpose |
|---|---|---|
run_agent.py |
9,423 | AIAgent class, core conversation loop |
cli.py |
8,620 | CLI orchestrator, slash command dispatch |
gateway/run.py |
7,905 | Gateway main loop, platform management |
tools/terminal_tool.py |
1,783 | Terminal orchestration |
tools/web_tools.py |
2,082 | Web search + extraction |
tools/browser_tool.py |
2,211 | Browser automation (10 tools) |
tools/code_execution_tool.py |
1,360 | Python sandbox |
tools/delegate_tool.py |
963 | Subagent delegation |
tools/mcp_tool.py |
~1,050 | MCP client |
tools/memory_tool.py |
560 | Memory CRUD |
hermes_state.py |
1,238 | SQLite session store |
gateway/session.py |
1,030 | Session lifecycle |
cron/scheduler.py |
850 | Job scheduler |
hermes_cli/config.py |
1,318 | Config system |
hermes_cli/plugins.py |
611 | Plugin system |
hermes_cli/skin_engine.py |
500+ | Theme engine |