@@ -960,6 +960,68 @@ <h2 class="section-title" id="getting-started-title" data-i18n="started.title">U
960960< span class ="code-cmd "> hermes</ span > skills list | grep soloflow
961961< span class ="code-output "> # → soloflow ✓</ span > </ code > </ pre >
962962 </ div >
963+ < div class ="code-panel " id ="panel-workflow ">
964+ < div class ="code-header ">
965+ < span class ="code-dots "> < i > </ i > < i > </ i > < i > </ i > </ span >
966+ < span class ="code-filename "> workflow.py</ span >
967+ < button class ="code-copy " data-copy ="workflow " aria-label ="Copy to clipboard ">
968+ < svg width ="14 " height ="14 " viewBox ="0 0 24 24 " fill ="none " stroke ="currentColor " stroke-width ="2 "> < rect x ="9 " y ="9 " width ="13 " height ="13 " rx ="2 "/> < path d ="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1 "/> </ svg >
969+ </ button >
970+ </ div >
971+ < pre class ="code-block "> < code class ="lang-python "> < span class ="code-comment "> # Create a DAG workflow with parallel branches</ span >
972+ < span class ="code-keyword "> import</ span > asyncio
973+ < span class ="code-keyword "> from</ span > pathlib < span class ="code-keyword "> import</ span > Path
974+ < span class ="code-keyword "> from</ span > hermes_plugin.store.sqlite_store < span class ="code-keyword "> import</ span > SQLiteStore
975+ < span class ="code-keyword "> from</ span > hermes_plugin.services.workflow_service < span class ="code-keyword "> import</ span > WorkflowService
976+ < span class ="code-keyword "> from</ span > hermes_plugin.services.scheduler < span class ="code-keyword "> import</ span > Scheduler
977+
978+ < span class ="code-keyword "> async def</ span > < span class ="code-func "> main</ span > ():
979+ store = SQLiteStore(Path(< span class ="code-string "> "soloflow.db"</ span > ))
980+ store.initialize()
981+ ws = WorkflowService(store)
982+ ws.set_scheduler(Scheduler(store, ws))
983+
984+ < span class ="code-comment "> # Define workflow with parallel branches</ span >
985+ wf = < span class ="code-keyword "> await</ span > ws.create_workflow(
986+ name=< span class ="code-string "> "research-report"</ span > ,
987+ description=< span class ="code-string "> "行业调研报告"</ span > ,
988+ steps=[
989+ {< span class ="code-string "> "id"</ span > : < span class ="code-string "> "search_a"</ span > , < span class ="code-string "> "name"</ span > : < span class ="code-string "> "学术搜索"</ span > , < span class ="code-string "> "discipline"</ span > : < span class ="code-string "> "quick"</ span > },
990+ {< span class ="code-string "> "id"</ span > : < span class ="code-string "> "search_b"</ span > , < span class ="code-string "> "name"</ span > : < span class ="code-string "> "行业搜索"</ span > , < span class ="code-string "> "discipline"</ span > : < span class ="code-string "> "quick"</ span > },
991+ {< span class ="code-string "> "id"</ span > : < span class ="code-string "> "merge"</ span > , < span class ="code-string "> "name"</ span > : < span class ="code-string "> "合并分析"</ span > , < span class ="code-string "> "discipline"</ span > : < span class ="code-string "> "deep"</ span > },
992+ ],
993+ edges=[(< span class ="code-string "> "search_a"</ span > , < span class ="code-string "> "merge"</ span > ), (< span class ="code-string "> "search_b"</ span > , < span class ="code-string "> "merge"</ span > )],
994+ )
995+
996+ < span class ="code-comment "> # Execute with DAG parallelism</ span >
997+ < span class ="code-keyword "> await</ span > ws.start_workflow(wf[< span class ="code-string "> "id"</ span > ])</ code > </ pre >
998+ </ div >
999+ < div class ="code-panel " id ="panel-run ">
1000+ < div class ="code-header ">
1001+ < span class ="code-dots "> < i > </ i > < i > </ i > < i > </ i > </ span >
1002+ < span class ="code-filename "> Terminal</ span >
1003+ < button class ="code-copy " data-copy ="run " aria-label ="Copy to clipboard ">
1004+ < svg width ="14 " height ="14 " viewBox ="0 0 24 24 " fill ="none " stroke ="currentColor " stroke-width ="2 "> < rect x ="9 " y ="9 " width ="13 " height ="13 " rx ="2 "/> < path d ="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1 "/> </ svg >
1005+ </ button >
1006+ </ div >
1007+ < pre class ="code-block "> < code class ="lang-bash "> < span class ="code-comment "> # Mark workflow boundaries</ span >
1008+ < span class ="code-cmd "> /soloflow</ span > begin research-report
1009+
1010+ < span class ="code-comment "> # Perform your steps...</ span >
1011+ < span class ="code-comment "> # SoloFlow watches and aggregates automatically</ span >
1012+
1013+ < span class ="code-cmd "> /soloflow</ span > end
1014+
1015+ < span class ="code-comment "> # Propose a skill from detected pattern</ span >
1016+ < span class ="code-cmd "> /soloflow</ span > propose
1017+
1018+ < span class ="code-comment "> # Generate and install the skill</ span >
1019+ < span class ="code-cmd "> /soloflow</ span > generate research-report
1020+
1021+ < span class ="code-output "> # → Skill installed to ~/.hermes/skills/</ span >
1022+ < span class ="code-output "> # → Run 'hermes skills reload' to activate</ span > </ code > </ pre >
1023+ </ div >
1024+ </ div >
9631025 </ div >
9641026 </ div >
9651027 </ section >
0 commit comments