Skip to main content
Mesa implements the Git HTTP smart protocol over HTTPS. Any standard Git client can clone, fetch, and push to Mesa repositories.

Base URL

https://api.mesa.dev/<org>/<repo>.git
ComponentDescriptionExample
<org>Organization slugacme
<repo>Repository nameagent-workspace

Endpoints

EndpointMethodPurpose
/<org>/<repo>.git/info/refs?service=git-upload-packGETRef advertisement for fetch/clone
/<org>/<repo>.git/info/refs?service=git-receive-packGETRef advertisement for push
/<org>/<repo>.git/git-upload-packPOSTFetch and clone (server sends objects to client)
/<org>/<repo>.git/git-receive-packPOSTPush (client sends objects to server)
Both plain and gzip-compressed request bodies are accepted.

Authentication

All endpoints require HTTP Basic auth with a Mesa API key. The username field is ignored — only the password (API key) matters.
https://t:<api-key>@api.mesa.dev/<org>/<repo>.git
t is a conventional placeholder. Any username value works.

Scopes

ScopeAllowed operations
readgit-upload-pack (clone, fetch)
writegit-upload-pack + git-receive-pack (clone, fetch, push)
adminAll operations
API keys can be org-wide or scoped to specific repositories. See Auth & Permissions for details.

Clone and fetch

# Clone with API key embedded in the URL
git clone https://t:mesa_live_xxx@api.mesa.dev/acme/agent-workspace.git

# Use an environment variable (recommended)
git clone https://t:${MESA_API_KEY}@api.mesa.dev/acme/agent-workspace.git

# Fetch latest refs
git fetch origin

Push

Pushing requires the write scope on your API key.
git add .
git commit -m "Add agent prompt"
git push origin main

Branch operations

# Create and push a branch
git checkout -b feature/new-flow
git push -u origin feature/new-flow

# List remote branches
git branch -r

# Delete a remote branch
git push origin --delete feature/old-flow

Credential helpers

Store your Mesa credentials so you don’t need to embed API keys in URLs.
git config --global credential.helper osxkeychain
git clone https://api.mesa.dev/acme/agent-workspace.git
# Username: t
# Password: (your API key)

CI/CD example

name: Sync to Mesa

on:
  push:
    branches: [main]

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Push to Mesa
        env:
          MESA_API_KEY: ${{ secrets.MESA_API_KEY }}
        run: |
          git remote add mesa https://${MESA_API_KEY}@api.mesa.dev/acme/agent-workspace.git
          git push mesa main
Store your API key as MESA_API_KEY in your CI secrets store. Keys without write scope can still clone and fetch.

Supported operations

OperationSupportedNotes
CloneYesFull clone via git-upload-pack
Fetch / PullYesIncremental fetching with multi-ack negotiation
PushYesCreate, update, and delete branches
Force pushYesNon-fast-forward updates when forced
Signed commitsYesGPG-signed commits round-trip with stable OIDs
TagsNoTag pushes are rejected — use bookmarks instead

Advertised capabilities

Fetch (upload-pack): multi_ack, multi_ack_detailed, side-band-64k, ofs-delta Push (receive-pack): report-status, ofs-delta, delete-refs

Limits

ResourceLimit
Max pack size per push5 GiB
Max commands per push10,000
These limits apply to individual push operations. There are no rate limits on the number of operations.

Git ↔ Mesa concept mapping

When you interact with Mesa via Git, concepts are translated automatically:
GitMesaNotes
CommitChangeImmutable unit of work with a unique ID
BranchBookmarkLightweight, movable pointer to a change
TagNot supported; use bookmarks
Staging areaNo staging; edits go directly to the working change
When you git push, commits become changes and branch refs become bookmarks. When you git clone or git fetch, Mesa translates changes and bookmarks back into commits and refs. The round-trip is transparent — your Git client sees a normal repository. See Versioning for a deeper look at changes, bookmarks, and how Mesa’s model compares to Git and Jujutsu.