halinka GitHub

Early development

Coding agents that ship pull requests, not surprises.

Halinka is a self-hostable platform for automating your software lifecycle. Workflows live in your repo, agents run in isolated sandboxes on your own machines, every step is checked by deterministic gates, and every change lands as a PR for a human to approve.

How it works

  1. 01

    Trigger

    A labeled issue, a schedule, or a click in the portal.

  2. 02

    Implement

    An agent works in a devcontainer sandbox on your worker.

  3. 03

    Gate

    Typecheck, tests, lint. Fail, and the agent tries again.

  4. 04

    Review

    Reviewer agents loop with the implementer until they approve.

  5. 05

    Approve

    You sign off in the inbox. Halinka opens the PR.

Workflows as code

YAML in your repo, edited in a visual builder.

Definitions live in .halinka/ and are loaded from your default branch, so a pull request can never rewrite the run it triggers. Non-developers edit drafts in the portal; publishing opens a PR.

# .halinka/workflows/issue-to-pr.yml
steps:
  - id: fix_loop
    type: loop
    until: ${{ steps.review.outcome == 'approve' }}
    steps:
      - id: implement
        type: agent
        agent: claude-code
        gates:
          - run: pnpm test
            on_fail: retry
      - id: review
        type: agent
        agent: codex
        permissions: { write: false }

  - id: approve
    type: approval

Built for trust

Your machines

Workers run on a homelab, a laptop or CI and only open outbound connections. No open ports.

Any ACP agent

Claude Code and Codex out of the box, over the Agent Client Protocol.

Isolated sandboxes

One devcontainer per run, with your services. Secrets never reach the agent.

Agents never merge

Every change is a checkpointed branch and a pull request. Humans decide.

Human in the loop

Answer questions, approve steps, or message a running agent from the inbox.

Fully observable

Live transcripts, a timeline, the diff per step and cost for every run.