Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ needs to be useful:
| 📋 **Task board** | A Trello-style Kanban board per workspace: create tickets, assign them to agents, drag them across *Backlog → Todo → In progress → In review → Done*. A ticket that lands in *Todo* starts its agent. Every ticket works in its own git worktree of the workspace's repository (a cloned URL or a local folder), on its own branch, so agents running side by side never get in each other's way. When the agent on a **Coding** ticket is done, Godmode pushes its branch and opens a pull request — merged pull requests close their ticket. Reply to a ticket to ask for changes; the pull request updates. Archive finished tickets (one by one, or a whole *Done* column) to keep the board focused — they keep everything and come back in one click. Tickets carry a **priority**, a **due date** and **labels** (filter by them; urgent ones start first and the agent is told the deadline). Every ticket keeps a **timeline** — each delivery with its full result, your feedback, the agent's notes, blocks and pull requests — and shows what it **cost** and how long the agent worked. Review in one click (**Approve** / **Request changes** / **Reopen**); A run that fails on a hiccup (an API error, a crash, a restart) is **tried again on its own** — twice at most — so work gets done without you; *Blocked* is left for what needs you, and says why — the agent needs something, the run kept failing — and offers the matching way on. A ticket whose agent set itself a follow-up shows *Waiting — continues tomorrow at 10:00* instead of landing in review. A ticket can **wait for** others (*Reconcile October* waits for *#3 Get the bank statements*): it stays in Todo, says so, and starts by itself once they are delivered — with their results in its brief. Big tickets split into **parts**: a lead hands them to its team (or you add them), its ticket waits until they're delivered and then continues with their results — approve the whole and its parts are done too. |
| ⚡ **Automations** | Work starts when it happens: on a schedule (“weekdays at 08:00”), when something happens in a connected app (a new email, a Slack message, a calendar event, a Notion update), when a condition you describe comes true (“competitor pricing changes”), or when a webhook is called. Describe it in one sentence and Godmode sets it up. |
| ⏰ **Follow-ups** | When a task needs waiting — a reply to an email, a delivery, a build, office hours — the agent sets itself a time and picks the chat up again on its own, with all the context, like a coworker who says “I'll check back tomorrow at 10”. You see when it comes back and can continue now, move it or cancel it. |
| **Heartbeats & watchdog** | Agents with real work keep moving between your prompts. Switch on an agent's **heartbeat** (every 15 minutes to once a day, optionally only in working hours on weekdays) and it wakes on its own rhythm: it picks up its tickets that stand still, tries a failed one again, starts one that never did — each in the ticket's own chat, told exactly what changed since it last worked on it — and runs its standing **checklist**. Every beat ends with a trail on the agent's *Heartbeat* tab; a beat with nothing to do is quiet and costs nothing. The **watchdog** looks at every run while it works: a run that shows no sign of life, or calls the same tool with the same result over and over, is stopped with a precise report of where it stood. Board tickets try again once on their own; anything else is escalated to you. |
| 🤝 **Delegation** | Agents hand tasks to peer agents or spawn short-lived subagents. The Godmode agent can list, check, create and configure all agents. Follow a handoff both ways: open the teammate's chat from the handoff card, and jump back to the chat that asked from there. |
| 🧰 **Claude Code & MCP** | Build your team from the terminal: connect Claude Code — or Cursor, Codex, Claude Desktop, any app that speaks MCP — and say *“Create a Godmode agent that…”*. One click in **Settings → Claude Code & MCP** adds Godmode to Claude Code for every project. The app gets Godmode's own management tools (agents, automations, tasks, runs, VMs) through a key of its own, with full or look-only access; scripts reach the same tools with `godmode call`. Passwords, 2FA codes and settings stay out of its reach. |
| 🏢 **Team & org chart** | Give every agent a role (*Bookkeeper*, *Research analyst*) and a lead; agents are told who does what and who they report to, so work goes to the right one. The **org chart** shows the whole team with what each is doing right now. Status tells the truth — *Working in 2 chats*, *Queued*, *Needs your answer*, *Last run failed* (one click opens the run) — and each agent's page shows **what's on its plate**: live work, waiting chats, board tickets, follow-ups and its next automations. Duplicate an agent in one click; messages from automations, the board or other agents are labelled as such, never shown as yours. Or start a **whole team** in one click — *Back office*, *Marketing*, *Sales*, *Product & QA*: a lead and its reports, wired up, with their schedules. |
Expand Down Expand Up @@ -161,6 +162,10 @@ needs to be useful:
<td><img src="docs/screenshots/followup-waiting.png" alt="An agent waiting for a signed contract, set to continue tomorrow at 09:00" /><br /><sub><b>Follow-ups</b> — the agent sets itself a time to continue; move it, cancel it or continue now</sub></td>
<td><img src="docs/screenshots/followup.png" alt="The agent picked the chat up again at the time it set and finished the task" /><br /><sub><b>Back on it</b> — at that time the agent picks the chat up again, with all the context</sub></td>
</tr>
<tr>
<td><img src="docs/screenshots/heartbeat.png" alt="An agent's Heartbeat tab: on, beating every hour in working hours, with its board" /><br /><sub><b>Heartbeat</b> — the agent wakes on its own rhythm to move its tickets forward and run its checklist</sub></td>
<td><img src="docs/screenshots/heartbeat-beats.png" alt="Recent beats and the watchdog's interventions with their reports" /><br /><sub><b>Beats & watchdog</b> — every beat leaves a trail; stalled or looping runs are stopped with a precise report</sub></td>
</tr>
<tr>
<td><img src="docs/screenshots/pause.png" alt="A paused chat with a Continue button above the message box" /><br /><sub><b>Pause & continue</b> — the agent finishes its step, stands still and picks the work up where it stopped</sub></td>
<td><img src="docs/screenshots/pause-limit.png" alt="A chat waiting for Claude's session limit to reset, set to continue by itself" /><br /><sub><b>Usage limit</b> — the work waits for the reset and continues by itself, with what you wrote meanwhile</sub></td>
Expand Down Expand Up @@ -507,6 +512,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md).
- [x] Working folders, Claude Code slash commands, live browser preview in chat, desktop auto-update
- [x] Computer use: share a window (background control via Cua Driver), a display, every monitor or a browser tab
- [x] Automations: schedules, app events (Composio triggers), plain-language conditions and webhooks
- [x] Heartbeats: agents wake on their own rhythm to move their tickets forward and run a checklist; a watchdog stops stalled and looping runs
- [x] Agents working in a dedicated macOS VM (Tart / Virtualization.framework): shell, files and screen, assigned per agent, chat or workspace
- [x] API tools: any API with a key (Nano Banana, OpenAI, ElevenLabs…) for agents, global / workspace / agent
- [x] SSH servers: agents run commands, edit files and copy files on remote machines — password or key, sudo, pinned host keys
Expand Down
3 changes: 2 additions & 1 deletion apps/desktop/src/components/agents/detail/chats-tab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useEffect, useState, type ComponentType } from "react";
import { Link } from "react-router";
import { motion } from "motion/react";
import { formatDistanceToNowStrict } from "date-fns";
import { Archive, ArchiveRestore, MessageSquare, MessagesSquare, Moon, Pin, Plug, Plus, Search, Share2, SquareKanban, Trash2, Workflow } from "lucide-react";
import { Archive, ArchiveRestore, HeartPulse, MessageSquare, MessagesSquare, Moon, Pin, Plug, Plus, Search, Share2, SquareKanban, Trash2, Workflow } from "lucide-react";
import type { Agent, Conversation, ConversationOrigin } from "@godmode/shared";
import { errorMessage } from "@/lib/api";
import { useArchivedConversations, useConversations } from "@/lib/hooks";
Expand Down Expand Up @@ -31,6 +31,7 @@ const ORIGIN: Record<ConversationOrigin, { icon: ComponentType<{ className?: str
telegram: { icon: PLATFORMS.telegram.glyph, label: "Telegram" },
teams: { icon: PLATFORMS.teams.glyph, label: "Microsoft Teams" },
task: { icon: SquareKanban, label: "Task" },
heartbeat: { icon: HeartPulse, label: "Heartbeat" },
};

function useDebounced<T>(value: T, ms = 250): T {
Expand Down
Loading
Loading