Skip to main content
Unattended runs execute without review, so an incorrect entity, an outdated instruction, or a figure that was never traced back to a source record goes undetected. This guide covers the validation path from draft instruction to trusted schedule: first testing interactively under the agent’s exact scope, then starting a single run with Run Now and opening the result.

Before you start

  • Ensure you have the permissions needed to create, edit, run, pause, resume, and delete a scheduled agent (by default, granted only to the Admin role). Scheduled agents are private to whoever creates them, so the account you test with is the account that owns and sees the agent.
  • Access to the account that will own the agent. Every run uses the owner’s role scope and the owner’s own connector credentials, so a test under a different login proves nothing about what the agent will return.
  • The instruction you intend to schedule (up to 4096 characters), or the /skill-name it will invoke.
  • A decision on the entity the agent reports on and the accounting basis it uses. The entity goes into the wording of the instruction; the basis is a field on the agent.
  • For an agent that calls a connector, confirmation that the owner has personally authorized it. See how to connect an MCP connector.

Test the instruction interactively

Everything a scheduled agent does unattended, it does under an accounting basis it cannot change mid-run and an entity scope that comes from the wording of its instruction. These three steps reproduce those conditions in the composer and prove the wording against them while you are still watching.

Step 1: Reproduce the agent’s scope in the composer

In the Agents panel composer, set the accounting basis to the value the agent definition will carry. It defaults to GAAP and applies to the whole conversation rather than to one message. A scheduled agent has no entity field and carries nothing over from the composer, so write the entity into the instruction you are about to test, for example “For Acme Ltd, list…”. Leave the composer’s entity on All companies while you test, so the wording rather than a setting is what scopes the answer, exactly as it will on the schedule. A scheduled agent takes its basis from its definition and its entity from its instruction, and no one is present at run time to correct either. That is why matching them here is the test rather than a preliminary to it.

Step 2: Run the instruction verbatim

Paste the instruction you plan to schedule into the composer and submit it. If the agent’s instructions will begin with /skill-name, invoke the skill the same way, with the same trailing arguments. Sign in as the intended owner to do this if that is not you.
Read-only questions cannot change the ledger, so repeat this run as often as you need while you adjust the wording.

Step 3: Check the output against the records

Open the source records attached to the response and confirm the figures against them. For a single-entity agent, confirm the numbers belong to one company. A consolidated total at this point means the instruction does not name the entity clearly enough. The agent repeats that on every run with nobody reading over its shoulder.

Fit the instruction to what an unattended run may do

A scheduled run has a narrower tool set than the same instruction typed into the composer. These two steps bring the wording inside that boundary before you create the agent.

Step 4: Reduce the instruction to reporting

Keep the instruction to a list, report, or summary that a person then acts on. Unattended runs are barred from creating a workflow, changing a workflow’s status, approving or rejecting a record, and applying a bulk reclassification, even when the owner holds those permissions. An instruction that asks for any of them works for you interactively and fails on the schedule. To have the agent support customer-facing work, keep delivery with a person: let the schedule produce the list and do the sending yourself. See how to send dunning emails with Accounting Intelligence and Gmail for the split in practice.

Step 5: Expect a connector to read, not to send

A connector is the one route an unattended run has to reach outside DualEntry, and it acts with the permissions of the credential that authenticated it rather than the owner’s DualEntry role. An unattended run gets the read-only half of that connector. Any tool that writes or sends is dropped from the agent’s tool set before the run starts, whatever the connector’s settings say. That includes emailing a customer, posting a message, and creating a record upstream.
  • Do not schedule delivery. An instruction that asks the agent to email its result works interactively and produces a report instead on the schedule, because the send tool is simply not there.
  • The connector’s Permissions section governs interactive runs, which is what its Interactive Tools heading means. Nothing set there widens what a schedule can do.
  • Confirm the owner has personally authorized the connector. Installation is organization-wide but credentials are per user, and a connector showing no tools available is not connected for that person, so the run returns nothing rather than failing loudly.

Create the agent and prove one live run

With the wording settled, create the scheduled agent, start one run with Run Now, and confirm you can open the result where the schedule will put it.

Step 6: Create the agent with the basis and timezone set explicitly

Choose Scheduled Agents in the Agents panel and create the agent with the wording you just tested. Set:
  • Name, unique in your organization, up to 128 characters, since this is what identifies the agent in the panel and its runs list.
  • Accounting basis, even where GAAP is what you want.
  • Cadence. The schedule form requires an IANA timezone such as America/New_York and pre-fills the browser’s, so confirm it is the timezone the report belongs to rather than the one you happen to be sitting in. A schedule created through the API without a timezone resolves against UTC.
There is no entity field on the agent. The entity comes from the instruction, which is why Step 1 put it there. An agent goes live the moment you save it; there is no way to create one already paused. Saving lands you on the agent’s drawer rather than in a chat, because nothing has run yet. To hold the agent between saving and go-live, pause it from the drawer. Pausing keeps both the definition and the runs list, while deleting an agent closes its run chats.

Step 7: Start one run with Run Now

Choose Run Now on the agent card or in the drawer footer. A Run started toast confirms it, the agent shows Running…, and a new row appears at the top of the runs list in the drawer. A manual run takes the same path as a scheduled tick: the same instruction, the owner’s permissions, the same read-only tool set, and its own chat session. A manual run that fails records Last Error on the agent but does not count toward the three consecutive failures that stop a schedule. A failed test does not put the agent one strike closer to errored. Run Now also works on a paused agent, which is how you test one you are holding back from its cadence. Run Now is refused while a run is in progress or waiting on you, and for one minute after a run starts. A run waiting on you does not clear on its own: open its chat and respond to let it continue. Otherwise wait for the run to finish or for the minute to pass, rather than editing the schedule.

Step 8: Open the run and read the output

Wait for the run to leave Running. A running run cannot be opened, and the controls that would open it fall back to the drawer with a tooltip until the run finishes. Then choose the run row in the drawer, or Open latest run in the drawer footer. A run that reads Waiting on you opens the same way; respond in it to let it continue. The run opens as an ordinary chat: the instruction, the agent’s response, and a composer. Ask follow-up questions directly in it. Replying moves the run into Recents in the Agents panel; a run you only read stays findable from the agent’s runs list. That runs list is the only place output goes. There is no email digest, no Slack delivery, and no notification of any kind. The agent’s entry in the Agents panel shows a badge counting runs you have not opened and reads Ready to view under the name. Check that this is enough of a prompt for whoever is meant to read the output. Runs are private to the agent’s owner, so that person has to be the owner.

If the agent invokes a skill

Test the skill under the same scope, not only the agent that calls it. The skill supplies the wording and constraints; the agent definition supplies cadence and accounting basis. Any constraint the output depends on belongs in the skill’s instructions rather than in the invoking message, because an unattended run has nobody to correct it. Editing a skill creates a new version and the audit trail records which version ran, so a result stays traceable to the wording that produced it. Ensure you have the permissions needed to edit a skill (by default, Admin only). Skill edits apply organization-wide, so a change you make to pass your test also changes what your colleagues get from the same slash command.

Verify

The agent is ready when all of these hold:
  • The interactive run, under the same basis as the definition and with the entity named in the instruction, returned figures you traced to source records.
  • The agent’s drawer reads Active, or Paused if you are holding it back from its cadence, with no Last Error.
  • The Run Now run appears in the drawer’s runs list as Completed and opens as its own chat.
  • The run appears in the audit trail with the same detail as an interactive conversation, attributed to the owner and tagged as a scheduled run.
  • Nothing in the instruction depends on sending, drafting, or writing through a connector, since an unattended run cannot call those tools.

Troubleshooting

Scheduled agents fail quietly, so most symptoms show up as an absence rather than an error. The table below maps what you see on a scheduled agent to the cause and the fix.
Last modified on October 6, 2026