Codync
A free, open-source 1:1 alternative to Grok Bot and Muse. Message Claude Code, Codex, Cursor and 40+ coding agents as persistent bots from your iPhone, Mac or Linux desktop. Group chats, threads, appr
AI code review for GitHub that runs on your own model key: OpenAI, Anthropic, Amazon Bedrock, OpenRouter, and more. It looks for bugs, double-checks what it finds, approves clean pull requests, and gr
Developer toolsTypeScript · SvelteGitHub @TorstenDittmannOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
AI code review for GitHub that catches real bugs. Bring your own model key.
Taken from the repository README
Loading the full README.
Read the full README ↗hansi.codes · Named after Hansi, the cat.
Hansi reviews your GitHub pull requests like a careful teammate: it points out real bugs, stays quiet about style, and approves the rest. It runs on your own model key from OpenAI, Anthropic, Amazon Bedrock, Google, xAI, OpenRouter, Cerebras, or any OpenAI-compatible endpoint.
Use it at hansi.codes, free during the beta, or host it yourself. Hansi is MIT-licensed and runs as a single Docker image.
Reply to any of its comments, or mention the app with a question, and Hansi answers in the thread. Tell it "we don't flag this in tests" and it remembers for future reviews.
Add .hansi.json to the repository root. The $schema line gives you autocompletion and
validation in editors like VS Code. Schemas are versioned: schema/v1.json never changes, and
https://hansi.codes/schema.json always serves the latest version. Hansi also reads AGENTS.md, CLAUDE.md, .cursorrules, and
.github/copilot-instructions.md as review guidelines. Every one of those files is included in full when it exists. Both come from the pull request's base
branch, so changes take effect once they are merged. Every field is optional:
{
"$schema": "https://hansi.codes/schema/v1.json",
"reviews": {
"enabled": true,
"auto": true,
"drafts": false,
"baseBranches": [],
"pathFilters": ["!docs/**", "!**/*.snap"],
"profile": "balanced",
"minSeverity": "minor",
"maxComments": 15,
"approve": true,
"requestChanges": "major",
"approveOutsideContributors": false
},
"instructions": "We use Result types instead of exceptions in src/domain.",
"pathInstructions": [
{ "path": "migrations/**", "instructions": "Check that every migration is reversible." }
],
"language": "en"
}
| Field | Default | What it does |
|---|---|---|
reviews.enabled | true | Review pull requests in this repository. |
reviews.auto | true | Review when a pull request is opened or updated. Mentions always work. |
reviews.drafts | false | Also review draft pull requests. |
reviews.baseBranches | [] | Only review pull requests into these branches. Empty means all. |
reviews.pathFilters | [] | Globs for the files to review; prefix with ! to exclude. |
reviews.profile | balanced | How picky to be; see Review profiles. |
reviews.minSeverity | minor | Findings below this severity (info, minor, major, critical) are not posted. |
reviews.maxComments | 15 | The most inline comments in one review. |
reviews.approve | true | Approve when nothing blocking is open and no bug-like finding is still open. |
reviews.requestChanges | major | Severity from which Hansi requests changes; never to only comment. |
reviews.approveOutsideContributors | false | Approve pull requests from people without write access. |
instructions | "" | Extra review instructions for the repository. |
pathInstructions | [] | Instructions for files matching a glob. |
language | en | Language for review comments. |
chill flags only bugs it can confirm in the code.balanced also flags risky patterns: unintended behavior changes, realistic races, missing
error handling, and clear performance problems. It also flags missing or ineffective tests,
tests coupled to implementation details, documentation examples that would not work, and
broken build or CI configuration.strict holds the pull request to a demanding senior reviewer's bar. On top of balanced, it
flags maintainability problems such as misleading names and duplicated logic.Every profile reports changed code that breaks a concrete rule from the guideline files,
instructions, pathInstructions, or a remembered team preference. strict also counts naming
and style rules; only formatting is left to linters. Broken rules, test gaps, and broken examples
are minor. To block on them, set requestChanges to minor.
Each review is submitted to GitHub as Approve, Request changes, or Comment:
requestChanges: Request changes.approve: false.The tier grades merge confidence:
| Tier | Meaning |
|---|---|
| S | Ready to merge |
| A | Mergeable after minor fixes |
| B | Needs changes |
| C | Significant problems |
| D | Serious problems |
| F | Do not merge |
The model grades the pull request, but open findings cap the tier: a minor finding means at most
A, a major one at most B, a critical one at most D. Informational notes don't lower it,
and with no open findings the tier is S.
The Hansi check run follows the verdict (success, failure, or neutral), so you can make it a
required check. While a review runs, the check run and the top of the summary comment say what
Hansi is doing (starting the sandbox, reviewing, verifying findings), with a link to follow along.
The hansi.codes plugin adds four agent skills. Install it in Cursor, Claude Code, or Codex, or install one skill with the skills CLI:
npx skills add TorstenDittmann/hansi --skill hansi-loop
In Cursor, open Plugins, choose Add Marketplace, and import this repository. Then install hansi.codes.
https://github.com/TorstenDittmann/hansi
Claude Code:
claude plugin marketplace add TorstenDittmann/hansi
claude plugin install [email protected]
Codex:
codex plugin marketplace add TorstenDittmann/hansi
codex plugin add hansi-codes@hansi-codes
Listing the plugin in Anthropic's directory or the OpenAI plugin directory is a separate submission. This repository is the git marketplace those commands install from.
| Skill | What it does |
|---|---|
hansi-status | Read the current tier and open findings. Does not start a review. |
hansi-learn | Reply on a finding with a lasting rule so Hansi remembers it. |
hansi-setup | Write .hansi.json and open a pull request onto the base branch. |
hansi-loop | Fix the pull request until Hansi grades it S and no comments are left open. |
The examples use git and the GitHub CLI. Another client is fine when that is what the environment has. The Hansi GitHub App must be installed on the repository. Pass a pull request number to review that one; otherwise the skill uses the pull request for the current branch. A rule in the plugin tells the agent not to resolve Hansi threads in GitHub. Hansi clears a thread after a later review sees the fix, or after it dismisses the finding.
Requires Bun 1.4.2, git, and
ripgrep. Bun is pinned in mise.toml; install it with
mise (mise install). No Docker needed: the database is a local
libSQL file (data/hans.db).
mise install
bun install
cp .env.example .env # fill in HANS_ENCRYPTION_KEY and BETTER_AUTH_SECRET
bun run dev # migrates, then starts the web app and worker
GitHub must be able to reach your webhook URL. Run a tunnel such as
cloudflared tunnel --url http://localhost:5173, set APP_URL to its address, then open
APP_URL/setup to create a GitHub App for development.
| Command | What it does |
|---|---|
bun run dev | Web app and worker with live logs |
bun run check | Type-check every package |
bun run test | Unit and integration tests (in-memory libSQL, mocked models) |
bun run lint | Prettier and ESLint |
bun run build | Production build of the web app |
bun run eval | Score review quality with a real model |
bun run db:generate | Generate a migration after changing packages/db/src/schema |
packages/evals measures review quality on small pull requests with known bugs (TypeScript,
Python, Go), and on clean changes where any comment is noise. It builds a real git repository for
each case, runs the review engine, and reports precision, recall, F1, and cost:
EVAL_PROVIDER=anthropic EVAL_MODEL=<model id> EVAL_API_KEY=… bun run eval
bun run eval -- --case sql --repeat 3 --min-f1 0.6
Set EVAL_SUBAGENTS=0 to run the same cases without subagents and compare quality, cost, and time.
Run it before and after changing prompts or models, and add a case to packages/evals/src/cases
for every bug Hansi should have caught. The Evals workflow runs the suite on demand, or on pull
requests labeled run-evals.
GitHub ──webhook──► web (SvelteKit + Hono at /api) ──► libSQL ◄── worker ──► model provider
dashboard, auth, setup jobs clone, review, post
| Path | Purpose |
|---|---|
apps/web | SvelteKit dashboard; Hono mounted at /api for auth, webhooks, and API |
apps/worker | Claims review jobs, checks out the PR, runs the engine, posts the review |
packages/core | Review engine: diff parsing, filters, agent tools, review and verify |
packages/db | Drizzle schema and migrations for libSQL |
packages/queue | Durable job queue on the same database (leases, retries, singletons) |
packages/llm | Provider registry, key encryption, model listing, models.dev pricing |
packages/github | GitHub App auth, manifest flow, pull request and check run helpers |
packages/config | Environment and .hansi.json schemas |
packages/evals | Review-quality benchmark: cases with known bugs, scoring, runner |
.hansi.json and guideline files come from the base branch;HANS_ENCRYPTION_KEY.