Smart Secretary — Agent Suite with Human Approval Gate

Role: Product Manager & AI Automation Lead

Automation gets the work done fast, and then one day it does something it should not have. This panel keeps the speed and puts a stop in front of it: the agent works alone until it reaches a decision that belongs to a person, then halts and waits — approval resumes it from where it stopped, rejection ends it.

Ten screens in four groups: Home (overview · daily report · tasks · approval decisions) · News (property news · news archive) · Operations (agent management · error log) · System (agent monitoring · users and roles). They gather in one place what used to be scattered: what the agents did, what awaits a decision, and what broke. Twelve agents run behind the panel on self-hosted n8n with local models.

What sets it apart is that the guards are built into the path rather than written into a policy: a settled request is never settled twice, even when the second decision arrives from an outside channel · an agent with no runs shows “—” instead of a misleading zero · error severity is computed when displayed, so it never goes stale · and permissions bind to the button, not the screen alone. And when an approval creates a task automatically, it is born in progress and linked to the original request's id, so the thread is never cut.

AI AgentsHuman-in-the-LoopApproval Gaten8nSelf-hostedTask ManagementRole-Based AccessArabic RTL

Key Features

Stops Before Execution, and Never Decides Twice

The agent halts at the decision: approval resumes, rejection ends it — a second decision is answered "already decided".

One Daily Report From Three Sources

Tasks, approvals and errors merge into one log, each type with its own display rules — and the screen is read-only by design.

News That Learns What You Ignore, and Mutes It

"Not interested" raises the weight of the item's keywords; past the threshold, matching news is filed automatically — never asked twice.

Agent Management & Monitoring

Each agent card carries its runs and success rate — and an agent with no runs shows "—" instead of a misleading zero.

An Error Log Whose Severity Is Never Stale

Severity is computed at display time, never stored — and the re-run button appears only on errors still unresolved.

Permissions at the Button, Not Just the Screen

Every button is bound to a permission and roles accumulate — whoever lacks one sees "view only" instead of the buttons.

A Card That Vanishes on Trust, and Returns on Failure

An approval card disappears the moment you decide, without waiting for the server — and comes back if the send fails, a conflict answered "already decided".

When the Server Falls, It Says So

On a lost connection the panel shows a warning banner and labels its data as sample — it never pretends its numbers are live.

The Business Problem

Automation without oversight does what it should not; automation reviewed step by step is no longer automation. And what it did and what awaits your decision sit in a message here, a mailbox there, and a third log — so nobody sees the whole picture, and one request can be decided twice by two people who cannot see each other.

Why We Built It

One control point placed exactly where the decision lives — neither before nor after: the agent runs freely until it reaches something needing permission, then stops and holds. Around that point sits a ten-screen panel gathering everything that needs looking at — today's merged log, the approval queue, agent health, the error trail — so "what is waiting on me?" has one answer on one screen. And because the halt is real rather than advisory, the state itself carries the guard: a request is decidable only while undecided, which is what makes a second channel safe to keep.

How We Built It

The twelve agents are workflows on self-hosted n8n against local models, so office data never leaves the organisation; the panel is a React interface over an Express API and a Postgres schema. The approval gate suspends a running workflow and keeps it alive until a decision arrives, resuming from its own point rather than from the start — which is why double-decision immunity is a requirement, not a refinement: a suspended workflow that accepts two decisions runs twice. Derived values are computed at read time rather than stored — task buckets, error severity, agent success rate — and permissions are enforced on the server, with the client's copy treated as a display mirror rather than a source of truth.