Agents
Standing agents that read your project on a schedule and draft what needs chasing, with a human approval in front of anything that leaves the building
An agent is a project-scoped worker you set up once. It reads a fixed list of project data on a schedule or on demand, composes what it found, and leaves drafts for you to approve. It is the difference between remembering to chase the ball-in-court list every morning and finding it already written.
The rule that shapes everything else
An agent drafts. It does not act. Every run produces proposed actions, and each one waits for a person to approve or dismiss it. Agents cannot edit an RFI, close a punch item, change a schedule, or write anywhere in the project. The only output an agent can produce is a draft.
There is exactly one narrow exception, and you have to turn it on yourself: an agent with an email allowlist can be set to send to addresses on that list without asking first. A draft addressed to anyone not on the list still waits for approval regardless. See Sending email.
Create an agent
Open STRUX in the left rail, then Agents. The header offers Templates and New agent; the empty state offers the same two as Browse templates and Describe an agent.
The flow is the same either way, in four steps.
- Describe. Either pick a template, which arrives fully configured, or write what you want in plain language: "every weekday at 6am, find RFIs and submittals that are overdue or due in the next three days, group them by whoever the ball is in court with, and draft one reminder per party."
- Review plan. STRUX compiles your description into a plan and shows it back to you: what the agent may read, what it produces, and the single write it is allowed (Drafts a notification). The plan card also names the model that composes and when a second review pass runs. Edit the schedule, the recipients, or the procedure here.
- Test. Run it once. A test run does real work and produces real drafts, but every draft it produces is stamped Test and can never be approved or sent. This is your only chance to read what the agent would say before a subcontractor does.
- Activate. Press Activate agent. Until you do, the agent is a Draft and nothing is scheduled.
What an agent can read
The read vocabulary is fixed. An agent can only be given reads from this list, which is why its blast radius is knowable before you activate it.
Open RFIs · Open submittals · Open punch items · Open observations · Recent daily logs · Schedule summary · Open findings · Weather forecast · Closeout inventory · Pay application status · Open meeting items
Each read shows on the plan card as a chip. The chips are derived from the agent's actual configuration, so the plan can never advertise a read the agent does not perform.
The templates
Twelve templates ship. Picking one and pressing activate is enough; no further authoring is required, except where the table says otherwise.
| Template | What it drafts | When it runs |
|---|---|---|
| Ball in Court Chaser | One digest per responsible party listing exactly what that party is holding, oldest first, past due separated out | Weekdays, 6:00 AM |
| Open Item Closer | A shortlist per party of open items whose record already shows the work is done, each with the evidence quoted | Daily, 4:30 PM |
| COI Compliance Watcher | A document request per subcontractor for expired, missing, or expiring compliance paperwork | Weekly, Monday 7:00 AM |
| Schedule Slip Sentinel | A warning per party for activities whose finish date is at risk, with the specific reason | Daily, 5:00 AM |
| Daily Log Gap Finder | A reminder per superintendent listing days and trades with no log entry against in-progress work | Daily, 6:30 PM |
| Submittal Register Builder | A gap list per contractor: register entries with no spec section, no due date, no responsible contractor, or negative float | On demand |
| Spec Conformance Check | A correction request per contractor, routing open conformance findings back to whoever submitted the item | On demand |
| Drawing Revision Impact | A notice per trade covering the sheets that changed and the open RFIs still outstanding on them | On demand |
| Daily Labor Count | An email to each allowlisted subcontractor asking for the day's headcount and work completed. Needs an email allowlist | Weekdays, 3:30 PM |
| Closeout Package Assembler | A gap report against your own closeout procedure, plus a merged turnover package PDF. Needs your written procedure | On demand |
| Pay App Assembler | A readiness digest naming what still blocks the pay application. Every figure is quoted from the pay application, never recalculated | Weekly, Friday 9:00 AM |
| OAC Meeting Prep | A seven-section owner, architect and contractor agenda: old business, decisions needed, schedule, quality and punch, safety, weather, new business | Weekly, Tuesday 7:00 AM |
Default times are in the project's timezone and are editable. Three templates work from a narrower read than their name suggests, and each says so on its own card: the compliance watcher reads submittals and findings rather than a vendor registry, the register builder audits the existing register rather than deriving one from the specs, and the conformance check routes findings the review pipeline already produced rather than reading spec text itself.
Scheduling
A scheduled agent runs Daily, on Weekdays, or Weekly on a chosen day, at a wall-clock time in the project's timezone. A 6:00 AM digest lands at 6:00 AM for the person reading it on both sides of a daylight saving change.
The four templates marked On demand carry no schedule. They are the ones whose work is event shaped or whose timing is a human decision, and the create flow deliberately offers no cadence picker for them. You run them with Run now on the agent's detail screen. On the closeout template that button reads Assemble now, because the click produces a file rather than a message.
Statuses
| Agent status | Meaning |
|---|---|
| Draft | The plan exists. Nothing is scheduled. |
| Test | A test run has executed. Its drafts are not approvable. |
| Active | Scheduled and running. |
| Paused | You stopped it. Definition and history are kept; nothing dispatches. |
| Archived | Hidden from the list. |
| Run status | Meaning |
|---|---|
| Queued | Created, not yet picked up. |
| Running | Collecting and composing. |
| Needs review | At least one draft is waiting on a decision. This is not a finished state: it becomes Completed once every draft has been decided. |
| Completed | Nothing left to decide. |
| Failed | The run errored or ran out of budget. |
| Cancelled | Stopped by a person or superseded. |
The agents list shows Needs review in place of an agent's own status whenever its latest run is waiting on you, because an agent that is technically Active but owes you a decision is not "all good".
Approving what an agent drafted
The review queue sits at the top of the Agents home, above the list. Open a run to read its drafts, then approve or dismiss each one.
- Approving a notification draft is the end of it.
- Approving an email draft means approved and pending send; the runner delivers it and marks it Sent. If delivery fails, the draft stays visible as owed work with the failure recorded, so a retry is a re-send and not a re-approval.
- Test drafts are never approvable.
Every draft carries the record ids it was built from, so you can check the claim before you approve it.
Sending email
Agents that write to people outside the project need an email identity and an allowlist before they can be activated.
- The allowlist is the boundary. An address that was never typed into it can never receive an unattended message. Rows with a malformed address cannot be saved.
- Auto-send is off by default. Turning on Send to allowlisted recipients without asking lets the runner deliver during the run, but only to addresses on the list. Anything else still waits for approval.
- A test run never auto-sends, whatever the switch says.
- Outbound mail is sent from
agents@struxen.io, displayed as the agent's name followed by "via Struxen", so a recipient can tell what wrote to them. - Replies come back to the agent owner's own inbox. The agent does not read them and does not fold them into a later run.
STRUX refuses to activate an email agent with an empty allowlist. An agent with nobody to email is not a degraded agent, it is a scheduled no-op that reports success forever.
Agents that need your procedure
The Closeout Package Assembler executes your company's method, not a generic one, so it will not activate until you paste your standard operating procedure into the Standard operating procedure field: section order, what must be included, what the cover letter says. The agent follows that procedure on every run, and it falls back to CSI section order only where your procedure is silent.
Files an agent produces
Some runs produce a real document rather than text. The closeout template merges a turnover package PDF; the OAC template renders its agenda as a PDF. These are published into the project's Reports, where they download through the normal report route and inherit its permissions. They are not proposed actions, because a file sitting in your own project has not left the building.
If an assembly hits a size, page, or time ceiling, the artifact is flagged as incomplete and the run says what was left out. A partial turnover package that looks complete is worse than no package.
The run record
Every run keeps a trace you can read: each collector call, each filter, each model call, each draft, and any recoverable error, with timestamps. The run also records credits consumed, duration, and the model used.
Run records are kept for 90 days. The durable record of what an agent did is the approved output downstream, not the run row.
Quiet by default
Agents are instructed to produce nothing when there is nothing worth sending, and to say so in the run summary instead. An agent that mails a "nothing to report" digest every weekday trains its readers to ignore it.
The one deliberate exception is OAC Meeting Prep: the meeting happens whether or not the week was eventful, so it always produces the agenda and writes "Nothing outstanding" under an empty section rather than dropping it.
Budgets
Each run carries hard ceilings. The defaults:
| Credits per run | 12,000 |
| Model advisor calls per run | 2 |
| Wall clock per run | 300 seconds |
Heavier templates ship higher ceilings, up to 20,000 credits, 3 advisor calls, and 600 seconds. When a run hits a ceiling it stops and finishes with what it has. Budgets are visible and editable on the plan step.
Agent runs spend the project's credits like any other AI operation. See Billing.
Troubleshooting
Activate is blocked on an email agent. The allowlist is empty, or a recipient row has an invalid address. Add at least one valid recipient.
Activate is blocked on the closeout agent. The standard operating procedure field is empty. Paste your procedure.
An agent is Active but nothing has run. Check the next-run time on the list. An agent with no schedule reads On demand and only runs when you press Run now. A paused agent reads Paused and is not dispatched.
A run finished with no drafts. That is the intended outcome when there was nothing worth sending. Open the run and read the summary, which says what it looked at.
A run failed. Open it and read the trace. A run that exceeded its credit or time budget says so; raise the budget on the plan step and run it again.
Agents are missing entirely. The whole STRUX tree needs Struxen AI in your plan. See STRUX.
Nothing can be created on the demo project. The shared demo is read only.