Works with Linear Claude Codex Gemini GitHub Telegram

Your repo's
night watch.

Your autonomous engineering hand

Noctra reads your Linear tickets, writes the code, and opens the pull requests — then sees them through: answering review feedback, fixing failing CI, and taking direction from Telegram. The engineering hand that works while you sleep.

$ go install github.com/ahmadAlMezaal/noctra/cmd/noctra@latest
The loop

One ticket in. One PR out.

Every tick, Noctra picks up tickets from a trigger state or label and runs each to a pull request in its own git worktree — so several tickets ship in parallel without stepping on each other.

poll state/label → resolve repo → worktree → agent backend → review gate → push → open PR → watch ↺ review + CI + Telegram
01

Poll Linear

Finds issues by trigger state or the noctra label.

02

Resolve repo

Routes per-ticket from the project's Repo: directive.

03

Dispatch agent

Claude Code or OpenAI Codex implements in an isolated worktree, on its own branch.

04

Review & open PR

Optional second-model gate, then gh pr create.

05

See it through

Watches the PR, fixes feedback and CI, and accepts Telegram commands.

What's under the hood

Built to be left unattended.

Bounded, observable, and safe to point at real repos — the guardrails matter more than the autonomy.

🔄

Self-iterating PRs

With AUTO_ITERATE_PRS enabled, Noctra watches the PRs it opened and pushes follow-up commits for review feedback, inline threads, and failing CI. Bounded by a per-PR iteration cap.

📟

Two-way Telegram control

Outbound pings are joined by an inbound command dispatcher built into the run loop — check status, nudge work, and steer the night straight from chat.

🧰

Installable CLI

Install with go install or prebuilt binaries. noctra setup writes ~/.noctra config, and noctra doctor checks tokens, tools, repos, and models before the first run.

🗂️

Multi-repo by ticket

One Noctra, many repos. Resolve each ticket from a Repo: directive on its Linear project — owner/name or any HTTPS/SSH git URL — then clone the target on demand.

🏷️

State or label triggers

Run from the classic Next column, or switch to the noctra label when you want trigger control without moving issues between states.

🛰️

Two minds, not one

Your agent implements; an optional Gemini gate independently reviews the diff before the PR opens. A different model catches what the author missed.

🛡️

Safe to leave alone

Iteration caps, agent timeouts, dispatch limits, rate-limit detection, and a trusted-reviewer allowlist — bots don't get blind trust.

🍓

Runs on a Pi

A single static Go binary, cross-compiled for arm64. It can literally live on a Raspberry Pi in your house, working overnight.

Why Noctra

It doesn't just open the PR. It finishes the job.

🌙 Noctra

  • Sees the PR through — answers reviews + fixes CI
  • Two-way Telegram notifications and commands
  • Second model reviews before the PR opens
  • Routes to many repos, one per ticket
  • State-based or label-based ticket triggers
  • Installable Go CLI with setup + doctor

Typical Linear→PR agents

  • Stops at “PR opened” (or auto-merges)
  • Outbound-only alerts, if any
  • One model, no independent review
  • Single target repo per instance
  • One hard-coded trigger mode
  • Manual clone/build/config steps
You wake up. Three PRs are waiting. CI is green. You review, you merge.
Get started

Up and running before midnight.

Open source, written in Go, no daemon to babysit. Install the CLI, run the wizard, pass preflight, then point it at a trigger state or label.

  1. 1

    Install the CLI

    Run the install script, or use go install / a prebuilt binary from GitHub Releases.

  2. 2

    Run setup

    noctra setup writes config under ~/.noctra/.

  3. 3

    Point each project at a repo

    Add a Repo: line to the Linear project's description — that's all the routing Noctra needs.

  4. 4

    Trigger a ticket

    Move it to your trigger state or add the noctra label and watch it become a PR.

bash — first run
# install the latest release binary (no Go toolchain)
curl -fsSL https://raw.githubusercontent.com/ahmadAlMezaal/noctra/main/scripts/install.sh | sh
# or with Go: go install github.com/ahmadAlMezaal/noctra/cmd/noctra@latest

# guided setup → ~/.noctra/
noctra setup

# preflight checks
noctra doctor

# start the night watch
noctra
Linear project description — route tickets to a repo
# In the Linear project's description:
Repo: your-org/your-repo
Branch: main   # optional — defaults to the repo's default branch