TILLFORGE · TILLDEV

A leaked secret
never lands.

Sovereign, security-first code hosting. Your source never leaves your infrastructure except where you explicitly send it — and a credential you commit by mistake is refused at the push boundary, before it can ever enter history. A master coder is fully covered; a beginner’s mistake is never fatal.

SECURE · at the push boundary
sovereign · reject-at-push · protected-main · reflog recovery · byo-ai · air-gapped
WHAT’S INSIDE

A control plane for your source.

Sovereign hostingBETA

Your code never leaves your infrastructure except where you explicitly send it — a mirror you configure, or an AI egress you authorize. Air-gapped operation is a supported mode, not an afterthought.

› Read the docs
Your data regionBETA

Pick the region your repositories are stored in. Their files, history and LFS objects stay on git servers there, and each region has its own git host. Existing repositories stay put when you change it.

› Read the docs
Reject-at-pushBETA

A committed credential is refused at the push boundary, with the file and line — it never enters history or the reflog. Rejected before it lands, not alerted after.

› Read the docs
Recoverable by defaultBETA

Protected default branch, server-side reflog retention, and one-click restore of a deleted or force-pushed ref. A beginner’s mistake is never fatal.

› Read the docs
Native crash correlationBETA

commit → PR → release → deploy → crash → author, through TillPulse. Know a release is N% crash-free and which change to look at first — without leaving your host.

› Read the docs
Artifact recordsBETA

Every build and release records its commit, its builder and the sha256 of each output, hashed by your runner after the job exits. Hand TillForge any file and it tells you which build made it.

› Read the docs
SBOM for every buildBETA

Every build, release and default-branch push lists its dependencies from the lockfiles you commit, across twelve ecosystems, as CycloneDX. Ask which repositories still ship a package and get the answer in one search.

› Read the docs
Known vulnerabilities, gatedBETA

Every SBOM is checked against the OSV advisory database, held by TillDev so your package lists stay home. Warn on each commit, or block merges over a fixable vulnerability or a malicious package, with exceptions that expire.

› Read the docs
Secrets in every fileBETA

The push boundary refuses new secrets; scans of each default-branch commit, build and release read every file for ones already in history, TillDev’s own credentials included. A check per commit, and decisions that follow the content.

› Read the docs
Code scanning, warn or blockBETA

Every push is read for injection, switched-off TLS and token checks, weak crypto, credentials in plain app storage, cleartext traffic and open WebViews, across server, web and mobile code. Each rule maps to CWE, OWASP and MASVS; block mode holds the merge.

› Read the docs
IaC scanning before deployBETA

Terraform, CloudFormation and Kubernetes files in every push are judged by the same checks cloud posture runs on live accounts: public buckets, open ports, privileged containers. What only a deploy can answer is listed, never guessed; block mode holds the merge.

› Read the docs
Signed build provenanceBETA

Every CI build’s outputs get SLSA v1 provenance, signed by your workspace key with P-256 and ML-DSA-65. Each record shows its build level and what stands before the next, and any file can be checked against it offline.

› Read the docs
Verified source, SLSA Source trackBETA

Every update to a protected branch records the rule in force and since when each control has held, graded to SLSA Source levels and signed with P-256 and ML-DSA-65. A deploy can require Level 3, and anyone can check a commit offline.

› Read the docs
Deploy gates and a supply chain mapBETA

A deploy waits for approvals from someone other than the person who asked, then for a policy over its commit: vulnerable dependencies, active secrets, code and IaC findings, signed builds and verified source, each off, warn or block. One map shows what every check covers and what it stops.

› Read the docs
BYO-AI, governed egressBETA

Bring your own model key. TillForge supplies the context and a default-deny, secret-redacting, audited egress boundary — code never reaches a model without an authorized, logged decision.

› Read the docs
Any editor, zero pluginBETA

Standard smart-HTTP and SSH, so every editor’s native git just works. Plus an MCP server for agents and a VS Code extension for inline observability.

› Read the docs
THE PUSH BOUNDARY

A secret is refused,
not alerted after the fact.

Owning the push boundary is the whole point. Every incoming commit is scanned before it is written — and a match on a credential rejects the push with the file and line. Nothing lands: not on the branch, not in the reflog. The industry norm is to scan after the fact and email you once the secret is already in history; by then it must be treated as compromised and rotated. We move the check one step earlier, to the only place it actually prevents the leak.

PUSHSECRET FOUNDCLEANPUSHcommits · blobsPRE-RECEIVEsecret-scan · policy · identityREJECTEDfile:line · nothing writtenDEFAULT-ONACCEPTED → mainprotected · signed · linearTHE SECRET NEVER ENTERS HISTORY OR THE REFLOG · FAILS CLOSED ON SCANNER ERROR

The same boundary enforces the rest of your policy in one pass: signed commits on protected branches, commits that must name the person pushing them, and a size rule that turns files over 100 MiB away to Git LFS instead of bloating history.

A genuine false positive is handled honestly — an owner or admin allowlists that finding in an audited, per-repo allowlist with a stamped reason, and exactly that content passes on the next push. Not a global off-switch. And it fails closed: if the scanner itself errors, the push is rejected, never waved through. If a private SSH key is allowlisted into history anyway, that key is revoked in every workspace for SSH, and its signatures stop counting as Verified.

With TillSecrets in the workspace, the push is also checked against your own vault values, current and old, whatever they look like, and your admins are told. That one check lets a push through with a warning when the vault can’t be reached. Leaked values.

Security model →
bash · push
$ git push origin main

Enumerating objects: 7, done.
Writing objects: 100% (4/4), 612 bytes, done.

remote: ✗ push rejected — a secret would enter history
remote:
remote:   config/prod.env:12   cloud access key id
remote:   config/prod.env:13   cloud secret access key
remote:
remote:   refused at the push boundary. nothing was written —
remote:   not to main, not to the reflog.
remote:
remote:   redact it, or record a reviewed false positive:
remote:     # tillforge:allow-secret <reason>   (on the line, audited)
remote:     or an admin allowlists the finding, and it passes

error: failed to push some refs
RECOVERABLE BY DEFAULT

A mistake is never fatal.

A force-push over main, a deleted branch, a dangling commit — none of these are the end of an afternoon. The server keeps its own history of every ref change, so the state before the mistake is always addressable.

These are defaults, not opt-ins. The beginner gets covered without configuring anything; the expert can tune the policy. Safety you have to remember to switch on is safety most teams never have.

Recovery reference →
bash · recover
# A teammate force-pushed over main. Nothing is lost.
tilldev forge reflog api --ref main

  ID  OP            REF              FROM→TO            BY    WHEN
  4   force_update  refs/heads/main  e91c20b7→4f2a9c01  lena  12m ago
  3   update        refs/heads/main  b7d3e5a2→e91c20b7  ada   51m ago

# Undo #4: main goes back to e91c20b7. It compare-and-swaps
# on the current value, so a newer push is never clobbered.
tilldev forge recover api 4
✓ Restored refs/heads/main → e91c20b7a1c3
ON BY DEFAULT
protected main

Force-push and delete of the default branch are refused by default. Turning that off is a deliberate, audited choice — not the starting position.

reflog retention

The server keeps its own reflog and won’t garbage-collect recently-orphaned commits, so a bad push is recoverable independent of anyone’s local clone.

one-click restore

Restore a deleted branch or a force-pushed-over ref to its prior commit. The restore compare-and-swaps on the current value, so a newer push is never clobbered.

branch policy

Required approvals, checks, signatures, and linear history — evaluated at the push boundary itself, not merely suggested by the UI you can route around.

NATIVE CORRELATION

One hop from commit to crash.

Because the commit and PR graph live here, TillForge closes the loop the rest of the industry stitches together with brittle webhooks: commit → PR → release → deploy → crash → suspect → author, natively, through TillPulse.

When a release regresses, TillForge ranks the pull requests since the last one by how closely their changed files match the new crash stacks. It is a ranking, not a verdict: which change to read first, never “that PR did it”.

Correlation reference →
bash · correlation
# Which release regressed, and which change do you read first?
tilldev forge correlation api --release v2.4.0

release   v2.4.0   crash-free 91.2%   grade C
vs prior  v2.3.1   crash-free 99.6%   Δ -8.4pp

suspects: changes whose files appear in new crash stacks
  #812  checkout: retry on 5xx         ravi  2 crashes · src/checkout/retry.ts
  #809  cart: parallelize price lookups  ada   1 crash · src/cart/prices.ts
SCHEMATIC · ILLUSTRATIVEopenedmergedshippedobservedranks→ ownerCOMMITsha e91cPR#812RELEASEv2.4.0DEPLOYmarkerCRASHrelease healthSUSPECTstack ∩ diffAUTHORnotifiedrelease v2.4.0 · crash-free 91.2% · grade C · suspect #812
BYO-AI, GOVERNED

Your model. Your key.
Our boundary.

You bring the model key; we never run inference and never put your code’s model bill on our books. What we build is the part that’s hard and defensible — the context pipeline and the egress boundary. Every code-to-model call passes a policy gate: default-deny for repos you mark crown-jewels, secret-redaction before send, size and scope limits, and a full audit record of what left, to which endpoint, for whom.

✗ REFUSEDREDACTEDLOGGEDpayments-corecrown-jewelsDENYdocs-sitepurpose: pr-reviewEGRESS BOUNDARYdefault-deny · redact · auditYOUR MODELbyo key · your endpointAUDIT LOGwho · what · where

Nothing leaves without an authorized, logged decision. TillDev’s own model calls go only to each provider’s fixed endpoint, and an endpoint a tool declares must be https and never a private or internal host, so an attacker can’t point “the model” at your metadata service.

In air-gapped mode, egress is allowed only to an operator-approved endpoint — the AI layer works without your source ever touching the open internet.

AI & egress governance →
yaml · ai-policy.yaml
# Per-repo: may this source leave to a model? Default-deny.
repo: payments-core

ai_egress:
  default: deny             # crown-jewels never leave
  allow:
    - purpose: pr-review     # only for review context
      providers: [openrouter]
      max_bytes: 65536
  redact_secrets: true       # stripped before send, always
  audit: full                # who · what · where · when

# Air-gapped: allow only an operator-approved endpoint.
HOW YOU REACH IT

Any editor. Zero plugin.

Speaking the standard git protocols means the baseline is free: whatever you already write code in, its native git just works. Everything above that — agents, inline observability — is additive, never required.

HTTPS + SSH · ZERO PLUGIN
Native git

Because we speak standard smart-HTTP and SSH, every editor’s built-in git works out of the box. A credential helper and OAuth device flow handle sign-in cleanly, so there’s nothing to install. Partial, sparse and shallow clones keep big repositories quick.

AGENT-NATIVE · READ-FIRST
MCP server

A dependency-free server any terminal agent already speaks — the agent brings the model, so there’s no per-user key. It enforces the same repo permissions as the web: no ambient authority.

INLINE OBSERVABILITY
VS Code extension

“Crashed N× in prod” above the lines in live crash stacks, who last changed them on hover, pull request review with line comments, and an editor-side secret check that catches the credential at the earliest point in the chain.

NATIVE GIT — WHATEVER YOU ALREADY USE
VS CodeJetBrainsNeovimCursorZedSublimegit CLI
SECURITY IS THE SPINE

Whole classes of bug,
absent by construction.

A code host is the place supply-chain attacks live, so TillForge is built security-first: when security trades against convenience, performance, or a ship date, security wins. A feature that cannot ship safely does not ship.

Where we can, we make a weakness structurally unreachable rather than patch instances of it: command injection (CWE-78) can’t occur because the git server only ever builds argument arrays — never a shell string from input; SSRF (CWE-918) can’t reach your metadata endpoint because a mirror connects only to public addresses, checked on the address it actually dials, webhooks leave from an edge network with no route inside, and model calls go to fixed provider endpoints; and one tenant can’t read another’s repo because on-disk paths are derived from opaque internal ids, never from a user string.

THE SECURITY MODEL
Reject-at-push

A credential is refused before it enters history or the reflog — with the file and line, and a fail-closed scanner.

Default-safe

Protected main, reflog retention, commit identity checks, and branch policy are on by default; experts tune, beginners are covered.

Tested before it lands

With the merge queue on, a pull request lands as the exact commit that passed the branch’s required checks: merged onto the current tip, tested there, and moved in only if nothing else landed first.

Sovereign by construction

Code never leaves your infrastructure except where you explicitly send it. Air-gapped operation is a supported mode.

Governed AI egress

Default-deny, secret-redacted, fully audited — code never reaches a model without an authorized, logged decision.

Checked through an outage

If the dashboard can’t be reached, clones and pushes keep working for up to 72 hours on a signed copy of access and branch protection, unless the git server itself restarts. A push it can’t check is refused, never waved through.

Isolated tenants

Every row is org-scoped and answers 404-not-403; on-disk paths come from opaque ids, never a user-supplied name.

Signed with a post-quantum key

A branch can require commits signed with a hybrid ML-DSA-65 + Ed25519 key registered to their author or committer, a signature that holds while either algorithm does. TillForge signs the merges and web edits it writes, and checks every commit a pull request brings.

Encrypted per organization

Each organization’s repositories are encrypted on disk under a key of its own (AES-256-XTS), and backups under the same key. Destroying it erases them. Every envelope names its suite, so primitives rotate without breaking existing repos.

Stored in the region you pick

An owner chooses the region its repositories live in. Files, history and LFS objects stay on git servers there, each region with its own git host, and only those servers can fetch your key.

NOT A SILO

Same workspace. Same login.

TillForge isn’t a second identity system to run alongside your others — it’s the source layer of the TillDev workspace you already have. It reuses the suite, which is why enterprise-grade is unusually cheap for it to reach.

01 · CORRELATES WITH

TillPulse

Follow a crash in TillPulse back through the deploy, release and pull request to the commit and its author.

02 · BUILT ON

The suite

People, roles, and company sign-in come from your TillDev workspace; repo and CI secrets from TillSecrets; edge protection from TillShield and TillGate; backup and restore-verification from TillArk. No parallel anything.

03 · RECORDS

One audit log

Every push decision, policy change, force-push, recovery, and AI egress appends to the shared, append-only TillDev audit log — next to your Pulse, Auth, and Shield events.

WE ARE TENANT #1

We host our own code on TillForge, on the same service you use.

TILLAFRICA STUDIO

TillStudio forges the web. TillForge keeps what it makes.

The web-development studio that builds the sites, apps, and products — and the code lives here, on the same sovereign git.

Visit the studio ↗
TURN IT ON

Sovereign git hosting where a secret never lands, a mistake is never fatal, and every commit is one hop from the crash it caused. Bring any editor — keep your code where it belongs.

PART OF TILLDEV

One of seven.

You don't have to use the rest. But they fit together — same workspace, same audit log, same shortcut to switch between them. Add what you need when you need it.