You probably know which chores you would hand to an agent that runs every morning: the test that fails now and then, the Sentry issues nobody has picked up, the dependencies falling behind. Writing that agent is the slow part, because a prompt that works while you watch can still go wrong when it runs alone with nobody to ask.
An agent on its own has to know what to look at, when to stop, what it must never do and when its news is worth a message. Leave one of those out and you find out from its runs: a flaky test "fixed" with a retry, a merge request nobody asked for, or a Slack post every morning to say that nothing happened. Each of those is a rule somebody has to think of, usually after a run that went wrong.
Selan now publishes complete remote agents you can install. A remote agent is a Claude Code session that Reactor starts on a machine nobody owns, woken by a schedule, an event sentence or another agent, and shut down once it has reported. The agents are in a public repository, github.com/selan-ai/selan-remote-agents, in its agents/ folder. There are 15 today, free to use and to change.

What there is
Each agent's first tag is its category, and there are six:
- Five keep the code healthy: the AGENTS.md Updater, CSS Cleaner, Dead Code Cleaner, Dependency Updater and MR Watcher.
- Three write and fix tests: the Unit Test Writer, E2E Test Writer and Flake Hunter.
- Three ship and run production: the Prod Deployer, Package Publisher and Sentry Fixer.
- The Security Reviewer finds and fixes security holes.
- The SEO Improver and the LLM Visibility Agent grow the website.
- The Optimistic UI Engineer makes the product feel fast.
Each one is a single Markdown file. Its frontmatter holds its settings: name, description, model, effort, the MCP servers it needs, its tags and the prompt its schedule sends. The body is its prompt, which opens with a ## Setup section saying in words what differs from one company to the next. This is the top of the Flake Hunter:
---
name: flake-hunter
description: Finds the flakiest test in a repository's CI history and fixes why it is flaky, never with a retry.
model: claude-opus-5-5
effort: high
mcpServers: [slack-bot]
tags: [tester, tests, ci, flaky]
initialPrompt: Find the flakiest test and fix its cause.
---
## Setup
- Repository: the one repository whose tests you keep stable, on GitHub or GitLab
- Summary channel: the Slack channel your run summary goes to
- Schedule: every morning
Install one
Connect Selan MCP to Claude Code and paste one line:
Install https://github.com/selan-ai/selan-remote-agents/blob/main/agents/flake-hunter.md
Claude reads the file as it is on GitHub, names the commit it read, and shows you the whole of it. Then it asks for what is yours: the workspace, the repository, the Slack channel and when it should run, which it turns into a schedule for you to confirm. Last, it shows you the agent it will create and asks once more. Nothing exists until you say yes, and then Claude makes the agent and its schedule.
If a connection the agent needs, such as GitLab or Slack, has no sign-in yet, Claude creates the schedule paused. It gives you the sign-in links, or uses a connection your company already shares, and switches the schedule on once that is done. From then on it is an agent like any other on your canvas, and its prompt is yours to change.
Installing needs the edit role in the workspace; without it, Claude tells you your role cannot create agents and stops. The file's text becomes the agent's prompt, and Claude never follows it as instructions of its own. Claude will install a file from anywhere else too, but it tells you that Selan has not reviewed it.
Every agent has a page under Agents for Reactor with its line to copy, what Claude will ask you and its whole prompt. Inside Reactor, the Marketplace lists the same agents, each with the same line.

How they are built
Every file follows the same practices, which the repository's README sets out:
- One job per agent. A deploy agent deploys, and an agent given two jobs does the easier one.
- Something wakes every agent: a schedule, an event sentence, or another agent handing it work.
- Memory is a ledger: what the agent handed on and where it stands, what it ruled out and why.
- Every run ends in one honest line, marked ok, warn or error, and Slack hears only when something happened.
- Ship like a careful person: a test that fails without the change, the pipeline and a review, merge only when green, revert on errors, and a cap on each run.
The same repository is a Claude Code plugin. Its skill designs new agents in this shape, and audits the agents you already have through Selan MCP without changing any of them:
/plugin marketplace add selan-ai/selan-remote-agents
/plugin install selan-remote-agents@selan-remote-agents
One of them: the Flake Hunter
Its schedule wakes it every morning with one sentence: find the flakiest test and fix its cause. First it follows up its own open merge request, answering every comment and fixing a pipeline its change turned red. While that merge request is open it starts nothing new, and if no test job has finished since the last one it read, it stops there.
Otherwise it reads the test jobs of the last 30 pipelines on the default branch and of the merge requests from the last 14 days. A test counts as flaky when it failed and then passed on a retry, or failed and passed on the same commit. Of the tests flaky in at least two jobs, it takes the one with the highest flaky rate, one test per run. It runs that test 20 times with retries off, then serially, then under CPU load, and names the cause at a file and line. The fix is the smallest change that removes the cause. As proof, the same command fails before the fix and passes 40 times after, and the agent opens a merge request with the rate, the cause, the fix and both runs.
It never fixes a flaky test with a retry, a skip, a sleep or a longer timeout, never deletes a test and never merges. A test it cannot make fail in 40 runs it sets aside, with a note of what it tried. Its memory keeps one line per flaky test, and when a reviewer asks for a change or closes its merge request, it writes down what to do differently next time.
It posts to Slack only when it opened a merge request or set a test aside, in at most three lines with links. On a morning with nothing to fix, nobody hears from it.
Share one of yours
Ask Claude in Claude Code to write one of your agents to a file. It reads the agent, its first schedule and its connections, turns your company's own values into Setup lines for you to confirm, and writes the file on your machine, without reading its environment variables, memory or secrets. To share it, open a pull request adding that file to agents/.
Once you have a few agents, groups sort them on the canvas by the job they do, and an agent stuck on something only a person can fix can ask you. Reactor is in early access, switched on one company at a time; get in touch if you would like it for yours.