Docs

Loops

Have Attia Agent do routine hiring work on a schedule or when an application, job, or candidate changes.

Overview

A loop is a standing instruction for Attia Agent. It runs on a schedule, or when something happens to an application, a job, or a candidate, and the agent does the work you wrote down each time it fires.

Use loops for the routine parts of hiring. A loop can give every new application an owner, sum up the week's hiring every Monday, or check each new job ad for a missing salary, location, or deadline.

Loops start on the Basic plan. On Free, a workspace with no loops sees a page that explains loops, and an admin gets Upgrade to Basic there. A workspace that kept its loops after moving to Free sees them under a Loops start on the Basic plan notice, and can still turn them off and delete them. Nobody on Free can create or edit a loop: New loop and Edit show the same explaining page. A loop's agent work draws on the workspace's AI credits.

The Loops page with a workspace loop and a team loop

Open Loops

Press G then L, or choose Go to loops in the command menu. N then L starts a new loop from anywhere.

The Loops row in the sidebar stays hidden until you turn it on. Right-click the sidebar, choose Customize sidebar, and set Loops to Always show.

When your plan doesn't include Loops, the Loops page explains the feature instead. If the row is set to Always show, I don't use Loops on that page hides it again, and More in the sidebar still lists it.

The page has two tabs. All loops lists every loop you can see, grouped by Level: the workspace, or the team the loop lives in. My loops lists the ones you own. Show disabled loops in the display options hides or shows loops that are off.

Start from a template

A workspace with no loops shows Create a new loop in place of the list. Once it has one, New loop in the header opens the same choices.

Under the template tabs, each card is a ready-made loop. Featured shows them all, and Applications, Candidates, Jobs and Reporting each show their own, such as Route new applications, which assigns each new application to the job's lead, or Weekly hiring report under Reporting. Choose a card, pick a team under Choose a team, and Attia opens it as a draft with the instructions written, and asks any setup questions the template has. When a template needs a status, such as an interview status, it picks yours when exactly one matches. Otherwise Attia Agent asks which one to use, and offers to create it if you manage that team's statuses. A question you skip, or a draft opened with the Agent off, leaves the card reading Choose a status until you pick one. A loop from a template is saved switched off, so publish it and then enable it. Nothing runs before that.

Create a loop with Attia Agent

Describe what you want in the box that reads Ask Attia to build the loop for you, then press Create loop from prompt. Attia asks you to Choose a team, then drafts the name, trigger, and instructions and opens the draft beside a chat, so you can keep refining it in words.

You can also ask for a loop in an ordinary Attia Agent chat. Either way, a loop the agent writes is saved switched off. Read it, then publish and enable it yourself.

Create a loop by hand

  1. Choose Start fresh and, under Choose a team, pick where the loop lives: Workspace, or one of your teams. Templates takes you back.
  2. Give it a name of up to 120 characters.
  3. Under Trigger, choose what starts it: a Schedule, or an event on an Application, a Job, or a Candidate.
  4. Write the Instructions, up to 20,000 characters. Compose with Agent helps you write them.
  5. Review Capabilities & access.
  6. Choose Create loop.

A loop you create this way is on as soon as you create it.

Schedules

A scheduled loop repeats every few minutes, hours, days, weeks, months, or years, in the time zone you pick. The shortest gap is five minutes. First run date sets the day it starts, and the form shows when the first run will be. For anything the builder cannot say, write a five-field Cron expression: 0 9 * * 1 runs every Monday at 09:00.

Record triggers

A loop can start when an application is created, updated, or withdrawn, changes status, assignee, or labels, or gets a new message or comment. It can also start when a job is created or one of its properties changes, when an update or comment is posted on a job, or when a new candidate arrives. Add filter narrows the trigger, for example to one job or one status.

A record loop runs about a minute after the change, once the record has settled.

Use variables in a loop's text

In a Send message or Post job update step, type @ and pick from the list. The list holds what that step can use, such as a first name or a job title. Your pick sits in the text as a chip, and the loop fills in its value when the step runs. A variable uses no AI and no credits.

GroupExamples
CandidateFirst name, Last name, Candidate location
ApplicationApplication name, Application status, Source
JobJob title, Job location, Employment type
PeopleJob lead, Assignee, Sender
DatesToday, Tomorrow, In N days, Application deadline, Published date, Target date, Applied date
WorkspaceWorkspace name, Loop name

Variables never include a candidate's email address, phone number, age, gender, nationality or photo.

The email to a candidate already opens with "Hi {first name}," and shows the job title, so do not start a message with a greeting by name.

Some variables can be empty. Click the chip and write under If empty, write to set a fallback, up to 200 characters of plain text. Without a fallback, a message to a candidate is not sent and the run stops, and a job update says "not set" where the value would go.

Click a date chip to choose its format and its language. Long reads October 30, 2026, Short reads Oct 30, 2026 and With weekday reads Fri, Oct 30. In Norsk the same day reads 30. oktober 2026, 30. okt. 2026 and fre. 30. okt. A new chip is Long in your workspace's language, and that choice stays with the chip. In N days opens the chip so you can set the number, from 1 to 365.

Today is the day the message is sent, in the time zone of the team's working hours, and in the workspace's when the team has none. A step that waits for its send window reads the day it really goes out, not the day it started waiting. Dates that move by working days are not available yet.

If you change the trigger and a chip no longer fits, the chip gets a red ring and the loop will not publish. Change the trigger back or remove the chip.

Update a loop

Open the loop and choose Edit. Your changes save as a draft as you type, and the header reads Draft saved. The loop keeps running its published version until you choose Publish. Configure with Agent lets you change the draft by asking the agent.

If you cannot manage the loop, the edit page opens read-only.

Stop a run early

Under Steps, Stop the run if lists what ends a run early. It shows on a loop that runs for a record. An application loop offers The candidate sends a message, The application is withdrawn, The status changes and A label is added. A job loop offers The job's status changes. A condition set another way shows as a sentence you can remove.

A label is added reads the labels after each update, so a label the application already holds can stop the run on its next update.

Attia checks before each step and again right before each send. A run that stops shows as Skipped with the reason, and the steps it already ran are not undone. A change that lands in the same instant as a send may not be seen, so that message can still go out.

A run's own write counts. Publishing is refused while one of the loop's own steps makes a condition true, such as a Change properties step on the status next to The status changes, and the row says so. Attia cannot tell in advance what an Agent step will do, so a row only warns when the loop has an Agent step: if that step moves the status, the run stops itself.

Review a loop's runs

A loop's page shows Run history with how many times it ran over the last 30 days. Open a run to see the instructions it ran with, the agent's transcript, and its status: Queued, Running, Succeeded, Failed, Waiting for input, Skipped, or Expired. The rail beside it lists the loop's other runs, and Filter runs narrows them.

When a run did not finish, the page says why. A skipped run says why too, both above its steps and on the step that stopped it, unless the steps already tell it: a filter that did not match, or a path no branch matched. Depending on the run, Resume run picks it up again, Start again runs it from the beginning, and Cancel run stops it.

A stop condition ends a run as skipped when a later event on the same record matches, before the next step and again right before a message goes out. The page names the event, for example "Stopped because the candidate sent a message." Attia reads the first 200 events of the kinds the stop conditions name, so a match past those is missed, and a change saved between the last check and the send is not seen. A reminder due while a run waits for an answer still goes out.

Restore a previous version

Every time someone publishes a loop, Attia keeps that version.

  1. Open the loop and choose Edit.
  2. Choose Published versions.
  3. Pick a version and choose Restore version.

Who can manage loops

Guests cannot create or manage loops.

For a workspace loop, workspace owners and admins can create, edit, publish, enable, disable, run, and delete it. The Manage loops setting in Settings > Security can open that to all members. See Workspace owner.

For a team loop, workspace owners and admins can, and so can the team's leads and anyone the team's Loop management permission allows. That permission defaults to Admins & team owners only. See Team owners.

Every loop has an owner, shown under Owned by, and its runs act with the owner's access. A workspace admin or the loop's current owner can hand it to another member from the Owner column on the Loops page.

Capabilities & access

Give a loop only the access its job needs. The Capabilities & access section of the form holds three settings.

Team access

This decides which teams' data the loop can use. All public teams is the default for a workspace loop or a loop in a public team. A loop in a private team defaults to Only the team it lives in. A loop that lives in a team also offers that team on its own. Custom lets you name the teams, and Include sub-teams adds the teams under each one.

Web access

When on, the loop can search the public web and read public pages, for example to check a salary benchmark. It is off by default. Treat what it reads there as untrusted.

Allow changes outside the triggering record

This shows only on a loop that a record starts. When on, the loop can change other records within its team access, not only the one that started the run. It is off by default.

Notifications

A loop can send a member a short message in their Inbox, such as a morning count of new applications. The loop's owner gets it unless the instructions name another member. Guests never get one, and a member who becomes a guest loses the ones they had. A run sends at most five. The message also goes by email or push when the member has turned on Loops for that channel in Settings > Notifications.

AI credits

Loop runs draw on the workspace's AI credits, not on the owner's chat allowance. Workspace owners and admins see the balance on Create a new loop. When the workspace has no credits left, a new run does not start and shows as Skipped, with the reason No AI credits left. The loop stays on, and the next run checks the balance again.

FAQ