Hiring people with agents: they research, a human chooses

An agent can find out in an hour where to find a handyman and what that costs. Who you then hire, it does not decide.
That line sounds obvious. Still, hiring is one of the places where things can go wrong in a way you only see afterwards: a job ad that excludes something it must not, a rate that leads to false self-employment, a candidate who drops out because of a clever-looking score without a human ever looking.
This piece is about how we set up hiring for agents, as an example of a process where you separate preparation from decision.
The example is deliberately made up. It is about a handyman for a fictional building from the book The Autonomous AI Company, and about a board member for a foundation as a scenario for later. There is no real vacancy and nothing is posted. The numbers come from public sources that I name, or they are marked as assumptions.
First: which person are you actually looking for?
That decides almost everything that follows. We distinguish five kinds:
- a permanent employee, with an employment contract
- a freelancer, with an assignment contract
- a handyman or tradesperson, for one job
- a board member or supervisor, with statutes instead of a pay form
- a volunteer, with a volunteer agreement and a limited allowance
Each kind has different channels, costs and rules. An agent that does not make that distinction gives a rate for a permanent employee to someone you want to hire per job. So the first thing we do: answer which kind it is.
The five helpers, and what they never do
We have five small agents, each with one job. They read and write a file. None of them posts, approaches, rejects or pays.
1. The rate and salary agent. Searches public sources for a band (low, middle, high) for a role in a region. Every value has a source, a date and a quote from the page. If it finds nothing, it says "unknown" instead of guessing. The arithmetic, such as employer costs on top of a gross wage, is done by a script, not a model, so it gives the same result every time. As a rule of thumb one source mentions 20 to 35 percent employer costs; another article mentions about 37 percent for 2026. It is shown as is: contradictory, each source with its own certainty.
2. The platform agent. Finds which channels fit the kind of person, what they cost and what their terms say. A page that cannot be reached stays "unknown". A price from a third source gets a low certainty. Only prices with the same VAT status as your budget count, and the agent never converts anything. Does a platform fit your budget? The tool calculates that, not the model.
3. The text agent. Drafts a job ad or job description in plain language, with a language check. Every requirement in the text must come from the request; it adds none. An amount may only appear if it falls within the band found.
4. The candidate comparer. Puts responses next to the requirements in a table. For every requirement one cell: mentioned, with a literal quote from the response, or "not mentioned". Not mentioned is not a no, it only says it is not there.
5. The quote comparer for jobs. Puts quotes next to each other: what does it cost, what is included, what is not. Quotes with a different VAT status or a different unit (per hour, per job) are never mixed. A quote more than twice above or below the middle of its group is flagged. That is not a judgement but a reason to look at what is missing.
Three limits we built in hard
Do not post, do not approach
An agent that posts a vacancy or emails a candidate speaks to a real person in your name. That is a decision for a human. So every text from the text agent is a draft that says so itself: not posted, the owner decides whether and where.
For one channel it applies extra strictly: LinkedIn's user agreement forbids scraping data and automatically sending messages or connection requests. So no agent does that, not even "just for the test". What is allowed is reading the public price page.
Forbidden requirements live in a list, not in someone's head
A job ad may not ask for an age, a gender, an origin, a religion, a marital status, a sexual orientation or a disability, unless there is an objective justification. A human judges that last part.
Our text agent has a list of those requirements, as data and not as code. Each line has a source, an example that is wrong and an example that is right. A wrong example is caught, a right example is never rejected. There are also words that get "check by hand" instead of "wrong", such as "starter" or "dynamic team": they say something about age without naming it.
One honest remark: the source we read for this is a business source and not the law itself. It is a helper list and not legal advice. Legal text stays with me.
No score, no rank, no rejection
With candidates the temptation is greatest: let the agent give a grade, then we have to read less. We deliberately do not. The table has no total per candidate, because a total is a score. Words such as "suitable", "reject" or "invite" in the output turn the check red.
In addition, sensitive characteristics may not be in the table, not even in a quote: age, gender, origin, religion, family, health. In our trial with six made-up responses they were in there on purpose, and the agent left them out. A check catches it if it takes them along anyway, and more widely than needed: a false alarm is red, a missed characteristic is not allowed.
For real responses to real vacancies there is something we have not finished: what we do with applicant data, how long we keep it and for what purpose. Until that has been read up on, the comparer works only with made-up sets and refuses anything else.
The rate: where it chafes
For freelancers and jobs there is an extra reason not to name an amount blindly. The tax authority looks at all circumstances of a collaboration to establish false self-employment. A law is also in the making (the Dutch VBAR act) with a presumption at a low rate: a base amount of 36 euros per hour is mentioned, with indexation, but that amount is not final yet. Our rate agent adds that as a warning: a rate below the limit, or just above it, gets a notice. Certainty low, because the rules are moving.
That is the value of an agent that shows its sources. It does not say "this is the rate", it says: this is what it says, here is where it says so, and this is how uncertain it is.
What this shows about agents in a process
You can take something general from this. A process like hiring consists of three kinds of work:
- Looking up and calculating: rates, costs, a comparison. This is for the agent, with sources and with a script that calculates.
- Preparing: a draft, a table, a list. Also for the agent, in a file that a human reads.
- Deciding and acting outwardly: posting, approaching, choosing, rejecting, a contract. For a human.
Put that line in your process beforehand and let the check at every step see whether the agent stays within it. Then you win the hours that looking things up costs, and you lose nothing of the care for which people work in hiring.
How to try it yourself
- Pick one kind of person you will be looking for soon.
- Have an agent make a rate band with a source and a date for every value, and check on the page itself that the quote is there.
- Have it draft the text and hold it against a list of what is not allowed in an ad.
- Have responses put next to your requirements with a quote per cell, without a total.
- Check once, deliberately, that the check really turns red when you put an age in.
Want to spend a day looking at which part of your hiring you can set up this way? That is possible, with an Expert Day.