Internal operations agent built on Hermes Agent

Period  — Present

An internal operations agent that staff call from Slack and Telegram. It runs on Nous Research's Hermes Agent on a single office Mac mini. It assigns each request to the right agent, collects the results and replies in the same thread. I designed, built and operate it.

Agent that splits Slack requests across nine role‑specific agents
and handles errors through deployment and recovery checks

Hermes AgentPythonmacOSlaunchdOpenVikingBGE‑M3Slack

  • Task lookup, task creation and leave requests handled in Slack threads
  • A monitoring agent that turns requests in client channels into tasks · no permission to post in client channels
  • A personal agent for each employee, refreshed daily from their Slack conversations
  • Always on through 33 launchd jobs on one Mac mini · installed files checked against source every 5 minutes

Three fallback models in name only

Problem
Once a conversation grew to about 141k tokens, replies took up to 1,221 seconds. Of the three fallback model slots, one had expired credentials and two used the same provider as the main model.
Solution
The cause was that compacting the large conversation hit a 300‑second limit and failed. Under a rule against paying through API keys, I built a local adapter that calls Claude through a subscription account. I connected it as a fallback path on a different provider from the main model.

Waiting for approval on every error

Problem
At first the agent fixed only offon errors, and fixes and deployments needed human approval.
Solution
Handed errors from every project to the agent, from root‑cause investigation through deployment and a recovery check. For a false alarm, it fixes the detection rule instead of muting the alert. Humans approve only five things: external messages, transactions and refunds, deleting original records, permission changes and updates to company records.

Personal agents citing made‑up links

Problem
An agent answering on an employee's behalf must not cite links its tools had not returned.
Solution
Compared models on nine questions and scored an answer 0 if it used even one link the tools had not returned. In its first real conversation, the agent never called the wiki tools. I updated its instructions to call the tools promptly and follow a specified lookup order. Candidates scored 2.86–4.54 out of 5, and none produced a made‑up link.

Company records a day behind

Problem
The company decision records were pulled once before dawn, so the agent could not find decisions made that day.
Solution
Added record syncing to the collection job that runs every 10 minutes. Confirmed that the same question now gets an answer based on that day's decision.

Architecture

Coordinating agent

Interprets · plans · assigns · hands off · verifies · decides · checks results against the actual source

Knowledge and memory

  • Company records

    Goals · decisions · operating rules · no updates without human approval

  • Operations settings repository

    Agent settings · execution rules · kept separate from company records

  • Hermes Agent built‑in memory

    Separate memory for each agent

  • OpenViking search

    Knowledge and conversation search · results not treated as company records

Execution and control

  • Systems the coordinator owns

    offon · company records · settings repository · credentials · nothing marked done on a worker's report alone

  • Stage handoff ledger

    Task · done criteria · owner · review · long runs · audit · retries

  • Scope and approval

    Limited execution scope per role · workers do not reassign work · external messages need separate approval

Development

  • InvestigationRead‑only

    Root causes and technical evidence · no product code changes

  • ImplementationIsolated

    Separate workspace · local tests · no final commit, push, merge or deployment

  • VerificationIndependent QA

    Checks test evidence · pass or reject · final changes stay with the coordinator

Operations

  • Slack monitoring

    Collects public channel messages · posts requests to offon · decisions return to the coordinator

  • Slack source archiveArchive

    More than 500,000 messages · daily collection from public channels except private and webhook rooms

  • Staff records

    Organizes HR information · acts only within HR scope

  • Personal tasks

    Personal offon tasks · leave · half‑day leave · approval stays with the coordinator

  • Staff answers

    Read‑only offon access · an answer to staff is not company approval

Operations alerts

  • Error alert relay

    Passes Slack webhook alerts from the error alert channel to the coordinating agent · runs no tasks

Role workResults, evidence and risks returnedCoordinator checks the sourceApplied after approval and checksCompletion confirmed by a fresh query