Your junior engineer. On your Mac.

Junior takes the work
that doesn’t need you.

Junior watches GitHub, Slack, Linear and your other tools. It brings you what needs you. It takes the rest, and asks before anything goes out. It runs on your Mac, learns how you work, and needs you a little less each week.

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

Installs Junior.app for macOS, Apple silicon or Intel. Read install.sh first. We would.

Junior watches GitHub, Slack, Linear and anything with an MCP server.

Where work arrives 0 new

  • Priya requested your reviewacme/api#512

  • CI failed on mainacme/api#498

  • @you where do staging secrets live?#platform

  • Postgres 16: this sprint or next?PLAT-88

  • TypeError in checkout.ts, 41 eventsvia MCP

Inbox watching

  1. ReviewRewrite session authnew

  2. DecidePostgres 16: this sprint or next?new

  3. FixCI red on #498new

  4. ReplyWhere do staging secrets live?new

  5. FixTypeError in checkout.tsnew

Same rules every time. No guessing.

Junior ready

  • Fix CI on #498Queued

  • Reply in #platformQueued

  • TypeError in checkout.tsQueued

Waiting for your OK 2

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

Reply in #platform4 lines, draftedApprove

Sent without your OK: 0

Example work. Your Tuesday will have more of it.

Why Junior

Junior brings you what needs you. And takes what doesn’t. On your Mac, with your tools, and it asks before anything goes out.

Needs you 2

Rewrite session authReview · 2 people waiting

Postgres 16: this sprint or next?Decide · blocks 3 tickets

That’s the whole list.

Only what needs you

GitHub, Slack, Linear and anything with an MCP server, in one ranked list. Each item says why it’s there. People waiting go to the top.

Junior’s 3

CI red on #498Fixed locally · push waits for you

Reply in #platformDrafted · waits for you

Dependency bumps3 PRs drafted · none opened

Junior takes the rest

Junior fixes, retries and waits on CI. It drafts replies and runs your chores on a schedule. You approve what goes out.

Your MacBook Online

Claude Codeyour login · your plan

Codexyour login · for chats

Data in ~/.junior

Your Mac, your plan

Junior runs on your Mac, on the Claude Code or Codex plan you already pay for. No API keys to paste. No bill from us.

How it works

Three steps. One of them is reading a shell script.

  1. [01]

    Install the Mac app

    One line in Terminal. The app isn’t notarized yet, so read install.sh first. We would.

    $ curl -fsSL usejunior.sh/install.sh | sh

    → Junior.app installed

    → junior, junior-mcp in ~/.local/bin

  2. [02]

    Connect your tools

    GitHub and Slack out of the box. Anything with an MCP server through a job. Junior uses the logins you already have.

    GitHubvia ghOffOn

    Slackvia your connectorOffOn

    Linearthrough a jobOffOn

    Sentrythrough a jobOffOn

  3. [03]

    Hand Junior the rest

    One line, not an essay. Junior reads it back, plans, then works. You approve what goes out.

    Bump the deps, same as last week.

    Patch versions only, PRs wait for you. Same as last week.

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.

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.

Features

The rest of the job. What happens between the inbox and the push.

Today. Your morning, already sorted.

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

Decide on Postgres 16YouJunior

Dependency bumpsYouJunior

Goals. Hand over the outcome, not the steps.

Give Junior a done-when. It waits on CI and reviewers, fixes and 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

Jobs. Chores that do themselves.

Standing assignments on a schedule, set up by chatting with Junior. Each one gets a trial run before you turn it on.

Weekly dependency bumpsMondays at 9:00OffOn

Flaky test reportWeekdays at 8:30OffOn

Release notes draftFridays at 16:00 · trial run firstOffOn

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)

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

Briefs. Never open a PR cold.

Ask for a brief and start with the context. It reads the diff, the thread and the history, and says where to look first.

Brief acme/api#512

Verdict
Approve after one fix
Look at
session.ts, lines 88–120
Blast radius
Every logged-in request

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.

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 issueJunior
  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.

Only Day 1 is built. The other two tabs are the plan, and they say so.

Fit check

Who it’s for

Senior and staff engineers, and tech leads who still write code. They use Claude Code or Codex every day, work on a Mac, and have teammates waiting on them.

Not for (yet)

Teams that want a shared fleet of cloud agents, people who want AI to act without review, and anyone not on a Mac.

Better you read that here than after the install.

Limits

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

Fair questions.

The short answers. The long ones are in the README.

Will Junior post as me?

Not without your OK. Pushes, PRs, comments and messages wait for you, word for word. Edits, tests and local commits don’t need it, because they stay on your Mac.

Will Junior replace me?

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

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 ours.

Does it work while my Mac sleeps?

No. Junior runs on your Mac and stops when it sleeps, like the rest of us. It starts again after a reboot. Scheduled jobs that couldn’t run are recorded as missed, not quietly dropped.

What do I need?

A Mac, Apple silicon or Intel. Claude Code, installed and logged in. Codex works too, for chats.

Which tools can it watch?

GitHub and Slack out of the box. Linear, Sentry, Notion or anything with an MCP server comes in through a job. You set up a job by chatting with Junior.

Where does my data live?

On your Mac, under ~/.junior. Junior holds no GitHub, Slack or Linear credentials; it uses the logins you already have. What you send to Claude, Codex or a connector still goes to that service. We won’t pretend otherwise.

What does it cost?

Nothing. Junior is free and open source, under the MIT licence. It runs on your own Claude or Codex plan, and each session shows what it cost, in dollars.

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.

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.

Why install from Terminal?

The app isn’t notarized by Apple yet, so a browser download would get blocked. The script installs it properly. Read install.sh first. We would.

Ask anything else on GitHub

Let Junior do the triage.

One line installs it. Free and open source, on the Claude Code or Codex plan you already pay for. No account, no card.

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