[portfolio](https://geonwoo.kim/en/portfolio) › Lukuku

# Internal operations agent built on Hermes Agent

https://geonwoo.kim/en/portfolio/lukuku-ops-agent

Period: 2026.04 — 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

Team: Internal agent system · Design, implementation and operations

Role: Agent permission design · Operations server setup · Automated incident handling · Model evaluation

Built tools: [offon](https://geonwoo.kim/en/portfolio#tools) · [vat](https://geonwoo.kim/en/portfolio#tools)

Hermes Agent · Python · macOS · launchd · OpenViking · BGE-M3 · Slack

- 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

- Investigation · Read-only

  Root causes and technical evidence · no product code changes

- Implementation · Isolated

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

- Verification · Independent 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 archive · Archive

  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 work → Results, evidence and risks returned → Coordinator checks the source → Applied after approval and checks → Completion confirmed by a fresh query


[Sales reconciliation and integration operations between a sports brand's Korean online store and its ERP](https://geonwoo.kim/en/portfolio/lukuku-commerce-erp) · [offon · company-wide work management system](https://geonwoo.kim/en/portfolio/offon)
