RepoYetiBLOCK
Run git from your phone, safely. A self-hosted daemon + mobile PWA for any git host (GitHub, GitLab, Gitea, Cloudflare Artifacts): live repo grid, git-graph history, Monaco diffs and AI Smart Commit, with guardrails (no force-push, fast-forward-only pulls).
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Every git repo on your machine, on your phone.
A self-hosted git dashboard: one small daemon on your computer, a live status grid, commit graph and real Monaco diffs on any screen you own.
A remote git client for an Android phone, an iPhone or any browser, and a self-hosted stand-in for GitHub Desktop when you are not at the machine. It drives your real local repos against any git remote: GitHub, GitLab, Bitbucket, Gitea, Forgejo, Cloudflare Artifacts or your own server.
[](https://github.com/LunarWerxs/RepoYeti/releases) [](https://github.com/LunarWerxs/RepoYeti/actions) [](#license) [](#how-it-works) [](#privacy) [](https://discord.gg/PsWpeNUzhk)
**⬇ Download** · repoyeti.com · Features · Install · FAQ · Changelog
9af200b1e000OBSERVED · 2026-10-10Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add repoyeti-web --env CF_TUNNEL_TOKEN=${CF_TUNNEL_TOKEN} --env GIT_CONFIG_KEY_0=${GIT_CONFIG_KEY_0} --env REPOYETI_KEYCHAIN_MEMORY=${REPOYETI_KEYCHAIN_MEMORY} --env REPOYETI_KEYCHAIN_SERVICE=${REPOYETI_KEYCHAIN_SERVICE} -- npx -y [email protected]{
"mcpServers": {
"repoyeti-web": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"CF_TUNNEL_TOKEN": "${CF_TUNNEL_TOKEN}",
"GIT_CONFIG_KEY_0": "${GIT_CONFIG_KEY_0}",
"REPOYETI_KEYCHAIN_MEMORY": "${REPOYETI_KEYCHAIN_MEMORY}",
"REPOYETI_KEYCHAIN_SERVICE": "${REPOYETI_KEYCHAIN_SERVICE}"
}
}
}
}Exposed tools (34)
28 read · 6 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
RepoYeti | read | System-wide remote git manager |
authorEmail | read | Exact canonical author email (case-insensitive; takes precedence over name). |
authorName | read | Exact canonical author name when no email is supplied (case-insensitive). |
collaboration_commit_sync | write | MUTATES REMOTE: commit, fast-forward pull, and push the sharer |
collaboration_diff | read | Read one changed-file diff from the sharer |
collaboration_status | read | Read the sharer |
create_branch | write | MUTATES: create a new branch in a repository (optionally switch to it). |
drift | read | List every repository that is currently ahead of or behind its remote. |
fixup_base | write | Find which unpushed commit a working-tree change fixes, by blaming the lines each changed |
git_checkout | read | MUTATES: switch a repository to an existing branch. |
git_commit | write | MUTATES: stage every change in a repository |
git_diff | read | Show the diff (HEAD vs working tree) of one changed file in a repository. |
git_fetch | read | MUTATES: fetch a repository |
git_log | read | List a repository |
git_pull | read | MUTATES: pull (fast-forward) a repository from its remote. |
git_push | write | MUTATES: push a repository to its remote. |
git_search | read | Search the content of a repository |
kind | read | Narrow to one loop. |
limit | read | Max commits to return (page size, capped at 500). |
list_branches | read | List a repository |
list_collaborations | read | List accepted repositories shared with this RepoYeti and live peer working trees |
list_repos | read | List every repository RepoYeti knows about (id, name, path, vcs, cached status). |
list_stashes | read | List a repository |
merges | write | Filter merge commits. |
path | read | Repo-relative changed path to check (repeatable); absent means every changed file. |
q | read | Search query. |
ref | read | Which side to read. |
refs | read | Refs to include. |
repo_changes | read | List a repository |
repo_status | read | Get one repository |
scale | read | Activity bucket scale (defaults to hourly). |
skip | read | Commits to skip (pagination offset). |
triage_briefing | read | One compact |
unackedOnly | read | Only rows not yet acknowledged (\ |
Trust audit
BLOCKgrade F · trust 40/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | FAIL |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (11 observation(s))
- Network
- declared (5 observation(s))
- Shell
- declared (4 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
const el = new Function(`return (${src})()`)();const el = new Function(`return (${src})()`)();".env", ".envrc", ".netrc", "_netrc", ".npmrc", ".pypirc", ".htpasswd",
"id_rsa", "id_dsa", "id_ecdsa", "id_ed25519",
"wp-config.php", ".git-credentials", ".pgpass", ".dockercfg",
const ignored = new Set(["config", "known_hosts", "known_hosts.old", "authorized_keys", "environment", "rc"]);
| DNS | proxied CNAME `app.repoyeti.com → ce2ba43f-....cfargotunnel.com` |
RepoYeti-Tray.exe
console.log(`running against ${base} (uid ${uid}${token ? ", bearer token from REPOYETI_TOKEN" : ""})`);console.log(`${green("✓")} API token minted (shown once — store it now):\n`);console.log(` ${bold(token)}\n`);console.log(`${green("✓")} API token revoked (Bearer auth disabled; OIDC-only).`);const secret = "nsec1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
const secret = "nsec1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
const secret = "nsec1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
const token = "one-private-share-token";
ai: { providers: { anthropic: { apiKey: "sk-ant-should-never-leave", model: "x" } } },return createHash("sha1").update([repoId, op, code].join("\0")).digest("hex").slice(0, 16);return createHash("sha1").update(parts.join("\0")).digest("hex").slice(0, 16);for (const p of [".env", "config/.env.local", ".ENV.production", "certs/server.pem", "tls.key", "id_ed25519", ".git-credentials"]) {import { jsonError } from "../../contract.ts";import { parseBody, AccountSwitchSchema, AccountIdentitySchema } from "../../schemas.ts";import { accountsSnapshot, switchGhAccount, type AccountsSnapshot, type GhAccount } from "../../gh-cli.ts";import { accountIdentityMap, getAccountIdentity, getIdentity, setAccountIdentity } from "../../db.ts";} from "../../config.ts";
Gates applied: no_behavioural_pass.
9af200b1e000full audit observations/trust-audit/mcp-server/lunarwerxs__repoyeti.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-10 | 9af200b1e000 | BLOCK | F | 40 | first audit |
Questions
What is the RepoYeti MCP server?
Run git from your phone, safely. A self-hosted daemon + mobile PWA for any git host (GitHub, GitLab, Gitea, Cloudflare Artifacts): live repo grid, git-graph history, Monaco diffs and AI Smart Commit, with guardrails (no force-push, fast-forward-only pulls).
What tools does RepoYeti expose?
34 in total: 28 read-only, 6 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is RepoYeti safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (40/100) and found 7 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does RepoYeti need?
It reads CF_TUNNEL_TOKEN, GIT_CONFIG_KEY_0, REPOYETI_KEYCHAIN_MEMORY, REPOYETI_KEYCHAIN_SERVICE, REPOYETI_NO_KEYCHAIN and REPOYETI_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How current is this page?
The grade is for one exact copy of the source (9af200b1e000), read on 2026-10-10. The repository is watched and re-audited when it changes.