AkurAI Build
Menu

popagent

public

Latest change 908f9a5dd403d367842700d031df6148c37eeaad - Let follow-up planning target the finding's workspace and dedupe across workspaces by AkurAI Build

# Task-derived work

Follow-up planning for scheduled runs and the read-only company-state tool.
Task/schedule storage, retry, and lifecycle facts live in [AGENTS_AGENT.md](AGENTS_AGENT.md).

## Autonomous follow-up tasks

`src/follow-ups.ts` turns a completed *scheduled* run into queued tasks when
its schedule has `follow_ups=TRUE` (`followUps` in the API/UI, default off).
`createFollowUps` runs a tool-free planner agent with structured output
(`followUpPlanSchema`, at most `MAX_FOLLOW_UPS`=5 items of title/prompt/
rationale/severity) on the schedule's model (routed when `policy/routing`),
treats the report as untrusted data, and refuses deploy/promotion/DNS/secret/
outreach actions by instruction. The planner receives the registered workspaces and every open or week-old
follow-up title across workspaces; each item may name a target `workspace`
(name or id, validated, defaulting to the schedule's) because a task can only
edit its own workspace's repository. Titles are normalized and compared with
`AgentTaskStore.recentFollowUpPrompts()` (all workspaces) so a report does not
re-file the same gap. Created tasks
carry `follow_up_of_task_id`, are enqueued immediately, and are announced once
in `#general`; tasks that are themselves follow-ups never plan further ones.
Planner failures are logged (`task.follow_ups.failed`) and never affect the
completed parent. Contracts: `src/follow-ups.test.ts`, `src/tasks.test.ts`.

## Live company state tool

`companyStatus` (`src/tools/company-status.ts`) is a read-only, bounded snapshot
of registered workspaces, tasks in a look-back window grouped by status with
output excerpts, the Needs-attention bucket, schedules with their latest run,
autonomy state, and recent evolution signals. It exists because workspace shell
commands run in the network-disabled sandbox and cannot reach `./popagent` or
the HTTP API. Seed migration `2026-08-16-company-status-tool-v1` grants it to
the Orchistrator and tells it that its final task output is posted to `#general`
by the platform. Contract: `src/tools/company-status.test.ts`.