Hello Nothing needs you right now.

The AI junior engineer inside Triage

The junior engineer that asks before it pushes.

Junior is the AI junior engineer inside Triage. It takes the work that doesn’t need you. CI fixes, review nits, replies, weekly chores. It plans first, works on your Mac, and waits for your OK before anything goes out.

curl -fsSL https://usetriage.sh/install.sh | sh

Junior comes with Triage. One line installs both. Read install.sh first.

The rules

Three rules it can’t switch off. Rename it, change its voice. The rules stay.

Bump the deps on api.

Reading it back: patch and minor bumps in acme/api, one PR, tests green first.

It reads back what you ask.

Before it starts, it says what it understood, in a line or two. A misunderstanding costs one message, not an afternoon.

Two questions one message

Push when green, or wait for you?suggested: wait for me

Include the zod major bump?suggested: no, separate PR

Use suggestionsAnswer

It asks everything in one message.

No drip of questions. One message, and each question comes with the answer it suggests. Often you just say yes.

Waiting on you 3

Push to acme/apifix/flaky-auth-test · +14 −3

Comment on #5122 lines, drafted

Move PLAT-88 to DoneLinear

Nothing leaves without your OK.

Pushes, PRs, comments, ticket moves and messages wait for you, word for word. Edits, tests and local commits don’t.

One honest footnote: Autonomy has a “Never asks” level. It’s off until you allow it in Settings. We’d leave it off.

What Junior does

The work that doesn’t need you. Six kinds of it, today. Each one ends with you saying yes or no.

Gets CI green. Fixes, retries, waits.

Junior fixes, retries and waits on CI. You approve what goes out.

CI on #498 round 2

Round 1auth.spec.ts timed out after 500ms

Round 2waits for the refresh · 20 of 20 passed

Pushwaits for your OK

Clears review nits. Your PR, minus the nits.

It reads the comments on your PR, makes the changes and shows you the diff before it pushes.

acme/web#301 4 of 4 nits

- const t = setTimeout(fn, 500)

+ const t = setTimeout(fn, RETRY_MS)

- // TODO: handle error

+ if (!res.ok) throw new HttpError(res)

Drafts replies. Same answers, fewer keystrokes.

Junior drafts them. They wait for your OK.

Reply in #platform draft

They’re in 1Password, vault “staging”. Ask #infra for access. The runbook has the rest.

Review draftEdit

Runs chores. On a schedule you set by chatting.

Tell it the chore once. It reads the job back, asks once, saves it switched off, and offers a trial run.

Weekly dependency bumpsMondays at 9:00OffOn

Release notes draftFridays at 16:00 · saved offOffOn

Trial runTurn on

Drives goals. Hand over the outcome, not the steps.

Give it a done-when, like “#498 merged with checks green”. It waits on CI and reviewers, retries, and stops at your budget.

Goal round 2

#498 is merged with checks green.

Waiting on CIwakes in 6 min

Budget$1.84 of $5

Gateyou approve the push

Briefs your morning. What’s yours, what’s its.

Junior’s morning brief and a shared plan for the day: what’s yours, what’s Junior’s, what’s overdue.

Today Tuesday

Review session authYouJunior

Fix CI on #498YouJunior

Dependency bumpsYouJunior

Hand-offs

Nothing goes out without you. Junior plans first and asks before anything goes out.

  1. A pointer, not an essay. “Fix the flaky test on #498” is plenty. Junior opens the PR, the logs and the history itself.

  2. Everything it needs, in one message, each question with a suggested answer. Often you just say yes.

  3. You review the plan like a PR. Small jobs skip this, because nobody needs a plan for a typo.

  4. Edits, tests and local commits don’t need your OK. They stay on your machine until you say otherwise.

  5. Pushes, PRs, comments and messages wait for you, word for word. Junior has never posted in #general on its own. It isn’t allowed to.

Fix the flaky test on #498.

Its face

Its face says what it’s doing. Eight moods, each one a state. If it looks worried, something needs you.

  • HelloNothing needs you right now.

  • ListeningYou’re typing. It’s reading.

  • ThinkingReading the PR, the logs and the thread.

  • WorkingOn it. Nothing has left your Mac.

  • Needs youOne question, with its suggested answer.

  • DoneFinished. Anything outbound is waiting for your OK.

  • StuckSomething broke. It says what, instead of guessing.

  • AsleepYour Mac is asleep. So is Junior.

About me

Make it yours. Name it, pick its face and colour, set how it talks. The rules don’t change.

Junior

Fixed the flaky test on #498. The push waits for your OK.

  • I read back what you ask
  • I ask everything in one message
  • Nothing leaves without your OK

Locked. No setting reaches them.

Shape
Colour
Voice

Call it Junior, Kevin or “the intern”. It still asks before it pushes.

Under the hood

Your Mac, your logins, your plan. No new API keys. No new cloud. No bill from us.

  • Runs on your Mac.

    In your project folders. It stops when your Mac sleeps.

  • Uses your Claude Code.

    Your login and your plan. Codex works too, for chats.

  • Brings your setup.

    Your MCP servers, skills and permission rules load as they do in your terminal.

  • Checks its own work.

    In Triage.app it opens what it built in a browser pane you can watch.

  • Asks at the level you set.

    From “asks before any change” to “asks before sending”. The default asks before commands.

  • Shows what it cost.

    Every session shows its cost in dollars. Goals and jobs stop at a budget.

Over time

Over time, Junior takes work end to end. Junior starts with the legwork. As it learns how you work, it takes on more of each job, until it can go from the issue to a merged PR.

  1. Find the issueTriage
  2. Write the fixJunior, you review the diff
  3. Open the PRJunior drafts it, you approve
  4. Get it greenJunior fixes CI, you approve replies
  5. MergeYou

Here’s the diff. Push it?

This is Junior today. Every push waits for you.

Junior moves up a step only when you say so.

Fit check

What it won’t do. Some of these are rules. Some just aren’t built yet. We’ll say which.

Won’t, by design

  • Push, post, comment or move a ticket without your OK.
  • Use a tool a job wasn’t given.
  • Run while your Mac is asleep.
  • Decide something that’s yours to decide. It asks, with a suggestion.

Not yet

  • Merge PRs, even the ones you’d wave through.
  • Earn trust on its own. Moving up a step stays your call.
  • Tap you outside the app. Notifications are coming.
  • Learn from your approvals. Today it learns from your playbooks and reply style.

The second list is the plan. The first one isn’t moving.

FAQ

About Junior.

The questions people ask about an AI that works on their Mac.

Is Junior its own AI model?

No. Junior is Claude Code, or Codex for chats, running with your login. The name, the face and the rules are Triage’s.

Will Junior replace me?

It asks before it pushes a branch. You’re fine.

Does it learn how I work?

Some of it, today: your playbooks and your reply style. Learning from what you approve isn’t built yet. We’d rather say so than sell it.

Can it merge PRs?

Not today. You merge. Later, for work you’ve trusted it with, and only when you say so.

What happens when it gets stuck?

It stops and asks, with the answer it suggests. Its face says Stuck, so you’ll notice before standup.

Can it message my team?

It drafts. Nothing reaches Slack, GitHub or Linear until you approve it, word for word.

Is there a way to make it never ask?

Yes. Autonomy has a “Never asks” level. It’s off until you allow it in Settings. We’d leave it off.

What does it cost?

Your Claude or Codex plan, nothing on top. Each session shows its cost in dollars, and goals and jobs stop at the budget you set.

Ask anything else on GitHub

Hand Junior the busywork.

Junior comes with Triage. One line installs both. Free and open source, on the plan you already pay for.

curl -fsSL https://usetriage.sh/install.sh | sh
Read install.sh first