Agora ๐๏ธ
August 5, 2026 ยท View on GitHub
Multi-role self-driving team plugin for Hermes Agent โ v1.8.8
Agora turns Hermes into a self-driving team: multiple AI roles โ each a real Hermes agent subprocess with its own SOUL.md, tools, and session context โ discuss approaches, search the web, write content, and auto-dispatch tasks. A leader (just a worker created from the "leader" template) acts as chair in event-driven discussions, dynamically picking speakers, evaluating progress, calling votes, and summarizing outcomes. Discussion results are stored in the motions database and surfaced via agora tools. The leader plans the next phase, decides when the goal is achieved, and stops itself. Everything is managed from the Dashboard โ no CLI needed.
Self-Growth (v1.8.6+): Workers evolve through 2 channels: Skills (
skill_manage) and SOUL.md (patch). The oldmemorytool has been removed โ MEMORY.md is written only by the discussion engine (leader) and hooks, not by workers directly.
Key Features
| Feature | Description |
|---|---|
| Unified worker model | No separate leader concept โ a leader is just a worker created from the "leader" template (is_leader=true). Everything goes through worker_manager |
| Event-driven discussion engine | Leader chairs discussions: opens topic, picks speakers dynamically, evaluates after each turn, calls votes, summarizes โ no fixed round-robin |
| Real agent subprocesses | Each speaker is a real hermes -p <profile> chat -q spawn with SOUL.md, tools, and session context โ not a stateless LLM call |
| Per-project session isolation | Leader uses a fresh session each heartbeat โ context doesn't bleed between projects |
| Self-Growth (2 channels) | Workers evolve via Skills (skill_manage) and SOUL.md (patch). No memory tool โ MEMORY.md is managed by the discussion engine and hooks. |
| Heartbeat on project, not profile | heartbeat_member, heartbeat_minutes, heartbeat_cron_id live on the project โ one leader can run different projects at different intervals |
| AGENTS.md as single source of truth | Project goal, stop condition, team roster (name โ role template), and active discussions are written to AGENTS.md. Hermes auto-injects it into every agent's system prompt via TERMINAL_CWD. No prompt-level duplication. |
| Mid-flight project updates | agora_update_project tool lets the leader change goal, description, or stop_condition without stopping the project. AGENTS.md is refreshed automatically. reactivate=true restarts a completed project with a new direction. |
| 8 role templates | Architect, Developer, Reviewer, Tester, DevOps, Researcher, Writer, Leader |
| Self-driving | Heartbeat cron wakes leader to check kanban, unblock, plan, dispatch |
| Auto-stop | Leader outputs PROJECT_COMPLETE when stop condition is met โ double confirmation required โ cron auto-paused + all kanban tasks deleted (clean slate on restart) |
| 3 kanban hooks | kanban_task_completed (comment + skill nudge), kanban_task_claimed (log + motion comment), kanban_task_blocked (auto-trigger discussion if design decision) |
| Code review workflow | agora_close_task(action='submit_review') transitions a task to review status and auto-assigns to reviewer โ dispatcher auto-spawns the reviewer worker |
| Speaker 429 retry | _speaker_speak detects API 429/rate-limit errors and retries up to 10 times with incremental backoff (10s, 20s, โฆ, 100s), clearing session on each retry |
| 3 bundled skills | agora-setup (operator onboarding), agora-awareness (worker framework knowledge), agora-deliberation (discussion methodology) โ auto-deployed to ~/.hermes/skills/collaboration/ on register |
| Human participation | Jump into discussions anytime via Dashboard input box |
| Dashboard | Projects tab (default) + Team tab (Members + Teams + Profiles sub-tabs), real-time polling, toast notifications, heartbeat control panel |
| Generous timeouts | All LLM calls (speak, chair, vote, dispatch) default to 1 hour (3600s). Hermes HTTP client auto-retries on timeout; Agora subprocess timeout is the hard ceiling. Tuned for local models with long context preprocessing. |
Why Agora? โ Structured Discussion Amplifies Ordinary Models
Most multi-agent frameworks assume you need a frontier model at every node. Agora challenges this assumption. In 5 hours of production monitoring (docmind project, local model via API relay โ not a frontier model), we observed:
- An Architect correcting a Researcher's proposed sequencing, citing exact file paths and line numbers
- A Developer overriding effort estimates with concrete numbers ("2-3 hours, not days")
- A Tester confirming regression risk by referencing the existing 125-test suite
- A Writer pinpointing exactly which lines of
gap-analysis.mdneeded updating
None of these outputs required any single model to hold the full decision tree in its head. Each agent only needed to make a domain-local judgment โ and the structured discussion framework stitched them into a coherent decision.
How the architecture compensates for model limitations
| Model weakness | Agora's structural remedy |
|---|---|
| Loses focus in long context | Each speaker sees a compact, structured history ([role (step_type)]: content), not raw conversation. Typical input: ~2000 chars. |
| Jumps to conclusions | Step-based flow forces: opening โ speak โ chair evaluates โ next speaker. No skipping ahead. |
| Blind spots / single perspective | Chair explicitly checks "who hasn't spoken?" and dispatches them. All perspectives must be heard before closure. |
| Forgets prior decisions | Discussion outcomes are stored in the motions database. Workers evolve via Skills + SOUL.md (2-channel self-growth, no memory). |
| Can't self-assess when stuck | Chair's meta-decision loop: `continue |
| Hallucinates without evidence | Dispatch mode sends a worker to investigate with real tools (web_search, read_file, terminal) before committing to an opinion. |
The chair role is different
Speakers do domain reasoning ("should we use SQLite or PostgreSQL?") โ single-hop, structured input, within their expertise. The chair does meta-reasoning ("has everyone spoken? are there unresolved disagreements? is this ready to close?") โ multi-hop, requires tracking global state.
Recommendation: If budget is constrained, use your strongest available model for the Leader/Chair, and cheaper models for the other roles. The architecture's structural constraints โ turn-taking, guided prompts, cross-validation โ compensate for weaker speakers. But the chair's meta-cognitive load benefits from a more capable model.
Install
hermes plugins install yzy806806/agora
hermes plugins enable agora
hermes gateway restart
hermes dashboard restart # if dashboard is running
Note: Both the gateway and the dashboard need restarting after enabling. The gateway loads plugin tools/hooks; the dashboard discovers plugin sidebar tabs at startup. If you only restart the gateway, the Agora tab won't appear in the dashboard sidebar.
Quick Start
Option A: Conversational setup (no dashboard needed)
Just tell Hermes: "Install the Agora plugin and set up a development team."
Hermes reads the agora-setup skill and handles the full flow:
agora_list_templates()โ see available rolesagora_create_worker(name="leader", role="leader")โ create workersagora_create_team(team_name="alpha", workers=[...])โ form a teamagora_start_project(name="my-project", workdir="/path/to/repo", goal="...", stop_condition="...")โ start
Option B: Dashboard setup
Open hermes dashboard, go to the Agora tab โ Team โ Members:
- Pick a template, give the worker a name (e.g.
alice,bob) - Create as many workers as you need โ including a leader (from the "leader" template)
- Go to Team โ Teams โ select workers, form a team
Templates:
| Template | Icon | Role |
|---|---|---|
| Architect | ๐๏ธ | System design, API contracts, tech selection |
| Developer | ๐ป | Implementation, testing, dependencies |
| Reviewer | ๐ | Code review, security, edge cases |
| Tester | ๐งช | Test strategy, automation, bug reporting |
| DevOps | ๐ | CI/CD, deployment, infrastructure |
| Researcher | ๐ | Web research, trend analysis, information synthesis |
| Writer | โ๏ธ | Content writing, structuring, tone |
| Team Leader | ๐จโ๐ผ | Project monitoring, phase planning, completion detection |
Start a project
In the Projects tab, click "Start Project":
- Name (e.g.
docmind) - Goal (e.g. "ๆ็ปญๅผๅdocmind")
- Stop condition (e.g. "ๆ็จๆงไธๆง่ฝ่พพๅฐๆไผ๏ผๅฏนๆฏๅ็ฑป้กน็ฎ๏ผๅ่ฝๆ ็ผบๅคฑ")
- Working directory
- Team โ select the team you formed
- Heartbeat member โ select a leader worker
- Heartbeat interval โ minutes (default: 15)
Update project mid-flight
The leader can change direction without stopping:
agora_update_project(
name="docmind",
goal="Add multi-tenant support and REST API v2",
stop_condition="All v2 API endpoints tested and documented",
reactivate=True # restart if project was completed
)
AGENTS.md is refreshed automatically โ all workers see the new goal on next spawn.
AGENTS.md โ Single Source of Truth
AGENTS.md is auto-generated in the project workdir. Hermes auto-loads it into every agent's system prompt (leader, discussion participants, and kanban workers) via TERMINAL_CWD context file scanning.
Contents:
- Project name, goal, status, description
- Stop condition
- Team members table:
| Profile Name | Role (Template) | - Active discussions list
- Workflow instructions
Refreshed on (atomic write โ temp file + os.replace):
start_project- Leader heartbeat
agora_update_project- Motion create (
agora_raise_motion) - Motion close (
agora_close_motion)
Heartbeat prompt is minimal โ just a wake-up call. All context comes from AGENTS.md, not prompt injection.
Tools (18)
| Tool | Description |
|---|---|
agora_raise_motion | Start a team discussion |
agora_get_messages | Read discussion messages |
agora_get_result | Get closed discussion result |
agora_list_motions | List active/closed discussions |
agora_close_motion | Close a stale/resolved motion |
agora_create_task | Create a kanban task |
agora_close_task | Close/transition a kanban task (complete, cancel, or submit_review) |
agora_start_project | Start a self-driving project |
agora_stop_project | Stop a project |
agora_project_status | Check project status |
agora_update_project | Update goal/stop_condition mid-flight |
agora_create_worker | Create a worker from template |
agora_list_workers | List all workers |
agora_remove_worker | Remove a worker |
agora_list_templates | List role templates |
agora_create_team | Create a team |
agora_list_teams | List teams |
agora_remove_team | Remove a team |
agora_close_taskactions (v1.8.6+):
completeโ mark task as donecancelโ archive the tasksubmit_reviewโ transition toreviewstatus, auto-assign to reviewer. The kanban dispatcher auto-spawns the reviewer worker. After the reviewer completes, the task goes todone.
Note: All tool handlers return JSON strings (auto-serialized via
_wrap_handler/_wrap_handler_async). Hermes tool registry requiresstr, notdict.
Kanban Hooks
| Hook | When | Action |
|---|---|---|
kanban_task_completed | Worker finishes a task | Write motion result to motions DB (not workers โ memory removed in v1.8.7); if complex task (>1 run or >30min), write skill-creation nudge comment |
kanban_task_claimed | Dispatcher assigns a task | Log claim; inject motion decision as task comment |
kanban_task_blocked | Worker blocks a task | If reason mentions "design decision" or "motion" โ auto-create discussion |
Timeout Configuration
All LLM-related timeouts default to 1 hour (3600s):
| Scenario | Default | Notes |
|---|---|---|
Speakerๅ่จ (speak_timeout) | 3600s | Worker spawned to discuss |
Chair่ฏไผฐ (chair_timeout) | 3600s | Leader evaluates discussion state |
| Dispatch/่ฐ็ | 3840s | speak_timeout + 240s buffer |
| ๆ็ฅจ | 3600s | Same as speak_timeout |
spawn_agent_speak | 3600s | Function default |
spawn_chair_speak | 3600s | Function default |
Hermes HTTP client auto-retries on timeout. Agora subprocess timeout is the hard ceiling โ if exceeded, the worker is marked as failed and the discussion continues.
Architecture
agora/
โโโ plugin.yaml # Plugin manifest (18 tools + hooks)
โโโ __init__.py # register(ctx)
โโโ tools/__init__.py # 18 tool definitions + _wrap_handler
โโโ cli.py # hermes agora CLI
โโโ hooks/__init__.py # 3 kanban hooks
โโโ project_planner.py # Project lifecycle + heartbeat + AGENTS.md (atomic) + on_project_complete deletes tasks
โโโ agora/
โ โโโ utils.py # Shared utilities
โ โโโ discussion/
โ โ โโโ driver.py # DiscussionDriver (speak/chair/vote/dispatch) + _speaker_speak 429 retry (10x)
โ โ โโโ agent_spawn.py # Spawn Hermes agent subprocesses (3600s timeout)
โ โ โโโ chair.py # Chair prompts + speaker prompt builder
โ โ โโโ roles.py # Discussion templates
โ โโโ storage/motions.py # SQLite storage (WAL + busy_timeout=5000)
โ โโโ session_manager.py # Session size tracking + rotation (profile-specific state.db)
โ โโโ worker_templates.py # 8 role templates (SOUL.md rendering, 2-channel Self-Growth)
โ โโโ worker_manager.py # Worker lifecycle (fcntl-locked sessions, _patch_config_toolsets)
โ โโโ team_manager.py # Team + dispatch routing
โ โโโ leader_loop.py # Heartbeat + stuck motion rescue + stale state cleanup (leader: no terminal)
โโโ dashboard/ # Web UI + REST API
โ โโโ plugin_api.py # FastAPI routes
โ โโโ dist/ # Compiled React frontend
โโโ skills/
โโโ agora-setup/ # Operator onboarding guide
โโโ agora-awareness/ # Worker framework knowledge
โโโ agora-deliberation/ # Discussion methodology
License
MIT
Changelog
v1.8.8 โ Speaker 429 retry (10x) + delete tasks on project completion
_speaker_speak429 retry โ When a worker hits API 429 (rate limit) during discussion, the error message was stored directly as the worker's speech โ the discussion continued with empty contributions. Now detects 429/rate-limit/authorization-failed errors and retries up to 10 times with incremental backoff (10s, 20s, โฆ, 100s). Session is cleared on each retry for a fresh start.on_project_completedeletes all kanban tasks โ Previously, when a project completed, only the heartbeat was stopped and status set tocompleted. All tasks remained in the kanban DB. On restart with a new goal, the leader saw old tasks and triedPROJECT_COMPLETEimmediately. Now deletes all project tasks from all tables (tasks, task_events, task_comments, task_runs, task_links). Clean slate on restart.
v1.8.7 โ Delete tasks on completion + memory removal + toolset fixes
- Delete all kanban tasks on project completion โ
on_project_completenow callsdelete_archived_task()for every task in the project. On restart, the kanban is empty. - Worker Self-Growth: 3 channels โ 2 โ Removed
memorytool from workers. Self-Growth is now Skills (skill_manage) + SOUL.md (patch) only. Cross-project memory was not useful (different projects, different stacks); skills already capture reusable knowledge with better structure. - Leader toolset: removed
memoryโ Leader doesn't need it; skills + SOUL.md suffice. - Fixed
patchtoolset warning โpatchis part offile, not a standalone toolset.
v1.8.6 โ Worker toolsets + submit_review + AGENTS.md improvements
- Worker toolsets written to config.yaml from template โ Previously the template's
toolsetsfield was dead code;config.yamlwas copied from global root (hermes-cli= all tools). Now_patch_config_toolsets()writes the template's toolsets intoplatform_toolsets.cliduring worker creation.- Worker toolsets (all 7 roles):
terminal, file, web, skills, todo, session_search. Removed:browser,tts,vision,code_execution,computer_use,cronjob,delegation,clarify,memory. - Leader template toolsets:
file, web, skills, todo, session_search(overridden inleader_loop.pyspawn to addagoraโ noterminal).
- Worker toolsets (all 7 roles):
submit_reviewaction added toagora_close_taskโ Developers submit viaagora_close_task(action='submit_review'). Transitions task toreviewstatus, auto-assigns to reviewer. Dispatcher auto-spawns the reviewer. After review, task goes todone. Leader does NOT need to create separate review tasks.- AGENTS.md Kanban Summary includes review status โ Shows
Reviewcount + "In review" task list + "Ready (queued)" task list. - Leader SOUL.md Step 2: granular crash escalation โ 5-level escalation: crashed 1-2x โ retry; >2x same worker โ reassign/split; running >3 heartbeats โ raise motion; review stuck >2 heartbeats โ check reviewer.
- AGENTS.md Workflow section updated โ Developer:
submit_reviewwhen team has reviewer. Other roles:kanban complete. "Never use Python, terminal, or direct DB calls" warning. Recent Decisions filters 0-step bypassed motions.
v1.8.5 โ Leader restricted toolset + SOUL.md rewrite
- Leader toolset restricted โ no
terminalโ Changed leader spawn toolset fromhermes-cli(all tools) tofile, web, skills, todo, session_search, agora. The leader can no longer bypassagora_raise_motionby calling Python/DB directly via terminal, run tests, or modify project code. Only read files, edit own SOUL.md/MEMORY.md (patch), create skills (skill_manage), and manage project via agora tools. - SOUL.md rewrite โ Identity: removed "reading code, tests" from assess role. Core Constraints: "may read project docs, NEVER write project code". Post-Heartbeat Skill Review (replaces Post-Task โ leader doesn't execute tasks). Self-Growth: "record what you learned, not what you did";
patchonly. - Worker SOUL.md shared sections โ 4 improvements โ Discussion Protocol: fixed terminal contradiction. Post-Task Skill Review: broadened for all roles. Self-Growth:
patchonly, nowrite_file. Researcher: removed duplicate Discussion Protocol section.
v1.8.0 โ Full code audit: motion guards, discussion quality, truncation fix, 20 bug fixes
Comprehensive code review (OCR standard mode + subagent audit) identified and fixed 20 issues across 7 files:
Critical:
agora_close_motionadopted guard โ cannot close a motion as "adopted" with 0 discussion steps or 0 messages. Prevents leader from bypassing the discussion engine.- File descriptor leak โ
log_fdopened per heartbeat but never closed in parent process. Now closed afterPopen. - Discussion min_steps floor โ chair can no longer close/vote before
max(3, len(participants))steps. Ensures every participant gets at least one turn.
High:
- Motion threshold guidance โ SOUL.md now has explicit "Do NOT raise a motion for" list (routine assessment, stale cleanup, duplicate topics, recent stop-condition checks).
- Stop condition cooldown โ heartbeat prompt includes complete_count reminder to prevent re-evaluation.
_has_pending_tasksincludes blocked โ was excluding blocked tasks, causing premature "all done" signals.- Tenant strip bug โ
replace("agora-", "")โremoveprefix("agora-")to avoid stripping interior matches. _infer_stanceoppose matching โ substring match โ regex word boundary, same as support check.agora_close_taskmissing commit โconn.commit()added beforeconn.close().- chair.py f-string injection โ literal curly braces in user input no longer cause KeyError.
- utils.py model regex escape โ
re.escape(model)added. - reactivate cron HERMES_HOME โ already fixed in v1.7.0, confirmed applied.
Medium:
- Output truncation 2000โ8000 โ discussion context, task context, and task body all increased from 2000 to 8000 chars.
_build_historyper-message 500โ1000 โ more context for chair evaluation.- Unused
Optionalimport removed from driver.py. max_steps=0edge case guarded.max_stepsdefault detection uses None sentinel instead of== 30.- Misleading tool count log corrected.
except Exception: passโlogger.warning(...)in 5 critical locations.- reactivate validates
heartbeat_memberbefore proceeding. - Stale cleanup timestamp added to avoid running every heartbeat.
v1.7.1 โ Post-Task Skill Review: mandatory skill creation in worker SOUL.md
- Root cause of 0 self-created skills identified: Hermes' background skill review runs as a daemon thread after the turn completes, but worker processes (
hermes -p <profile> --cli chat -Q -q "...") exit immediately after the task, killing the thread before it can run. - Fix: Post-Task Skill Review section in SOUL.md โ all worker roles now have a mandatory "Before calling
kanban_complete, review your work for reusable knowledge" step. Workers create skills during the task turn usingskill_manage(action='create'), not after via a background thread. - Updated
worker_templates.py(render_soulnow appends_POST_TASK_SKILL_REVIEWto every role) and all 7 deployed SOUL.md files. - Cleaned motion record garbage from reviewer/architect/researcher/writer memory (40KB โ <1KB total).
v1.7.0 โ Discussion speaker tool access + chair retry + task management
- Discussion speakers now have full tool access โ changed
--toolsets agorato--toolsets hermes-cliinagent_spawn.py. Previously, discussion participants (architect, developer, researcher, tester, reviewer, writer) only had the 17 Agora tools โ noterminal,read_file,search_files,web_search,web_extract. This caused 112+ messages across two projects where workers reported they couldn't read code, run tests, or research reference projects. Now speakers have all built-in tools + Agora tools. (Note: In v1.8.6, this was further refined โ speakers now use the worker template toolsets:terminal, file, web, skills, todo, session_search, not the fullhermes-cli.) - Chair open/evaluate retry on non-JSON โ when the chair (leader) returns a non-JSON response, the discussion driver retries once with a stronger "respond with JSON ONLY" prompt before aborting. Prevents
decision=error, steps=0motions caused by occasional LLM formatting failures. spawn_discussion_driveruses global~/.hermes/agora/โ runner scripts and log files now always go to the global agora directory, not the profile-scopedHERMES_HOME. Fixes the issue where leader heartbeat created runner scripts in~/.hermes/profiles/leader/agora/but they couldn't be found by other processes.- Stuck motion auto-cleanup โ motions stuck at
steps=0for more than 5 minutes are now automatically closed aserrorby_rescue_stuck_motions. Previously these stayed indiscussingforever, blocking leader from closing them. - Kanban task counts filtered by tenant โ
_count_tasks()now accepts atenantparameter. Dashboard project list and detail views show per-project task counts instead of global totals. Fixes "kanban count not resetting" for new projects. - New
agora_close_tasktool โ leader can now close stale blocked/running tasks directly (action=completeorcancel) without needing kanban CLI orHERMES_KANBAN_TASKenv var. SOUL.md updated with stale task cleanup instructions. (In v1.8.6, asubmit_reviewaction was added for code review workflow.) complete_countinitialized on new project โ new projects now start withcomplete_count: 0andcompletion_check_pos: 0instead ofNone.- Researcher SOUL.md strengthened โ researcher must use
web_search,web_extract,terminal, andread_fileto investigate topics. Cannot rely on memory alone. Must read reference project source code before giving recommendations.
v1.6.2 โ Leader fresh session + AGENTS.md enhancement + kanban gate
- Leader uses fresh session every heartbeat โ no more
--resume. Accumulated session history caused attention degradation: leader repeated already-completed motions, ignored SOUL.md constraints, claimed "no running tasks" without checking. Context now comes entirely from AGENTS.md + MEMORY.md + SOUL.md. - AGENTS.md enhanced โ now includes Kanban Summary (running/ready/blocked/done counts + task list), Last heartbeat timestamp, and Recent Decisions (last 3 adopted motions). Gives fresh-session leader full project state.
- PROJECT_COMPLETE kanban gate โ
check_project_completenow queries kanban by tenant before counting PROJECT_COMPLETE. If running/ready/blocked tasks exist, rejects with[SYSTEM] PROJECT_COMPLETE rejectedmessage in log. Multi-project safe (tenant-filtered). - Cleaned worker memory โ 5 workers had ~34K chars of stale motion records (pre-v1.4.7 hooks). Cleaned to only retain technical experience.
v1.6.1 โ Code audit fixes + task creation guardrails
start_projectreactivate now detects stale cron โ same stale-detection logic asupdate_project: verifies cron_id againsthermes cron listbefore reuse.stop_project/on_project_completeclearheartbeat_cron_idโ previously deleted the cron job but left the stale ID in project JSON, causing reactivate to skip cron creation.- Task creation guardrails in SOUL.md + heartbeat prompt โ leader must check existing tasks before creating new ones (prevent duplicates); must never assign tasks to self (leader is facilitator, not implementer).
- Fixed tool count in log โ 16 โ 17 (agora_update_project added in v1.5.0).
v1.6.0 โ Reactivate fix: reset completion state + heartbeat prompt
- Reactivate now resets
complete_count,leader_session_id,completion_check_posโ Previously, reactivating a completed project left stale completion state. Leader would read old memory, see complete_count > 0, and immediately output PROJECT_COMPLETE without evaluating the new goal. - Heartbeat prompt warns about goal changes โ Added "If the goal or stop condition has changed since your last heartbeat, treat this as a NEW project phase. Do NOT carry over previous PROJECT_COMPLETE decisions."
- Reactivate verifies cron job existence โ Checks
hermes cron listto detect stale cron IDs (deleted during PROJECT_COMPLETE but still in project JSON). start_projectpreserves existing project data โ No longer overwrites all fields when project already exists (from v1.5.9, now also in reactivate path).- Schema expanded โ
agora_start_projectnow acceptsdescription,stop_condition,team.workdirno longer required for existing projects. - Verified end-to-end โ Reactivated docmind project with new goal, leader correctly identified new phase, raised motions, team discussed and adopted, tasks being assigned.
v1.5.9 โ Fix start_project overwriting existing project data
agora_start_projectno longer overwrites existing projects โ if a project already exists, it preserves all fields (team, goal, stop_condition, heartbeat_member, etc.) and only reactivates. Previously, callingstart_projecton an existing project would reset everything to defaults.- Schema expanded โ added
description,stop_condition,teamparameters.workdiris no longer required (preserved from existing project). All new params only override if non-empty. - Heartbeat cron auto-recreated โ if a reactivated project has
heartbeat_memberbut noheartbeat_cron_id, the cron job is automatically recreated.
v1.5.8 โ Dashboard project settings UI
- Project Settings panel in dashboard Overview tab โ edit goal and stop_condition inline, reactivate completed/stopped projects with one click. Calls
PUT /api/plugins/agora/projects/{name}. - Added
agora-form-fieldandagora-inputCSS classes.
v1.5.7 โ Hermes v0.18.2 compatibility fix
kanban_db.add_commentsignature changed โ now requiresauthorparameter. Updated all 3 call sites in hooks.- Compatibility verified against Hermes v0.18.2 (2026.7.7.2):
ctx.register_tool/register_hook/register_cli_commandโ unchanged โ- kanban hooks (claimed/completed/blocked) โ still in VALID_HOOKS โ
_normalize_handler_resultrequires str โ Agora uses_wrap_handlerโTaskclass fields (tenant, body, assignee, started_at, completed_at) โ unchanged โcreate_task/block_task/get_taskโ backward compatible โ- AGENTS.md context file loading โ unchanged โ
v1.5.6 โ Timeout unification + tool handler fix + dashboard emoji + onboarding
- All LLM timeouts unified to 1 hour (3600s) โ speak_timeout, chair_timeout, vote, dispatch, spawn defaults. Removed
min(speak_timeout, 240)cap. Local models with long context preprocessing need generous timeouts. - Tool handler return type fix โ Hermes registry requires
str(JSON), notdict. Added_wrap_handler/_wrap_handler_asyncat module level. All 17 tools now register and return correctly. - Dashboard emoji encoding โ JS byte escapes (
\xF0\x9F) โ Unicode escapes (\uXXXX). Fixed garbledรฐโ๐. - agora-setup skill โ New onboarding skill for operators (step-by-step: create workers, form teams, start projects).
- Dead code cleanup โ Removed
_build_active_motions_summary()(superseded by AGENTS.md).
v1.5.2 โ AGENTS.md as single source of truth + project updates
- AGENTS.md now contains: goal, stop_condition, team members (name โ role template), active discussions. Written atomically (temp + rename). Refreshed on: start_project, heartbeat, project update, motion create/close.
- Heartbeat prompt simplified โ 6 lines, no more inline context injection. All context via AGENTS.md auto-load.
agora_update_projecttool โ change goal/stop_condition mid-flight.reactivate=truerestarts completed projects.- Motion memory cleanup โ decision records only written to leader's MEMORY.md, not workers. Workers keep their own technical experience.
- Skill creation nudge โ complex tasks (>1 run or >30min) get a kanban comment prompting the worker to save reusable workflows.
- 17 tools (added
agora_update_project).
v1.4.4โv1.4.6 โ Code audit fixes
- Chair prompt: prevent false truncation calls
- Driver: MAX_SAME_SPEAKER=2 hard limit
_has_pending_tasks()now accepts project_name with tenant filter- SQLite busy_timeout=5000 for concurrent safety
_find_project_for_task()uses task.tenant instead of string matching- Worker session JSON uses fcntl.flock for concurrent safety
- Stale discussion_state cleanup on every heartbeat
- Session manager queries profile-specific state.db
- 15 issues fixed across 3 releases
v1.4.3 โ Discussion state consistency and stale motion recovery
discussion_statecleaned on close- Stuck discussions with messages recovered
agora_close_motiontool added- Speaker session preserved on timeout
- Timeout increased (900s/300s)
v1.4.0โv1.4.2 โ Discussion engine reliability
- Session-not-found recovery
- Empty tool argument handling
- Stale memory poisoning fix
- Dead session cleanup
- Code cleanup and hardcoded path fixes
v1.3.0 โ Discussion engine critical fixes
- Leader and participants now get
--toolsets agora(later changed tohermes-cliin v1.7.0, then refined to specific toolsets in v1.8.6) - Stuck motion recovery via
_rescue_stuck_motions()