by SonicBotMan
Complete ETCLOVG framework for AI Agent workflows - DAG+FSM orchestration, Ebbinghaus memory, discipline routing, skill evolution, trace system, governance. 80+ tests, zero deps, 7/7 layers.
# Add to your Claude Code skills
git clone https://github.com/SonicBotMan/SoloFlowLast scanned: 5/30/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-30T16:21:11.127Z",
"npmAuditRan": true,
"pipAuditRan": true
}SoloFlow is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by SonicBotMan. Complete ETCLOVG framework for AI Agent workflows - DAG+FSM orchestration, Ebbinghaus memory, discipline routing, skill evolution, trace system, governance. 80+ tests, zero deps, 7/7 layers. It has 100 GitHub stars.
Yes. SoloFlow passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/SonicBotMan/SoloFlow" and add it to your Claude Code skills directory (see the Installation section above).
SoloFlow is primarily written in Python. It is open-source under SonicBotMan on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh SoloFlow against similar tools.
No comments yet. Be the first to share your thoughts!
Turn chaotic multi-step AI tasks into structured, observable, retryable workflows — with cognitive memory, discipline-aware routing, and automatic skill evolution.
AI Agents fail in predictable ways:
| Problem | SoloFlow Solution |
|---|---|
| No Observability — 8-step chain fails at step 5, no trace, no resume | Trace System — nested spans, token tracking, JSON export |
| Amnesiac Agents — every invocation starts from zero | Ebbinghaus Memory — three-tier memory with forgetting curve |
| One-Size-Fits-All — simple tasks waste deep reasoning | Discipline Routing — auto-classify to quick/deep/visual/ultrabrain |
| No Learning — repeated patterns stay manual | Skill Evolution — observe → detect → package → install |
expressiveness(DAG) + rigor(FSM) = reliability
R(t) = base × e^(-t / stability)
quick (~2s) → deep (~30s) → visual (~30s) → ultrabrain (~120s)
observe → fingerprint → detect → package → install
hermes.on("tool_call") event hooks~/.hermes/skills/git clone https://github.com/SonicBotMan/SoloFlow.git
cd SoloFlow
# Pure Python, zero dependencies
import asyncio
from pathlib import Path
from hermes_plugin.store.sqlite_store import SQLiteStore
from hermes_plugin.services.workflow_service import WorkflowService
from hermes_plugin.services.scheduler import Scheduler
async def main():
store = SQLiteStore(Path("soloflow.db"))
store.initialize()
ws = WorkflowService(store)
ws.set_scheduler(Scheduler(store, ws))
# Create a DAG workflow with parallel branches
wf = await ws.create_workflow(
name="research-report",
description="行业调研报告",
steps=[
{"id": "topic", "name": "选题", "discipline": "deep", "prompt": "确定研究方向"},
{"id": "search_a", "name": "学术搜索", "discipline": "quick", "prompt": "搜索学术资料"},
{"id": "search_b", "name": "行业搜索", "discipline": "quick", "prompt": "搜索行业报告"},
{"id": "outline", "name": "大纲", "discipline": "deep", "prompt": "整理大纲"},
{"id": "write", "name": "撰写", "discipline": "deep", "prompt": "写正文"},
{"id": "review", "name": "审校", "discipline": "quick", "prompt": "审校发布"},
],
edges=[
("topic", "search_a"), ("topic", "search_b"), # parallel branches
("search_a", "outline"), ("search_b", "outline"), # merge
("outline", "write"), ("write", "review"),
],
)
await ws.start_workflow(wf["id"])
status = await ws.get_status(wf["id"])
print(f"State: {status['state']}, Progress: {status['progress']}")
asyncio.run(main())
SoloFlow includes a Hermes plugin that watches your workflows and automatically generates reusable skills.
bash install.sh
Or manually:
cp plugins/soloflow.py ~/.hermes/plugins/
cp -r skills/meta/soloflow ~/.hermes/skills/meta/
cp -r evolution ~/.hermes/plugins/
hermes skills reload
tool_call events → WorkflowBuilder (aggregate) → PatternDetector (fingerprint)
↓
Pattern (2+ occurrences)
↓
SkillPackager → SKILL.md + plugin.py
↓
QualityScorer → grade (A-F)
tool_call events into multi-step workflows (auto-flushes after 60s idle)| Command | Description |
|---|---|
/soloflow begin [name] |
Mark workflow start |
/soloflow end [name] |
Mark workflow end, record pattern |
/soloflow propose |
Analyze session, propose top skill |
/soloflow generate [name] |
Generate and install a skill |
/soloflow list |
List detected patterns |
/soloflow skills |
List generated skills |
/soloflow status |
Show tracking status |
/soloflow queue |
Show pending proposals |
/soloflow clear |
Clear session log |
Tell Hermes naturally — no commands needed:
When a workflow completes through the DAG engine, SoloFlow automatically feeds the execution data to PatternDetector:
from hermes_plugin.services.workflow_service import WorkflowService
ws = WorkflowService(store)
ws.set_on_complete(lambda wf_id, success, duration, wf_def: ...)
# Completed workflows are automatically recorded for pattern detection
5 MCP tools for integration with AI agents:
| Tool | Description |
|---|---|
soloflow_create |
Create a new workflow with steps and DAG edges |
soloflow_run |
Execute a workflow with DAG parallelism |
soloflow_status |
Get workflow status and progress |
soloflow_list |
List workflows with optional state filter |
soloflow_cancel |
Cancel a running workflow |
# config.yaml
tools:
mcp:
servers:
soloflow:
command: python
args: ["-m", "mcp.server"]
Track every workflow execution with nested spans:
from trace.collector import TraceCollector
from trace.exporter import TraceExporter
from trace.span import SpanStatus, TokenUsage
collector = TraceCollector(db_path=Path("traces.db"))
exporter = TraceExporter(collector)
span = collector.start_span(operation="workflow", node_name="research")
step = collector.start_span(
operation="step", node_name="search",
parent_id=span.span_id, trace_id=span.trace_id,
)
collector.finish_span(
step.span_id,
status=SpanStatus.SUCCESS,
token_usage=TokenUsage(prompt_tokens=100, completion_tokens=200),
)
print(exporter.format_trace_tree(span.trace_id))
Memory system with automatic consolidation:
from memory.forgetting.consolidation import MemoryConsolidator
consolidator = MemoryConsolidator(db_path=Path("memory.db"))
await consolidator.add_memory(
key="user_preference",
content={"theme": "dark"},
tier="episodic",
stability=1.0,
)
entry = await consolidator.get_memory("user_preference")
stats = await consolidator.consolidate_all()
Approval system for sensitive workflow steps:
from hermes_plugin.human import HumanApprovalManager
manager = HumanApprovalManager()
request = manager.create_request(
workflow_id="wf_123",
step_id="review",
prompt="Please review and approve",
)
result = await manager.wait_for_approval(request.request_id)
Role-based permissions, audit logging, and policy enforcement:
from hermes_plugin.governance import GovernanceManager, Permission
governance = GovernanceManager()
governance.grant_permission("user_1", Permission.EXECUTE)
has_perm = governance.check_permission("user_1", Permission.EXECUTE)
governance.log_audit(
action=AuditAction.WORKFLOW_STARTED,
workflow_id="wf_123",
user_id="user_1",
)
SoloFlow/
├── hermes-plugin/ # Core engine
│ ├── core/ # DAG + FSM
│ ├── services/ # WorkflowService + Scheduler
│ ├── memory/ # Three-tier memory
│ ├── store/ # SQLite persistence
│ ├── checkpoint/ # LangGraph: resumable execution
│ ├── dispatch/ # DeerFlow: sub-agent dispatch
│ ├── roles/ # CrewAI: permission boundaries
│ ├── output/ # PydanticAI: typed contracts
│ ├── boundary/ # Mastra: workflow vs agent control
│ ├── handoff/ # OpenAI Agents SDK: control transfer
│ ├── session/ # Google ADK: session + context budget
│ ├── hooks/ # Claude Agent SDK: lifecycle hooks
│ ├── pipeline/ # Haystack: component orchestration