Janet

An error comes in, Janet fixes it, you merge.

Janet hands the error that lands in Radio to your own AI agent on your computer: Claude Code, Codex (ChatGPT) or Gemini CLI. The agent opens the project's repositories in a separate clone, finds the problem and fixes it; Janet opens a pull request. You review and merge; nothing goes to your main branch directly.

How to connect
EXAMPLE
criticalTypeError: Cannot read 'id' of null · CheckoutService.php:88
Sent to Janet
SBF-261014-K4M2 · adall.io
✓
Repos opened in a clone
adall.api, adall.web · janet/SBF-261014-K4M2
✓
Your agent is fixing
CheckoutService.php · null check for an empty cart
✓
Pull request opened
adall.api #212 → test
running
Resolved, clone deleted
PR merged, nothing left behind
queued

Starting at

Includedno extra cost

No separate charge for Janet: the AI agent on your own computer fixes the code with your Claude, ChatGPT or Gemini subscription. Signalbird neither charges for nor pays for AI. The Radio module is all you need to use Janet. Radio (Logs & Events) →

Why it exists

Seeing the error is not enough, someone has to fix it

The alert arrives at 02:14. Someone has to wake up, work out which project it belongs to, open the repository, read the log and write the fix. Most errors stall somewhere in that chain until morning, and the morning has other work waiting.

What it does

7 capabilities, one screen.

Pick a channel, the rest happens on its own

Turn on "Janet fixes automatically" in a Radio channel's settings and every message in that channel goes to Janet. For a single event, press "Send to Janet" in Radio.

On your computer, with your agent

Your code is never sent to Signalbird. Janet runs Claude Code, Codex (ChatGPT) or Gemini CLI on your computer with your own session; you pick which one. Repositories, dependencies and GitHub access stay with you.

Pull requests only

Every job runs on a new branch called janet/SBF-… and arrives as a PR. Janet never pushes to your target branch, never force-pushes and never merges. What ships is your call.

Finds the right project itself

An error from adall.io goes to the adall folder: the match is worked out from the domain. If it is wrong you pick the right one once in the panel. When a project spans several repositories (api, web, mobile), Janet sees them all and decides which to touch.

Asks when it is not sure

If an error can be read two ways, Janet asks before writing code and the job moves to "Waiting for you". You answer on the job page and Janet continues on the same branch.

Leaves nothing behind

Repositories open in a separate clone; your working copy and your editor are untouched. Resolve, reject or stop the job and the clone is deleted. Unchanged repositories go right away.

Error text is not an instruction

An error message comes from outside and could carry a malicious sentence. Janet reads it inside an "untrusted data" block; instructions only come from messages your team writes in the panel. Known secret patterns are masked before a log line reaches the panel.

How it works

In 4 steps.

Connect your computer

npm i -g signalbird-cli and signalbird login. Approve in the browser, the service installs itself.

Pick a channel

Choose which Radio channels go to Janet.

Janet fixes

It finds the project, fixes it and opens a PR; you watch it live in the panel.

You merge

Review the PR, merge it, mark the job resolved. The clone is deleted.

Connect it in code

A few lines are enough.

This call really exists in the package. Every language and surface is on the developers page.

For developers
Once on your computer
npm i -g signalbird-cli
signalbird login

# 1/4 Project folder: finds the projects under ~/git
# 2/4 Account: "Connect this computer" in the browser
# 3/4 Checks: git, gh and your AI agent (Claude Code, Codex or Gemini CLI)
# 4/4 Service: starts with the computer

# Everything else lives in the panel: Integrations → Janet

Specifications

Does it really do that?

Requirements
macOS or Linux · Node.js 20+, git, GitHub CLI (gh)
AI agent
Claude Code · Codex (ChatGPT) · Gemini CLI; with your own account
Runs on
Your computer; code is not sent to Signalbird
Git flow
janet/SBF-… branch and a pull request; no push, no force push, no merge
Project matching
Explicit match in the panel › local link on the computer › guess from the domain
Source
github.com/Pariette-Inc/signalbird.cli · MIT
Billing
No charge for Janet (included with Radio); AI usage comes from your own subscription

Questions

Things you might wonder.

Does my code go to Signalbird?

No. Janet runs on your computer and changes the code there. What reaches Signalbird is the job status, Janet's summary, log lines (with secret patterns masked) and PR links. Only the names of your project folders are sent, never their paths.

Why is Janet free? Does Signalbird pay for the AI?

No, and that is why it is free. The agent that fixes the code runs on your computer with your own account: your Claude, ChatGPT (Codex) or Gemini subscription. Signalbird makes no AI calls and does not cover their cost or limits; Janet only carries the error to your agent and brings the result back as a PR. Usage fees and limits are between you and your agent's provider.

Which AI agents does it work with?

Claude Code, Codex (with your ChatGPT account) and Gemini CLI. signalbird login picks the one installed on your computer; to switch, run signalbird fix agent codex (or claude, gemini).

What if Janet gets it wrong?

It only opens pull requests, so nothing ships on its own. Reject the PR, or tell Janet what you want on the job page; it adds a new commit on the same branch.

What if an error arrives while my computer is off?

The job waits in the queue. When the computer is back, the service connects and takes jobs in order.

I work in several teams. Do I set it up for each?

No. signalbird login connects the computer to your account; jobs from every team you belong to come to the same computer.

Which branch does the PR target?

The first of test, development, develop or dev that exists in the repository, otherwise its default branch. A different branch can be set per repository.