Currently in private beta.
Projects & Work

PM Agent

Intermediate9 min read

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

  1. Go to Agents → Settings → Policies from the sidebar.
  2. Find the agent you want — start with EOD Digest for the smoothest first run.
  3. Click Enable. A default policy is created in suggester mode (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

  1. Go to Agents → Settings → Subscriptions.
  2. Click Add subscription: pick a user, an agent, and a channel (Slack DM, email, or in-app). Click Save.
  3. 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)

  1. Go to Agents → Strategy.
  2. Click Add goal — give it a title and target date. The agent uses Goals to rank task priority.
  3. 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
  1. Trigger: BullMQ fires a cron job, an event arrives, or you click Run Now.
  2. 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 skipped run with the reason — visible in the timeline and Runs list.
  3. Reason — the agent gathers data, calls the LLM, and parses the response.
  4. Decisions persist — each output becomes one row in the database. If the policy is suggester mode, every decision is forced into "pending approval" state.
  5. 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.
  6. Audit — the decision's executionResult stores per-channel send counts; the subscription rows update lastDeliveryAt, lastDeliverySuccess, and lastDeliveryError.

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 actor for 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.