PM Agent
A fleet of 8 specialised AI workers that run on cron + events for your workspace — sending end-of-day digests, weekly retros, slip alerts, follow-up nudges, and more. The PM either approves their proposed actions or the agent auto-executes (depending on mode); every send is audited.
Key concepts
- Agent: A focused AI worker with one job (e.g. EOD Digest summarises end-of-day activity; Weekly Plan allocates next week's tasks).
- Run: One execution of an agent. Triggered by cron, an event, or a manual button.
- Decision: What the agent proposes during a run. Lives in the database as a record you can review, approve, reject, or undo.
- Subscription: Who receives an agent's output, over which channel (Slack DM, email, or in-app).
- Mode: How aggressive the agent is — observer (logs only), suggester (proposes + waits for approval), actor (executes immediately). Set per agent in Settings → Policies.
- Skip reason: When an agent does NOT run (budget exceeded, policy off, AI opt-out, etc.), the skipped run is recorded with the reason so silence isn't mysterious.
- Dry run: A test execution that produces decisions in the database but skips all side effects (no Slack DMs sent, no task mutations).
The 8 Agents
Three are event-driven (fire on task changes). Five are cron-driven (fire on schedule). Each can be toggled independently in Settings → Policies.
| Agent | Trigger | What it does | | --- | --- | --- | | Task Intake | When a task is created | Ensures new tasks have enough info (title, assignee, deadline). DMs the creator if anything is missing. | | Smart Assigner | When a task is created | Proposes the best assignee given workload, skill match, and Goal alignment. | | Blocker Resolver | When a task is marked blocked | Diagnoses the blocker, drafts an unblock plan, optionally escalates. | | Follow-up | Every 15 minutes during work hours | Checks in on in-progress tasks. Sends a Slack DM with three buttons: On track / Stuck / Done. | | EOD Digest | Daily at 5:00 PM | Summarises the day's team activity and flags blockers. Goes to subscribed recipients. | | Weekly Retro | Monday at 9:00 AM | Last week's activity by person and by project. Highlights + concerns. | | Weekly Plan | Friday at 4:00 PM | Next-week allocation matrix (task × person × day) plus recommendations. | | Slip Detector | Hourly during work hours | Flags tasks at risk of slipping (overdue or due within 3 days). No LLM cost. |
Quick Start (3 minutes)
Step 1: Enable an Agent
- Go to Agents → Settings → Policies from the sidebar.
- Find the agent you want — start with EOD Digest for the smoothest first run.
- Click Enable. A default policy is created in
suggestermode (every decision waits for your approval).
[Screenshot: Policies list with the EOD Digest agent toggled on]
Tip: To experiment without risk, click Test Run on the agent's detail page. It produces decisions but skips all delivery.
Step 2: Pick Recipients
- Go to Agents → Settings → Subscriptions.
- Click Add subscription: pick a user, an agent, and a channel (Slack DM, email, or in-app). Click Save.
- To onboard yourself quickly, expand Subscribe one user to every agent and pick yourself + Slack. One click subscribes you to all 8 agents.
No subscribers? The report still gets sent — by default it falls back to the workspace owner over Slack so fresh tenants see output without configuration.
Step 3: Set Goals + Commitments (optional)
- Go to Agents → Strategy.
- Click Add goal — give it a title and target date. The agent uses Goals to rank task priority.
- Click Add commitment — promises with deadlines (e.g. "Ship onboarding v2 to Acme by Mar 15"). The Slip Detector flags tasks that endanger a commitment.
[Screenshot: Strategy page with Goals and Commitments lists, Add buttons in the headers]
Page-by-Page Guide
Overview (/app/agents)
Your landing page. Read top-to-bottom:
- Stat strip — total runs, completed, pending approvals, acceptance rate, monthly budget.
- Cost breakdown — month-to-date per-agent spend so you know where tokens went.
- Agents — one card per agent showing status, next scheduled run, recipient count, and last decision count. Click a card to drill into that agent's detail page.
- Recent activity — chronological feed of agent runs, grouped by Today / Yesterday / This week / Earlier. Each row narrates the run in plain English ("Weekly Retro produced 3 decisions", "Slip Detector skipped — budget exceeded").
- Ask the agent anything — a quick link to the AI Assistant where you can ask ad-hoc questions like "What's slipping?" or "Who should own this task?"
If no agents are enabled, a 3-step onboarding panel walks you through enabling EOD, picking recipients, and setting strategy.
Agent Detail (/app/agents/types/<agent>)
Click any agent card on Overview to land here. Shows:
- Header — agent name + description + status badge + Test Run / Run Now buttons.
- Schedule card — cron pattern in plain English ("Daily at 5 PM") plus the actual next-run timestamp.
- Recipients — who's subscribed, over which channel, with a health badge: green (last delivery succeeded), red (delivery failed — hover for the error), gray (never delivered yet).
- Recent runs — last 10. Click a row to open the full run detail.
- Recent decisions — last 10. Click to open the decision with its rich UI (report tabs, embedded plan matrix, etc.).
- Memory — what the agent "remembers" between runs (last week's context, recent decisions, etc.). Click Clear memory to reset.
Decisions (/app/agents/decisions)
Every decision the agent ever proposed, filterable by status: pending / approved / rejected / executed / failed. Click a row to open detail.
Decision Detail (/app/agents/decisions/<id>)
The richest page in the agent module:
- For reports (Weekly Retro / Weekly Plan / Slip Detector alerts), the full visual report is embedded — tabs for "By person", "By project", "Matrix", with utilization bars and contributor pills.
- For DMs and emails, you see a styled preview of exactly what will be sent.
- Below: three collapsible JSON inspectors (reasoning / proposed action / source data) for power users.
- Delivery panel shows how many Slack DMs / emails went out, when, and any failures.
- Approve / Reject buttons if the decision is still pending.
- After approval: thumbs feedback to tell the agent whether the decision was actually helpful. This feeds the learning loop.
- Undo card (24h after execution) reverses the side effects.
Runs (/app/agents/runs)
Audit log of every run. Manual trigger toolbar at the top lets you fire any agent on demand. Status badges:
- completed — agent ran and produced decisions
- skipped — agent didn't run (budget, policy off, AI opt-out — reason shown inline)
- failed — agent ran but threw (LLM error, schema mismatch — see error detail)
- running — currently executing
A "DRY" purple chip indicates the run was a test (no side effects).
Flow (/app/agents/flow)
A bird's-eye node graph: Agents → Channels → Recipients. Each subscription is a bezier line connecting an agent to a recipient via the channel they prefer. Dim nodes = inactive agents or unsubscribed channels.
Strategy (/app/agents/strategy)
Goals + Commitments — strategic context agents read when planning. The top card lists which agents consume each (Weekly Plan reads Goals; Slip Detector reads Commitments; etc.).
Settings (/app/agents/settings)
Three sub-tabs:
- General — agent mode (observer / suggester / actor), PM role, monthly budget cap, quiet hours, skip-weekends toggle.
- Policies — per-agent on/off + mode selector.
- Subscriptions — who-receives-what matrix, with health badges and the bulk preset.
How a Run Works
Trigger → Access gate → Reason (LLM) → Decision(s) → Execute → Delivered
- Trigger: BullMQ fires a cron job, an event arrives, or you click Run Now.
- Access gate — five layers in order: global kill switch · workspace agent add-on enabled · trial valid · AI opt-out off · per-agent policy active. A failing check writes a
skippedrun with the reason — visible in the timeline and Runs list. - Reason — the agent gathers data, calls the LLM, and parses the response.
- Decisions persist — each output becomes one row in the database. If the policy is
suggestermode, every decision is forced into "pending approval" state. - Execute — for non-approval decisions, the agent dispatches Slack DMs / emails / in-app notifications via the recipient list. Allowlist validation runs before any side effect.
- Audit — the decision's
executionResultstores per-channel send counts; the subscription rows updatelastDeliveryAt,lastDeliverySuccess, andlastDeliveryError.
Dry-run mode runs steps 1–4 but skips 5–6. Use it from any agent's detail page to preview what an agent would do without sending anything.
What Can Go Wrong
| Symptom | Cause | Where it shows |
| --- | --- | --- |
| Manual trigger says "enqueued" but nothing happens | The agent's policy is disabled. | Manual trigger toast surfaces the skip reason; Runs list shows a skipped row. |
| Report ran but no one got Slack | No subscribers for this agent, or the recipient's Slack identity is not linked. | Decision detail → Delivery panel (recipients: 0). Subscriptions list shows red health badge. |
| Run is failed with "Schema validation" | LLM returned malformed JSON. The agent is fault-tolerant for most fields but some required ones can drift. | Run detail error block; agent retries on the next cron tick. |
| Dry run produced decisions but no delivery | By design — the run was flagged dryRun: true. | A "DRY" purple chip is shown on the run row. |
| Agent never fires on schedule | Skip weekends + Friday + weekly-plan combo, OR Redis is down. | Cron is scheduled via BullMQ; if Redis is offline, no schedule fires until it returns. |
Tips & best practices
- Start in suggester mode. Every agent starts here by default. You approve each decision until you trust the agent, then switch the policy to
actorfor that specific agent. - Use Test Run liberally when introducing a new agent type or changing prompts. It costs the same tokens as a real run but won't ping your team.
- Watch the budget. The Overview cost table shows per-agent spend so you can see which agents are expensive. The monthly cap lives in Settings → General.
- Read the Flow tab once so you have a mental picture of agent → channel → recipient routing. After that, it's mostly for debugging "who actually gets this?".
- Memory is a debugging tool. Most users never touch it — but if an agent seems to repeat itself or "forget" context, clear its memory and re-run.
Was this article helpful?
Your feedback helps us improve these guides.