å»äžå¿åãæå¹³å¹³æãä»¥å®¢è§æºåšè£å€äžºéç¯çèªç»ç»å€æºèœäœè矀系ç»
A decentralized, self-organizing multi-agent swarm architecture built for pi.
Pi-Swarm çå身æ¯é对æ¬å°èœ»é级 Coding Agent å·¥å
· Pi çæ©å±æä»¶ pi-messenger-swarmãæ©æç倿ºèœäœæä»¶äž»èŠè§£å³åºç¡çæä»¶æ¶æ¯äŒ éäžåæºè¿çšç®¡çïŒäœåšé¢å¯¹é«å¹¶åã倿é»èŸç åæ¶ïŒåŸåŸé·å
¥äž€äžªäŒ ç» Multi-Agent æ¶æçæ»è¡åïŒ
- äžå¿ååè°å®ïŒOrchestratorïŒçåç¹æ¥å µäžæºåç¶é¢ïŒéçæŽŸç Agent å¢å€ïŒäžå¿èç¹çäžäžææéèšèïŒäžä» æ¶è倧é TokenïŒè¿ææåšåŸ®è§è°åºŠäžç»åºé误æä»€ïŒ
- èªç¶è¯èšâèåèªè¯âäžå莚åèž©åïŒå€æºèœäœä¹éŽçšèªç¶è¯èšäºçžå¹æ§ç¡®è®€å®æïŒçŒºå°çå®ä»£ç æ£éªïŒäžäžª Agent èž©äºæ»è¡åïŒå ¶ä» Agent æ¯«æ æç¥ïŒåšçžåé误路åŸäžåå€è莹ç®åã
䞺äºåœ»åºçªç Žè¿äž€å€§å°å¢ïŒPi-Swarm 深床åéŽå¹¶èåäºè¿æ AI é¢åäž€åºæå ·é¢ èŠæ§çåæ²¿è®¿è°äžå®è·µïŒ
- æ¶çäžå¿åææ¥å® (No Central Orchestrator)ïŒæåŒâ䞻宰-工人 (Master-Slave)âç»æïŒå»ºç«å®å šå¹³ççæå¹³å¯¹ççœæ ŒïŒFlat Peer MeshïŒãçæ£ççŸ€äœæºèœæ¯åšå¯¹ç亀äºäžèªç»ç»æ¶ç°çïŒèéç±åäžèç¹ç²Ÿå¯è®¡ååºæ¥çã
- æç®èææ¶ (Minimal Scaffolding)ïŒåºé»æ»æ¿ç¹çç埮è§ç®¡æåè§ïŒæäŸæèœ»éçåäœåè¯ïŒé»æ¿æ¥é ãèªäž»è®€é¢ã客è§èŽšçïŒïŒéæŸå沿暡åçèªäž»æšçäžèŸ©è®ºæœèœã
- å®¢è§æºåšè£å€ (Ground Truth Verifier)ïŒçççå¯äžæ åæ¯å®¢è§æºåšæ§è¡ç»æïŒèéæš¡åçèªææè§ã éåºç Exit Code 0 æ¯å®æçå¯äžéè¡è¯ïŒå峿ç»èªç¶è¯èšèå确讀ã
- åè¯Žèœ¯è®€é¢ (Soft Staking)ïŒé¢å¯¹å€æä»»å¡ç©ºéŽïŒAgent å¹¶åæåºæ¢çŽ¢è·¯åŸïŒéè¿èœ»é级 TTL ç§çºŠïŒLeaseïŒè¿è¡å£°æåŒè®€é¢ïŒæ¯æè¶ æ¶æ 鿢å äžå¿è·³ä¿æŽ»ã
- ç宿²ç®±å®¢è§çé (Sandbox Screening)ïŒæ¯äžªåè¯Žå¿ é¡»åšç»å¯¹é犻çç©çæ²ç®±äžè¿è¡å¹¶æ¥åç宿µè¯æ£éªïŒäŒè壿±°ã
- èŽåç¥è¯æ²æ·äžå šçŸ€å¿«éåªæ (Fast Pruning)ïŒè¢«è¯äŒªçåè¯Žäžæ¥éå æ 峿¶æ²æ·è³é¿ååºïŒGraveyardïŒïŒå¹¶åå šå±ä¿¡é广æåªæä¿¡å·ïŒç¬éŽé»æå šèçŸ€åšæ»è¡åäžçæ æç®åæ¶èã
Pi-Swarm çæŽäœè®Ÿè®¡å¹¶éé¶æ£åèœçæŒåïŒèæ¯äžå¥äž¥å¯äºæ£ãç±æµ å ¥æ·±çéç¯é»èŸæšæŒç³»ç»ïŒ
人类åŒåè
(Terminal TUI çæ¿)
â
⌠æåºéæ± / ç©ç玧æ¥å¹èœŠ (SIG_ABORT)
âââââââââââââââââââââââââââââââââââââââââââ
â 1. äž» Coding Agent (å§æè
& åªè¯»è§å¯è
) â
ââââââââââââââââââââââ¬âââââââââââââââââââââ
â ååžç®æ è§æ ŒïŒäžææåŸ®è§æ§è¡
âŒ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 2. ååºå
šå±é»æ¿ (Four-Zone Blackboard CQRS) â
â [ð¯ Goal ç®æ åº] ââ> [â¡ Soft Staking 蜯讀é¢ç§çºŠ] â
â [ð Verified é»éäºå®] <ââ [𪊠Graveyard é¿ååº] â
ââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââ
â èªäž»æ¢å åè¯Žå¹¶äžæ²æ»å
âŒ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 3. äžå± Worktree ç©çé犻æ²ç®± (Git Detached Sandbox) â
â .swarm/workspaces/worker-<id>/ â
â âââ æžžçŠ» HEAD (git worktree --detach é¶åæ¯æ±¡æ) â
â âââ 蜯éŸå€çšå®¿äž» node_modules (å
éå€å®è£
ç§çº§å°±ç»ª) â
â âââ è¿è¡æ¶é犻 (äžå± TMPDIR / åšæ TEST_PORT æ§œäœ) â
ââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââ
â ä»»å¡å®æåèµ·å®¢è§æ£éª (task done)
âŒ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 4. 客è§çå®éªè¯åšäžèªæéç¯ (Ground Truth Verifier) â
â âââ ç©çæ§è¡æµè¯éšçŠ (npm test / Vitest) â
â âââ [Pass] Exit 0: æè· diff çæ .patch æåé»éäºå®â
â âââ [Fail] Steer æ¥éå æ å匹æ²ç®±è§Šåèªæéæ â
â âââ [Fail >= 3] Fast Pruning åªæå¹¿æå¹¶éæŸç§çºŠ â
ââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââ
â æ²ç®±å
šéæµè¯ 100% è·é
âŒ
âââââââââââââââââââââââââââââââââââââââââââ
â 5. åæ§çŽæ¥åå¹¶ (Direct Verified Merge) â
â èåº Agent æ¥æå°éªè¯è¡¥äžåå
¥äž»å·¥çšçç©çæéâ
âââââââââââââââââââââââââââââââââââââââââââ
- äž» Coding AgentïŒé¢åäººç±»ïŒæ®æŒâå§æè
(Delegator)âäžâåªè¯»è§å¯è
(Observer)âã人类èŸå
¥éæ±åïŒäž» Agent èŽèŽ£æè§£æ»ç®æ è§æ ŒèŽŽäžé»æ¿ïŒäžé®å¯åšè矀åéå±
å¹åïŒåªéè¿ TUI çæ§å®æ¶åšæïŒä¿ç人类äžé®ç©ççæé®ïŒ
SIG_ABORTïŒã - è矀 Peer èç¹ïŒå°äœå®å šå¹³ççæ äžå¿çœæ Œãææèç¹æ¥æçžåç黿¿è¯»åæéäžæ²ç®±æ§è¡èœåïŒæç»å±çº§æ±æ¥äžçåŸ æä»€é æçäžäžææèã
é«å¹¶å Multi-Agent åäœææäž€ä»¶äºïŒå€è¿çšäºæ¢åéå¯ŒèŽæä»¶æåïŒä»¥åæµ·éæ¥å¿æ Agent ç Context æçãPi-Swarm éçš CQRS 读åå犻ïŒ
- åå ¥ç«¯ïŒåºå±åºäº append-only JSONL äºä»¶æµè¿œå ïŒæ éé«ååïŒ
- 读å端ïŒèªåšå°ç¶ææåœ±æ±è䞺åæä»¶åªè¯»å¿«ç
§
BLACKBOARD.mdïŒå次读åäž¥æ Œéå¶åš<1000 tokensã - ååºç¶ææºæµèœ¬ïŒ
- Zone 1: Goal ç®æ åºïŒæ²æ·å šå±è§æ Œäžéªæ¶äŸèµïŒ
- Zone 2: Soft Staking 蜯讀é¢åºïŒAgent èªäž»å£°ææ¢çŽ¢å诎ïŒäº«æ 300 ç§ TTL ç§çºŠäžå¿è·³ä¿æŽ»ïŒèç¹åŒåžžææ»æè¶ æ¶èªåšæ ééæŸäŸåè¡æ¥åïŒ
- Zone 3: Verified Artifacts é»éäºå®åºïŒä»
æ¶åœéè¿æºåšå®¢è§æµè¯çä»£ç ææäžäžå¯åç©çè¡¥äžïŒ
.patchïŒïŒ - Zone 4: Graveyard é¿ååºïŒè®°åœè¢«æºåšè¯äŒªçæ¹æ¡ãåäŸæµè¯äžéè¯¯å æ ã
å¹¶åä¿®æ¹åäžä»œä»£ç æ¯çŸéŸçæ ¹æºãPi-Swarm åºäº Git Detached Worktree æå»ºäºèœ»éæ²ç®±ïŒ
- é¶åæ¯æ±¡æ (
--detach)ïŒäœ¿çšgit worktree add --detach .swarm/workspaces/worker-<id> HEADïŒçŽæ¥æ£åºæžžçŠ» HEADïŒäžå建任äœå€äœç䞎æ¶åæ¯ïŒäººç±»åŒåè çgit branchä¿æç»å¯¹çº¯åïŒ - äŸèµç§çº§å°±ç»ªïŒåšæ²ç®±å
èªåšå建æå宿䞻
node_modulesç笊å·éŸæ¥ïŒæ éåšæ¯äžªæ²ç®±é倿§è¡å å®è£ ïŒæéå°±ç»ªïŒ - è¿è¡æ¶é犻ïŒåšæåé
ç«¯å£æ§œäœïŒ
PORT=3100+slotãTEST_PORT=3200+slotïŒäžç¬ç«TMPDIRïŒæç»å€ Agent æ¬å°æµè¯ç«¯å£å²çªïŒEADDRINUSEïŒïŒ - çåœåšæåæ¶ïŒæ£åžžéåºèªåšç§»é€æ²ç®±ïŒç³»ç»å¯åšèªåšæ§è¡
git worktree pruneæž çåŒåžžæ®çã
- éšçппªïŒåš
task.doneæ¥å£è®Ÿç«åŒºå¶éšçŠïŒæ§è¡å®¢è§æµè¯åœä»€ïŒèªå𿢿µé¡¹ç®npm testææå®--verifyïŒïŒ - èªæåéŠïŒæµè¯å€±èŽ¥æ¶ïŒéšçŠé©³å宿ç³è¯·ïŒå¹¶å°ç»ç«¯çå® stderr/stdout å æ éè¿ Steer é鿝«ç§çº§å匹æå AgentïŒé©±åšå ¶åšæ²ç®±å ä¿®æ£ä»£ç èªæïŒ
- å
šè矀快éåªæ (Fast Pruning)ïŒåä»»å¡è¿ç» 3 次éªè¯å€±èŽ¥ïŒå€å®è¯¥å诎䞺æ»è¡åïŒåœæ¡£è³ Graveyard å¹¶åå
šçœå¹¿æ
task.dead_endåªæä¿¡å·ïŒç¬éŽå«åè矀åšç±»äŒŒæ»è¡åäžçæ æç®åã
èçŸ€äžæ¯åªæå»ºè®®çæž
è°éŠãåšäžå±æ²ç®±å
éè¿æºåšç宿µè¯ïŒExit Code 0ïŒçèåº AgentïŒæ¥ææç¡®ãåæ§çç©çæéïŒå¯çŽæ¥å°çæçéªè¯è¡¥äžïŒgit apply <patch>ïŒåå¹¶è³äž»ä»£ç åºãäž» Agent å€éåçŽæ¥éªæ¶å·²ç»éè¿å
šéšæµè¯çæç»ææã
æ®éäœ¿çšæ éå
éæºç ïŒåå€ Node.js â¥22.19 å Pi Host/TUI 1.0.1ïŒåšåäžäžª npm å®è£
ç®åœäžå®è£
Host å Pi-Swarm ååžå
ãå
·äœåœä»€ãäŸèµå
³ç³»åå®è£
å
åçéªè¯è§å®è£
äžè¿è¡è¯Žæãä»
æå
šå± pi åœä»€äžè¶³ä»¥æ»¡è¶³äŒŽéæå¡çè¿è¡æ¶äŸèµã
仿ºç åŒåä»äœ¿çšä»¥äžæµçšïŒ
# å
éä»åº
git clone https://github.com/Azhi-ss/Pi-Swarm.git
cd Pi-Swarm
# å®è£
äŸèµäžçŒè¯
pnpm install
pnpm run build
# è¿è¡å
šéèªåšåæµè¯
npx vitest run# 1. æ¥é
ååºå
šå±é»æ¿
pi-messenger-swarm blackboard show
# 2. 声æåŒèœ¯è®€é¢åè¯Žä»»å¡ (è·åŸ 300s TTL ç§çºŠ)
pi-messenger-swarm task stake task-1 "å°è¯äœ¿çšååéŸè¡šéæçŒåæ·æ±°çç¥"
# 3. 任塿§è¡æéŽå®æå¿è·³ç»çºŠ
pi-messenger-swarm task heartbeat task-1
# 4. æäº€å®æç³è¯· (è§Šå客è§éªè¯åšéšçŠïŒéè¿åçæ .patch 产ç©)
pi-messenger-swarm task done task-1 "éæå®æïŒå
šéåå
æµè¯äžååæµè¯åè·é"
# 5. æåºçç¥æ¹æ¡äžé对æ§å驳蟩论
pi-messenger-swarm propose task-1 "建议åŒå
¥è·³è¡šç»æäŒåèåŽæ¥è¯¢æ§èœ"
pi-messenger-swarm challenge task-1 "è¯¥æ¹æ¡åšå¹¶ååå
¥åºæ¯äžååšéç«äºïŒéåžŠå¹¶åæµè¯åäŸçšäŸ"
# 6. èªæ£ç§çºŠãéªè¯éè¯æ¬¡æ°ãæ²ç®±äžç«¯å£ïŒJSON èŸåºïŒ
pi-messenger-swarm status --self
# 7. åç°åšçº¿èç¹åå
¶åœå讀é¢ä»»å¡ïŒJSON èŸåºïŒå¯æä»»å¡çéïŒ
pi-messenger-swarm peers
pi-messenger-swarm peers --task task-1
# 8. å®åå忥å£å¥çºŠïŒå¯äœ¿çšèç¹åç§°ææŽŸç IDïŒ
pi-messenger-swarm send PeerName "æ¥å£çºŠå®ïŒGET /v1/items è¿å JSON æ°ç»"status --self äžç leaseExpiresIn 以ç§è®¡ïŒremainingRetries 衚瀺觊åäžæ¬¡å€±èŽ¥åªæåå©äœçéªè¯æ¬¡æ°ïŒæ²¡æåœåä»»å¡ãæ²ç®±æç«¯å£æ¶ïŒå¯¹åºå段䞺 nullãpeers è¿ååœåé¡¹ç®æ³šå衚äžçå
¶ä»åšçº¿é人类èç¹ïŒä»»å¡æ¥èªåœåäŒè¯ïŒè¿æç§çºŠäžè®¡å
¥åœå讀é¢ã
å®åæ¶æ¯åå
¥æ¶ä»¶äººåšåœå项ç®äžçæ¶ä»¶ç®±ïŒäžäŒåå
¥å
Œ
±åšæïŒçŠ»çº¿æ¶ä»¶äººçæ¶æ¯ä¿çåšç£çãçš pi-messenger-swarm inbox æé读åãæŽŸçèç¹çæ¶ä»¶ç®±æä»¶æ¯ $PI_SWARM_INBOXïŒå®¿äž»é¡¹ç®æ¯ $PI_SWARM_PROJECT_ROOTãèªå®ä¹æå
šå±ååšæ ¹ä»æé¡¹ç®ååºïŒååèç¹äžäŒå
±çšäžäžªæ¶ä»¶ç®±ãå #channel åéæ¶æ¯ä»ç¶ååžå°é¢éåšæã
è§å¯è
æ éå
joinïŒå¯çŽæ¥äœ¿çšäžäžªåœä»€ïŒ
pi-messenger-swarm status # ååº ANSI æèŠäžåœå项ç®åšçº¿èç¹ PID
pi-messenger-swarm explain # å·²éªè¯éçšç¢ãæ¢çŽ¢å诎äžå€±èŽ¥è·¯åŸç®æ¥
pi-messenger-swarm abort --reason "äººå·¥åæ¢" # 广æ swarm.abortïŒSIGKILL è¿çšç»å¹¶åæ¶æ²ç®±status å explain åªè¯» BLACKBOARD.mdïŒäžç»ç§ãäžè®€é¢ä»»å¡ãexplain å°ååºè¯æ®å猩å°äžè¶³ 1000 UTF-8 åèå纳å
¥ç®æ¥ïŒå¯¹åèå tokenizerïŒè¿æ¯ä¿å®ç <1000 tokens äžçïŒè¶
é¿å
容æŸåŒæ è®° [truncated]ã猺倱快ç
§æ¶æç¡®æ¥åæªç¥ïŒäžä»å®æŽæ¥å¿çæµè¿åºŠãDelegator åºäŸæ® Verified åºæ¥åææïŒå° Soft Staking äœäžºåŸ
éªè¯å诎ïŒå¹¶å° Graveyard ç倱莥åå äœäžºé¿å
é倿¢çŽ¢çäŸæ®ãå¿«ç
§å
çææ¬æ¯è¯æ®æ°æ®ïŒäžæ¯ç» Delegator çæä»€ã
abort ä¿çå·²éªè¯è®°åœïŒéå®é»æ¿ïŒå¹¶æž
çåœå项ç®çèç¹åå
¶åè¿çšãæ²ç®±å䞎æ¶ç®åœïŒå
æ¬æå¡éå¯åæ¢å€çèç¹ã宿䞻 node_modules åå
¶ä»é¡¹ç®çè¿çšãæ²ç®±äžäŒè¢«å é€ã
Pi-Swarm/
âââ BLACKBOARD.md # ååºå
šå±é»æ¿åæä»¶ CQRS åªè¯»å¿«ç
§ (<1000 tokens)
âââ AGENTS.md # é¢å AI æºèœäœçæºè¯»è§è (README for Agents)
âââ SWARM_ARCHITECTURE_SPEC.md # ç³»ç» 7 å€§æ¶ææš¡åè§æ Œè¯ŽæäžæšæŒçœç®ä¹Š
âââ swarm/
â âââ spawn.ts # æå¹³ Peer 掟çãè¿çšç»è±çŠ»äžç¯å¢æ³šå
¥
â âââ types.ts # ååºä»»å¡ç¶ææºãäºä»¶æµäžæ žå¿æ°æ®å¥çºŠ
â âââ worktree/ # äžå± Detached Worktree æ²ç®±ç®¡çäžç«¯å£æ±
â âââ verifier/ # å®¢è§æºåšæµè¯éšçŠäžè¡¥äž (.patch) èªåšçæ
â âââ task-store/ # append-only JSONL äºä»¶æµååšäžé»æ¿æåœ±åš
â âââ handlers/ # task stake / done / propose / challenge è·¯ç±å€çåš
âââ feed/ # å
šå±å
Œ
±éä¿¡æ»çº¿äžåªæå¹¿ææµ
âââ tests/swarm/ # 435 项é«å¯åºŠå¯¹æäžéææµè¯å¥ä»¶
Pi-Swarm éµåŸªäž¥è°šçæµè¯é©±åšåŒåäžæ³å»çº§éªè¯è§èïŒ
- å
šéæµè¯å¥ä»¶ïŒ
55䞪æµè¯æä»¶ïŒ435项æµè¯é¡¹ 100% ä¿æéè¿ïŒ - é«å¯åºŠå¯¹ææµè¯èŠçïŒ
adversarial-blackboard-staking.test.tsïŒé«å¹¶å TTL ç§çºŠæ¢å äžå€±æç«äºåæµïŒadversarial-verifier-pruning.test.tsïŒèåå®ææŠæªçãSteer å æ èªæäž Fast Pruning åªæå¹¿æïŒadversarial-propose-challenge.test.tsïŒåäŸçšäŸé©±åšèŸ©è®ºäž HTTP 端å°ç«¯çåœåšæïŒworktree-sandbox.test.tsïŒGit Detached Worktree é¶åæ¯æ±¡æãäŸèµèœ¯éŸäžç«¯å£æ§œäœé犻éªè¯ïŒ
- TypeScript äž¥æ Œæš¡åŒïŒ
npx tsc --noEmit0 é误ã0 èŠåã
- çè®ºçµæïŒèŽæ¬ Noam Brown (OpenAI) å ³äºæµè¯æç®åäžæ äžå¿èçŸ€çæ·±å»æŽè§ïŒä»¥å Anthropic åšè¶ 级è矀çç©é ¶åç°äžçåŒåæ§å·¥çšå®è·µïŒ
- åååºç¡ïŒæè°¢ Tom X Nguyen (monotykamary) æååš
pi-messenger-swarmäžæäžçæä»¶åäœåºç¡ã
æ¬é¡¹ç®éçš MIT 讞å¯è¯ åŒæºã
ååžå
ç Pi Host å眮æ¡ä»¶ãç¬ç«é¡¹ç®å®è£
ãrun start/join/statusãäž»åšéç¥ãåéè¡¥äžæ¢å€åèªåšæ¥åè§ è¿è¡æ¶æåã