v2.2.0: Your AI Employees Now Have a Heartbeat (And Tap You On The Shoulder When It Matters)
For two years now, every conversation about AI employees has been bounded by a quiet assumption. You ask, they answer. You assign, they execute. The agent is a coworker, yes, but a coworker who only ever speaks when you speak first.
v2.2.0 changes that.
This release is bigger than a normal point bump (which is why we cut a minor instead). Three things land together: a full Heartbeat engine that lets every employee check in on their own schedule, a Twilio voice stack toggle that gives each employee a choice between Gemini Live and ElevenLabs premium voices, and manual triggers for both tasks and skills so the user can fire either ad hoc. Plus a sidebar redesign, two new mandatory skills, and a handful of bugs we owed you.
The Heartbeat story is the big one. Let's start there.
Heartbeat v3: your employees can now initiate
Every employee on a v2.2.0 instance can now be configured to wake itself up every N hours. One hour, two, four, eight, twelve, twenty-four, or disabled. You also pick active hours (so the agent does not ping you at 3am) and a timezone (so "active hours" actually means what you think it means).
When a tick fires, the engine injects a short [HEARTBEAT] prompt into the agent's session. The agent reads its HEARTBEAT.md (more on that in a second), looks at whatever it is supposed to be watching, and writes one of two responses:
HEARTBEAT_OKif there is nothing worth your attention. Silent. You never see it.NOTICE: <summary>if there is. Delivered to the chat as a compact badge, or optionally to a configured channel like Slack or email.
The point is not that the agent runs a cron job. We have had scheduled tasks for months. The point is that the agent decides what is worth surfacing. The cron just hands it the opportunity to look.
In practice, this means the EA can notice that a meeting reschedule is overdue and ping you. The sales rep can flag that a hot prospect went cold five days ago. The customer success manager can spot that a strategic account has not opened a ticket in a way that breaks their pattern. None of that requires you to ask. The agent is paying attention.
The interactive HEARTBEAT.md flow
A heartbeat without context is noise. Every employee needs a personalized brief about what they are watching, what counts as worth surfacing, and what to stay quiet about. That brief lives in a file called HEARTBEAT.md at the root of their folder.
Earlier drafts of this feature gave you a template (one for fullstack devs, one for secretaries, one for sales reps, and so on). We threw all of that out. Templates are a tax. They assume your team looks like our imagined team.
v2.2.0 ships an interactive flow instead. You click Create HEARTBEAT.md. The agent reads its own CLAUDE.md, queries its memory database, looks at recent conversation history, and then asks you three to five targeted questions. After you answer, it writes the file in your language with a defined structure: who I work for, what I am watching, how I help proactively, what to surface vs stay quiet, things my employer hates, notes, and the response protocol.
The flow takes about ninety seconds. At the end you have a custom configuration shaped to your actual workflow, not to a category we guessed you fit into.
Twilio voice stack: Gemini Live or ElevenLabs
Each employee with a Twilio phone number now has a choice. The default stays Gemini Live, the same sub-second latency stack we have run since v2.1.x. The new option is ElevenLabs ConversationRelay, which trades a bit of latency for dramatically better voice quality. The picker pulls from the existing ElevenLabs catalog of 4,026 voices across 32 languages, with gender, accent, and search filters, plus audio preview.
Switching stacks updates the Twilio webhook URL immediately, so the very next call uses whichever voice you picked. We also added a webhook auto-sync at backend startup, which rewrites the Twilio voice URL to the canonical one on every boot. This protects against pinggy or ngrok tunnels going stale, CNAME migrations, or any other situation where someone touched the URL manually for debugging and forgot to put it back.
Manual triggers everywhere
A long-standing gap in the product: scheduled tasks and skills had no manual run option. If you wanted to fire a daily blog pitch right now instead of waiting for tomorrow's 9am tick, your only option was to ask the agent in chat, which is fine but feels like asking permission from your own employee.
v2.2.0 adds two buttons:
Run now on every scheduled task. One click fires the task immediately, bypassing the schedule. The chat shows a compact "Manual run: blog pitch" badge with a purple Play icon, so you can tell it apart from cron-driven ticks at a glance.
Brief and prepare on every skill. One click asks the agent to read the skill's documentation, install any missing dependencies, and explain in two or three sentences what the skill does and what you need before using it. The agent does not actually run the skill, it just gets ready. The chat shows a "Briefing skill: video-generator" badge with an amber BookOpen icon.
Both buttons close their respective sheets on success so you immediately see the chat response. No tab juggling.
Cron intervals: every N minutes or hours
Scheduled tasks now support a fourth frequency: interval. Run something every N minutes (1 to 59) or every N hours (1 to 23), in addition to the existing daily, weekly, and monthly modes. Useful for short polling loops, periodic checks, and anything that does not fit a clock-time schedule. The UI hides the "time of day" field when interval is selected, since the schedule has no time component.
A sidebar that finally makes sense
The Edit Employee sub-menu had thirteen flat items. v2.2.0 splits them into four collapsible groups, each with its own icon:
- Identity: Profile, Appearance, Voices, Tags
- Brain: CLAUDE.md, Skills, MCP Servers
- Automation: Tasks, Heartbeat, Webhooks
- Communication: Email, Contacts, Twilio Voice
Team Isolated moved out of Edit Employee entirely. It is a permission toggle, not an identity attribute, so it now sits as a standalone toggle right below the Edit Employee group.
Two skills are now mandatory
web-publish (shipped last week) and task-scheduler are now installed unconditionally on every new employee, regardless of whether you create from scratch, use the guided hire wizard, or pick from the catalog. The reasoning is the same for both: any agent that can publish its work to a live URL and schedule its own follow-ups is fundamentally more capable than one that cannot, and the cost of including them by default is zero.
Bug fixes worth knowing about
Four worth flagging:
- Chat freeze on auto-reconnect. A stale closure in the WebSocket handler was capturing a null employee state during route changes, freezing the chat until a manual refresh. Fixed with a synced ref pattern across every handler that reads employee state.
- The
??:??display on*/Ncron intervals.parseIntwas returning NaN on non-numeric cron parts and rendering "Every day at NaN:NaN" as??:??. Fixed with explicit interval syntax detection plus a NaN safety guard. - Radix-ui accessibility warnings on a handful of sheets and dialogs missing required titles or descriptions. Fixed with screen-reader-only headers and explicit
aria-describedby={undefined}where the absence was intentional. - AdminUsers invite dropdown had a white background on dark theme and a leftover
5min testdebug option. Both gone.
What this release is really about
Looking at the change list, you might be tempted to read v2.2.0 as a grab bag: a feature here, a toggle there, a bug fix at the bottom. The actual shape is more focused than that. Heartbeat v3 is the headline because it changes what an AI employee is. Before, an agent was something you talked to. Now, an agent is something that can talk to you first, on its own schedule, when it has something worth saying.
That is the line we have been chasing for two years. We are not all the way there. But we are closer.
Want to test the most advanced AI employees? Try it here: https://Geta.Team