diff --git a/apps/loopover-ui/src/routes/docs.beta-onboarding.tsx b/apps/loopover-ui/src/routes/docs.beta-onboarding.tsx
index d810cfc375..1c258d5912 100644
--- a/apps/loopover-ui/src/routes/docs.beta-onboarding.tsx
+++ b/apps/loopover-ui/src/routes/docs.beta-onboarding.tsx
@@ -35,8 +35,8 @@ function BetaOnboarding() {
gittensory[bot] that updates in place as the PR evolves. The review behavior
+ loopover[bot] that updates in place as the PR evolves. The review behavior
below this page's Install section (PR panel, checks, gate modes, config-as-code) is the same
regardless of which connection mode your self-hosted App uses.
The PR panel is the review comment the LoopOver app posts on each pull request. It is one
- sticky comment authored by gittensory[bot] that updates in place — the app
- edits the same comment instead of adding new ones. It shows a public-safe readiness score,
+ sticky comment authored by loopover[bot] that updates in place — the app edits
+ the same comment instead of adding new ones. It shows a public-safe readiness score,
concrete signal evidence, and short actions for linked issues, related work, review load,
validation evidence, open PR queue, contributor context, and Gate result.
- For repos like JSONbored/gittensory and awesome-claude, enable PR
+ For repos like JSONbored/loopover and awesome-claude, enable PR
comments, labels, Context, and Gate together to test the full product surface. If another
maintainer agent can merge quickly, configure that agent to wait for{" "}
LoopOver Orb Review Agent before merge or close.
diff --git a/apps/loopover-ui/src/routes/docs.maintainer-self-hosting.tsx b/apps/loopover-ui/src/routes/docs.maintainer-self-hosting.tsx
index 059cc16999..5529446a49 100644
--- a/apps/loopover-ui/src/routes/docs.maintainer-self-hosting.tsx
+++ b/apps/loopover-ui/src/routes/docs.maintainer-self-hosting.tsx
@@ -280,7 +280,7 @@ function MaintainerSelfHosting() {
gittensory App
+ "Hosted" here means the private managed-beta shared loopover App
described in GitHub App configuration — it previously
accepted new installs and is currently paused while self-hosted Orb is the primary way to
run LoopOver. A new centrally hosted offering is planned for the future. "Switching from
@@ -318,7 +318,7 @@ function MaintainerSelfHosting() {
What stays identical for contributors either way: the review still posts as a{" "}
- gittensory[bot]-style comment (under your own App's slug once you migrate,
- not literally gittensory[bot]) plus the same check-run shape, and the gate
+ loopover[bot]-style comment (under your own App's slug once you migrate,
+ not literally loopover[bot]) plus the same check-run shape, and the gate
semantics in Tuning your reviews and{" "}
How reviews work are unchanged — only the
infrastructure and the settings storage location differ.
diff --git a/apps/loopover-ui/src/routes/docs.mcp-clients.tsx b/apps/loopover-ui/src/routes/docs.mcp-clients.tsx
index b1f4513217..d1b8dcd7c8 100644
--- a/apps/loopover-ui/src/routes/docs.mcp-clients.tsx
+++ b/apps/loopover-ui/src/routes/docs.mcp-clients.tsx
@@ -36,18 +36,18 @@ function McpClients() {
These commands print config only. They do not mutate your local client files.
--print mcp uses the same JSON snippet as Claude Desktop and Cursor for other
stdio MCP hosts that expect the mcpServers shape. Every generated snippet
- assumes gittensory-mcp is on your PATH (install it globally first,
+ assumes loopover-mcp is on your PATH (install it globally first,
per Quickstart) — pass{" "}
- --command /absolute/path/to/gittensory-mcp if your client doesn't inherit your
+ --command /absolute/path/to/loopover-mcp if your client doesn't inherit your
shell PATH.
LOOPOVER_UPLOAD_SOURCE=false) and
local absolute paths are redacted from anything that leaves your machine. Log out anytime
- with gittensory-mcp logout.
+ with loopover-mcp logout.
The repo's configured lane comes back as one of these (it is set by the repo's @@ -120,9 +120,9 @@ gittensory-mcp repo-decision --login your-login --repo owner/repo --json`} then generate the public-safe packet to paste into the PR body.
agent packet is public-safe: it is scrubbed
diff --git a/apps/loopover-ui/src/routes/docs.miner-workflow.tsx b/apps/loopover-ui/src/routes/docs.miner-workflow.tsx
index 6308618fb5..d0bbb52fab 100644
--- a/apps/loopover-ui/src/routes/docs.miner-workflow.tsx
+++ b/apps/loopover-ui/src/routes/docs.miner-workflow.tsx
@@ -34,7 +34,7 @@ export function MinerWorkflow() {
<>
Pull a decision pack — lane context, repo targets to pursue or avoid, freshness, and
ranked next actions.
- gittensory-mcp logout.
+ GitHub PATs. You can log out anytime with loopover-mcp logout.
Analyze the current branch with metadata only. No source ever leaves your machine.
/data/codex, mounted at ~/.codex):
-
This also needs the explicit opt-in shown in the fallback example above (
A healthy run ends with LOOPOVER_ENABLE_UNSAFE_CODEX_REVIEWER=1) — see the Subscription CLI safety note
diff --git a/apps/loopover-ui/src/routes/docs.self-hosting-backup-scaling.tsx b/apps/loopover-ui/src/routes/docs.self-hosting-backup-scaling.tsx
index c8061aad3e..af6ba55fda 100644
--- a/apps/loopover-ui/src/routes/docs.self-hosting-backup-scaling.tsx
+++ b/apps/loopover-ui/src/routes/docs.self-hosting-backup-scaling.tsx
@@ -156,7 +156,7 @@ npm run selfhost:postgres:migrate -- --sqlite /data/loopover.sqlite --execute`}
[verify] postgres archive OK: … (N TOC entries) (or{" "}
diff --git a/apps/loopover-ui/src/routes/docs.self-hosting-configuration.tsx b/apps/loopover-ui/src/routes/docs.self-hosting-configuration.tsx
index afb2acab7b..2d5c156e47 100644
--- a/apps/loopover-ui/src/routes/docs.self-hosting-configuration.tsx
+++ b/apps/loopover-ui/src/routes/docs.self-hosting-configuration.tsx
@@ -142,35 +142,35 @@ cp config/examples/global.loopover.yml loopover-config/.loopover.yml`}
Keep anti-abuse thresholds, maintainer allowlists, and autonomy dials in the{" "}
private mount — not in a public .loopover.yml contributors can
read. config/examples/TEMPLATES.md documents the public-vs-private split and
- how to apply the templates to gittensory, awesome-claude, and{" "}
+ how to apply the templates to loopover, awesome-claude, and{" "}
metagraphed without committing private policy. Lint before deploy:{" "}
npx tsx scripts/loopover-config-lint.ts path/to/.loopover.yml.
Authoritative copies in git:
config/examples/loopover.minimal.yml
config/examples/loopover.full.yml
{" "}
(same body as{" "}
-
+
.loopover.yml.example
)
config/examples/TEMPLATES.md
{" "}
— catalog + fleet usage notes
config/examples/README.md
{" "}
— the full private-config layout, precedence chain, and deep-merge semantics, including
@@ -187,7 +187,7 @@ cp config/examples/global.loopover.yml loopover-config/.loopover.yml`}
filename=".env"
code={`PUBLIC_API_ORIGIN=https://reviews.example.com
GITHUB_APP_ID=123456
-GITHUB_APP_SLUG=my-gittensory-app
+GITHUB_APP_SLUG=my-loopover-app
GITHUB_APP_PRIVATE_KEY_FILE=/run/secrets/github-app-private-key.pem
GITHUB_WEBHOOK_SECRET=LOOPOVER_MCP_TOKEN is a shared, end-user-obtainable CLI credential (the normal
- alternative to gittensory-mcp login), so it must not implicitly stage actions
+ alternative to loopover-mcp login), so it must not implicitly stage actions
(merges, closes, approvals) on every repo the App happens to be installed on.{" "}
MCP_ACTUATION_REPO_ALLOWLIST scopes it to an explicit,
comma/whitespace-separated owner/repo list —{" "}
diff --git a/apps/loopover-ui/src/routes/docs.self-hosting-docs-audit.tsx b/apps/loopover-ui/src/routes/docs.self-hosting-docs-audit.tsx
index 421c70ad5b..bdc24c9aa1 100644
--- a/apps/loopover-ui/src/routes/docs.self-hosting-docs-audit.tsx
+++ b/apps/loopover-ui/src/routes/docs.self-hosting-docs-audit.tsx
@@ -40,7 +40,7 @@ function SelfHostingDocsAudit() {
>
SELFHOST_DEPLOYMENT_MODE=dry-run in{" "}
.env.selfhost.example.
Every browser event is scrubbed before it leaves the box: request cookies, headers, and body
@@ -643,7 +643,7 @@ VITE_SENTRY_RELEASE=gittensory-ui@
Sentry server name
SENTRY_SERVER_NAME sets a clean, human name for this instance in Sentry (for
- example gittensory-us-east). Unset defaults to the OS hostname — never the
+ example loopover-us-east). Unset defaults to the OS hostname — never the
public-origin URL. Set this explicitly if you run more than one instance and want to tell
their Sentry events apart at a glance instead of matching container hostnames.
docker compose up -d --build builds the gittensory service from
- the checkout instead of pulling a published image. Everything else in this quickstart (env,
+ docker compose up -d --build builds the loopover service from the
+ checkout instead of pulling a published image. Everything else in this quickstart (env,
health checks, GitHub App) is identical either way. Two build-args trim the image:{" "}
--build-arg INSTALL_AI_CLIS=false skips the Claude Code/Codex CLIs (default{" "}
true), and --build-arg INSTALL_VISUAL_REVIEW=true adds{" "}
@@ -271,7 +271,7 @@ cp config/examples/global.loopover.yml loopover-config/owner__my-repo/.loopover.
gittensory service restarts (--no-deps);{" "}
+ Only the loopover service restarts (--no-deps);{" "}
.env, data volumes, and loopover-config/ are untouched;{" "}
/ready returns 200 after the health-check wait.
gittensory container recreates; profile-service containers and
+ Only the loopover container recreates; profile-service containers and
their volumes are never touched.
selfhost_orb_relay_register must NOT appear here — relay registration is
@@ -344,7 +344,7 @@ SELFHOST_SMOKE_EXTRA_ENV="ORB_ENROLLMENT_SECRET=\${TEST_ENROLLMENT_SECRET}
PUBLIC_API_ORIGIN=https://selfhost-smoke.example" \\
SELFHOST_SMOKE_EXPECT_EVENTS="selfhost_orb_relay_register" \\
SELFHOST_SMOKE_FORBID_EVENTS="selfhost_orb_relay_register_failed" \\
-./scripts/smoke-selfhost.sh gittensory:rc-candidate
+./scripts/smoke-selfhost.sh loopover:rc-candidate
# Pull mode -- no PUBLIC_API_ORIGIN needed; the container polls the broker outbound instead of
# exposing an inbound endpoint. The right fit for NAT/tailnet operators with no public ingress.
@@ -352,7 +352,7 @@ SELFHOST_SMOKE_EXTRA_ENV="ORB_ENROLLMENT_SECRET=\${TEST_ENROLLMENT_SECRET}
ORB_RELAY_MODE=pull" \\
SELFHOST_SMOKE_EXPECT_EVENTS="selfhost_orb_relay_register" \\
SELFHOST_SMOKE_FORBID_EVENTS="selfhost_orb_relay_register_failed" \\
-./scripts/smoke-selfhost.sh gittensory:rc-candidate`}
+./scripts/smoke-selfhost.sh loopover:rc-candidate`}
/>
/ready (it probes the
@@ -418,10 +418,10 @@ SELFHOST_SMOKE_FORBID_EVENTS="selfhost_ai_cli_missing" \\
scripts/deploy-selfhost-image.sh (or rebuild the
checkout with scripts/deploy-selfhost-prebuilt.sh) — both restart only the{" "}
- gittensory service (--no-deps) and wait for it to report{" "}
+ loopover service (--no-deps) and wait for it to report{" "}
healthy before returning, instead of a bare docker compose up -d{" "}
that returns as soon as the container starts.
LOOPOVER_VERSION from the checked-out commit (
git rev-parse --short=8 HEAD) unless you set SENTRY_RELEASE{" "}
yourself. A plain{" "}
- docker compose pull gittensory && docker compose up -d gittensory still
+ docker compose pull loopover && docker compose up -d loopover still
works, but skips the health-check wait loop and input validation both scripts provide.
- The caddy profile runs Caddy 2 in front of the gittensory service,
+ The caddy profile runs Caddy 2 in front of the loopover service,
terminating TLS on 80/443/443/udp (the last for
HTTP/3) and obtaining a Let's Encrypt certificate automatically for whatever domain you set.
It needs a real DNS record: point DOMAIN at this host's public IP{" "}
@@ -279,7 +279,7 @@ SELFHOST_USE_INFISICAL=1 ./scripts/deploy-selfhost-prebuilt.sh`}
- The shipped
Skip the caddy/Caddyfile reverse-proxies to gittensory:8787 on
+ The shipped caddy/Caddyfile reverse-proxies to loopover:8787 on
the compose network, forwards the real client IP, enables compression, sets standard
security headers (HSTS, X-Content-Type-Options, X-Frame-Options, a
strict referrer policy), and logs as JSON to stderr:
@@ -287,7 +287,7 @@ SELFHOST_USE_INFISICAL=1 ./scripts/deploy-selfhost-prebuilt.sh`}
gittensory service's compose entry has a direct{" "}
+ The loopover service's compose entry has a direct{" "}
{`ports: ["\${PORT:-8787}:8787"]`} mapping with a comment marking exactly this:
remove it once Caddy is your public listener, or the app stays reachable on{" "}
:8787 with no TLS, bypassing the proxy entirely and defeating the whole point
@@ -340,7 +340,7 @@ SELFHOST_USE_INFISICAL=1 ./scripts/deploy-selfhost-prebuilt.sh`}
Already run a reverse proxy or load balancer?
caddy profile entirely. Remove the same direct ports:{" "}
- mapping from the gittensory service, keep it on the compose network (or publish{" "}
+ mapping from the loopover service, keep it on the compose network (or publish{" "}
8787 bound to a private interface your existing proxy can reach), and terminate
TLS the way you already do for everything else — nginx, Traefik, an AWS ALB, a Cloudflare
Tunnel. Whatever fronts it just needs to forward to port 8787 and preserve the
@@ -360,8 +360,8 @@ SELFHOST_USE_INFISICAL=1 ./scripts/deploy-selfhost-prebuilt.sh`}
TS_EXTRA_ARGS= # optional, e.g. --advertise-tags=tag:self-host`}
/>
gittensory service's listener the way Caddy does
- — it adds a new network interface to the host. Docker's default{" "}
+ Tailscale doesn't replace the loopover service's listener the way Caddy does —
+ it adds a new network interface to the host. Docker's default{" "}
{`ports: ["\${PORT:-8787}:8787"]`} mapping publishes to all of the host's
interfaces, so once Tailscale is up, that same mapping is what makes port 8787{" "}
reachable at the host's tailnet IP too —{" "}
diff --git a/apps/loopover-ui/src/routes/docs.self-hosting-troubleshooting.tsx b/apps/loopover-ui/src/routes/docs.self-hosting-troubleshooting.tsx
index 762098d2d4..e88dd432c0 100644
--- a/apps/loopover-ui/src/routes/docs.self-hosting-troubleshooting.tsx
+++ b/apps/loopover-ui/src/routes/docs.self-hosting-troubleshooting.tsx
@@ -206,21 +206,21 @@ sum by (class) (rate(loopover_github_graphql_cache_total[15m]))`}
deployment's configuration.
gittensory collection (the
- fixed collection name self-host always uses) was created with a different embedding model
- than the one currently configured (AI_EMBED_MODEL). Recreating it — delete
- the collection and let the next index run recreate it at the current width — is the fix,
- but it temporarily removes ALL indexed RAG context for every repo until re-indexing
- completes, so treat it as a deliberate, disruptive step, not a routine one.
+ A dimension-mismatch error means the existing loopover collection (the fixed
+ collection name self-host always uses) was created with a different embedding model than
+ the one currently configured (AI_EMBED_MODEL). Recreating it — delete the
+ collection and let the next index run recreate it at the current width — is the fix, but
+ it temporarily removes ALL indexed RAG context for every repo until re-indexing completes,
+ so treat it as a deliberate, disruptive step, not a routine one.
Or hit the public API endpoint directly to confirm reachability:
The Docker stack exposes three different operator signals: structured logs from the{" "}
- gittensory container, Prometheus metrics at /metrics, and optional
+ loopover container, Prometheus metrics at /metrics, and optional
OpenTelemetry traces through the observability profile. Metrics answer how much{" "}
work is happening; traces answer where time went inside a review job.
Confirm you can reach github.com/login/device in your browser. Re-run{" "}
- gittensory-mcp login and paste the new code.
+ loopover-mcp login and paste the new code.
- Your LoopOver session expired. Run gittensory-mcp login again. Static bearer
+ Your LoopOver session expired. Run loopover-mcp login again. Static bearer
tokens are not user-facing.
entrius/gittensor is the upstream
project LoopOver analyzes. LoopOver is{" "}
-
- jsonbored/gittensory
+
+ jsonbored/loopover
{" "}
— an independent base-agent layer for the Gittensor ecosystem, not affiliated with the
official subnet.
diff --git a/test/unit/docs-beta-onboarding.test.ts b/test/unit/docs-beta-onboarding.test.ts
index 80eb25bff4..ee27bf03e5 100644
--- a/test/unit/docs-beta-onboarding.test.ts
+++ b/test/unit/docs-beta-onboarding.test.ts
@@ -12,8 +12,8 @@ describe("docs beta onboarding page", () => {
const normalizedSource = source.replace(/\s+/g, " ");
it("documents miner MCP flow through packet", () => {
- expect(source).toMatch(/gittensory-mcp login/);
- expect(source).toMatch(/gittensory-mcp doctor/);
+ expect(source).toMatch(/loopover-mcp login/);
+ expect(source).toMatch(/loopover-mcp doctor/);
expect(source).toMatch(/agent plan/);
expect(source).toMatch(/preflight/);
expect(source).toMatch(/agent packet/);
diff --git a/test/unit/docs-miner-quickstart.test.ts b/test/unit/docs-miner-quickstart.test.ts
index 1fbe39b9ea..0447cb81fd 100644
--- a/test/unit/docs-miner-quickstart.test.ts
+++ b/test/unit/docs-miner-quickstart.test.ts
@@ -13,17 +13,17 @@ describe("docs miner quickstart page", () => {
it("documents the full miner loop: install, auth, doctor, plan, preflight, packet", () => {
expect(source).toMatch(/@loopover\/mcp/);
- expect(source).toMatch(/gittensory-mcp login/);
- expect(source).toMatch(/gittensory-mcp whoami/);
- expect(source).toMatch(/gittensory-mcp status/);
- expect(source).toMatch(/gittensory-mcp doctor/);
+ expect(source).toMatch(/loopover-mcp login/);
+ expect(source).toMatch(/loopover-mcp whoami/);
+ expect(source).toMatch(/loopover-mcp status/);
+ expect(source).toMatch(/loopover-mcp doctor/);
expect(source).toMatch(/agent plan --login/);
- expect(source).toMatch(/gittensory-mcp preflight --login/);
+ expect(source).toMatch(/loopover-mcp preflight --login/);
expect(source).toMatch(/agent packet --login/);
});
it("uses CLI commands that match the current MCP package syntax", () => {
- // Real flags from `gittensory-mcp --help` — guards against drift in documented syntax.
+ // Real flags from `loopover-mcp --help` — guards against drift in documented syntax.
expect(source).toMatch(/--repo owner\/repo/);
expect(source).toMatch(/--base origin\/main/);
expect(source).toMatch(/--branch-eligibility eligible/);
diff --git a/test/unit/docs-selfhost-update-rollback.test.ts b/test/unit/docs-selfhost-update-rollback.test.ts
index f3745313f8..7031d441bd 100644
--- a/test/unit/docs-selfhost-update-rollback.test.ts
+++ b/test/unit/docs-selfhost-update-rollback.test.ts
@@ -27,12 +27,12 @@ describe("self-host update + rollback docs (#1823)", () => {
expect(operations).toContain("Migrations are forward-only");
});
- it("deploy scripts restart only gittensory with --no-deps", () => {
+ it("deploy scripts restart only loopover with --no-deps", () => {
expect(imageScript).toContain('up -d --no-build --no-deps "$SERVICE"');
expect(prebuiltScript).toContain('up -d --no-deps "$SERVICE"');
});
- it("prebuilt deploy builds the gittensory-engine workspace before bundling (#4530)", () => {
+ it("prebuilt deploy builds the loopover-engine workspace before bundling (#4530)", () => {
// packages/loopover-engine/dist/ is gitignored and built via `tsc`; `npm ci --ignore-scripts`
// never triggers that build on its own, so anything that imports the engine (e.g.
// packages/loopover-miner) fails to resolve during the --all bundle unless this runs first.