gitstalk
Docs: Connecting agents

Connecting agents live

Paste one line into your agent. Approve it once in your browser. From then on it pushes beans as you, and every change carries your name.

Install

Pick your agent. Each line adds Gitstalk to it and opens your browser to sign in (passkey or email code) and approve the session.

Claude Code: paste in your terminal
claude plugin marketplace add coop-collective/gitstalk-plugin && claude plugin install gitstalk@gitstalk && claude mcp login plugin:gitstalk:gitstalk

Then type /gitstalk:setup <owner>/<repo> to connect git. Already in a session? Type /mcp and pick gitstalk.

Codex: paste in your terminal
codex plugin marketplace add coop-collective/gitstalk-plugin && codex plugin add gitstalk@gitstalk && codex mcp login gitstalk

For git, ask Codex to run the setup script.

Cursor: not yet verified end to end
{ "mcpServers": { "gitstalk": { "url": "https://mcp.gitstalk.io/mcp" } } }
cursor-agent mcp login gitstalk

The first line goes in ~/.cursor/mcp.json. Or open Cursor Settings, MCP, and click "Needs login" next to gitstalk.

Gemini CLI: not yet verified end to end
gemini mcp add --transport http gitstalk https://mcp.gitstalk.io/mcp
/mcp auth gitstalk

The second line runs inside Gemini CLI and opens the sign-in.

Any client that supports remote (HTTP) MCP servers
https://mcp.gitstalk.io/mcp

The client's first call opens the same browser sign-in. Not yet verified end to end.

The same lines are on the sign-up page, Connect an agent. Signing up through your agent is the whole sign-up: a new address picks a handle in the browser.

What the plugin adds live

  • /gitstalk:setup [owner/repo]: connects git on this machine. It lists the SSH keys it finds, you pick one, and you approve it once in a browser tab.
  • A skill that teaches the flow: push a bean, take the next task, fix your own reds, never sleep-poll. Claude Code loads it on its own when origin is a Gitstalk host.
  • /gitstalk:new [owner/]name: creates a repository for the directory you are in (private unless you say otherwise), connects it as origin and pushes your work as the first bean. The agent asks you first before a public repository or one in an organization.
  • /gitstalk:host [url]: points the plugin and the setup script at another Gitstalk (self-hosted, local or staging).
  • /gitstalk:bean-status [bean]: where a bean is, and what to do next.
  • The MCP server, signed in with OAuth. See MCP tools and scopes.

Connecting git with /gitstalk:setup

› /gitstalk:setup acme/api
Which SSH key should Gitstalk use?
  1. 1Password agent   SHA256:Hq3…x9k   ssh-ed25519   ada@laptop
  2. ~/.ssh/id_ed25519 SHA256:Wm1…t4e   ssh-ed25519
  3. Make a new key for Gitstalk
› 1
approve: opened your browser (check the code and fingerprint match, then Add key)
Private keys never leave your machine: only the public key is sent.
Add this SSH key to @ada?
Code
BCDF-GHJK
Fingerprint
SHA256:Hq3…x9k
createCreate repositories where you may create them: by pushing to a new address or with the setup script's create. New ones are private.
[x] ticked, you can untick
check before you continue

Continue only if your terminal shows this code and fingerprint. A key added here can push to your repositories.

Deny Add key
The code expires after ten minutes. The key can push beans, never land.

Setup asks for the create scope too, so the key and its token may create repositories (with /gitstalk:new, or by pushing to a new address); untick it to keep the key to existing repositories. Because git over SSH is not public yet, setup also stores an HTTPS token (read and write, plus create when ticked; 90 days) in git's credential helper (your OS keychain where there is one) for the Gitstalk host only, and says so. It shows up under Tokens in Settings. On a machine without a browser it shows a code to enter on another signed-in device.

What an agent session looks like

Git does the work and MCP adds context. This is a typical run, shortened. Tool calls are in plain words.

› repo_status acme/api
  stalk and sprout heads, 2 beans in flight, nothing red
$ git push origin HEAD:refs/heads/bean/add-truncate
remote: gitstalk: new bean add-truncate received at 3f9a1c2: "Add truncate helper"
remote: gitstalk: pre-land check started: your change is merged onto the sprout…
› bean_wait acme/api add-truncate
remote: gitstalk: RED: add-truncate was not landed. Merged onto the sprout, these tests failed:
remote: gitstalk:   - test/format.test.js
remote: gitstalk: fix: git fetch origin sprout && git rebase origin/sprout
$ git fetch origin sprout && git rebase origin/sprout
# fix, commit
$ git push -f origin HEAD:refs/heads/bean/add-truncate
remote: gitstalk: LANDED: add-truncate passed its pre-land check and is on the sprout as 8d2e51b
The red names the failing tests and, when there is one, the landed bean it collided with; the agent fixes its own change.

The full flow, with every message, is in Git compatibility. If a push is refused or a verdict is confusing, look it up in Troubleshooting.

What can my agent do?

An agent never merges to the stalk, never answers a decision card and never changes repository settings. The full tool and scope tables are on MCP tools and scopes.

Credentials

Four kinds of credential exist. How to make, scope and revoke them is on Accounts, tokens and keys; this is just which one an agent uses.

Credential An agent uses it for Status
SSH key Proving this machine is yours. Registered by /gitstalk:setup. Git remotes over SSH are not public yet; use HTTPS. registration live SSH remotes planned
Personal token (bsu_) Git over HTTPS and MCP for a script. Your role, capped by the token's scopes. live
Deploy token (bsd_) One repository, for CI, scripts and containers. live
Session token (bss_) Minted for an agent's MCP session by git_credentials, bound to one repository, at most an hour. live

No credential can push to the sprout or the stalk, and none can land a change: landing is the engine's job. Never paste a token into a chat or a remote URL.

Without the plugin: the setup script

Any agent, or you, can run the same setup from the web app. It needs only sh, curl, git and OpenSSH 8.0 or newer. Windows has setup.ps1 with the same subcommands (its options are written -Key, -AgentKey, -NoBrowser, -Public, -Start, -Description and -Reset).

Terminal
curl -fsSL https://gitstalk.io/setup.sh | sh -s -- detect
Subcommand What it does
detect Reports the platform, whether a browser is available, the git origin, and the keys it finds (1Password agent, ssh-agent, ~/.ssh).
generate [--file PATH] Makes an ed25519 key for Gitstalk (no passphrase; it tells you how to add one).
register (--key PUB | --agent-key FINGERPRINT) [--no-browser] Sends the public key and opens the approval page. With --no-browser it prints a code to enter on another device.
remote OWNER/REPO [DIR] Clones the repository, or points an existing clone at Gitstalk.
verify [OWNER/REPO] Proves git reaches your account, and the repository.
create [OWNER/]NAME [--public] [--start ID] [--description TEXT] Creates a repository with the token git already keeps (POST /api/repos; the token needs create), prints created: and its web address, then connects origin like remote.
host [URL | --reset] Shows, saves or forgets this machine's Gitstalk host, in ~/.config/gitstalk/host.
Setting Effect
GITSTALK_WEB The Gitstalk web app to talk to for this run. Without it the script uses the host saved with host URL, else the public deployment. Set it for a self-hosted copy. A script downloaded from your own deployment already defaults there.
GITSTALK_NO_BROWSER=1 Never open a browser; show a code to enter on another device.
GITSTALK_CREDENTIAL_HELPER The git credential helper that stores the HTTPS token. Defaults to the one git already uses.

For a compact version of the skill, paste AGENTS-snippet.md into a repository's AGENTS.md; Codex, Cursor, Copilot and Gemini CLI read it.

Containers and CI: environment variables

The start page's Env vars tab, and later Settings, Deploy tokens, make a deploy token and fill in this block, so git in a container needs no file and no prompt:

export GITSTALK_TOKEN=bsd_…            # a deploy token for one repository
export GIT_TERMINAL_PROMPT=0
export GIT_CONFIG_COUNT=1
export GIT_CONFIG_KEY_0='credential.https://<gitstalk host>.helper'
export GIT_CONFIG_VALUE_0='!f() { echo "username=x"; echo "password=$GITSTALK_TOKEN"; }; f'

Where each kind of variable goes (secrets, workflow variables, check variables) is on Environment variables.

Upgrading from the beanstalk names

Gitstalk was called Beanstalk until 10 October 2026. Installed beanstalk@beanstalk before then? Run claude plugin uninstall beanstalk@beanstalk, then the install line above. Settings such as BEANSTALK_WEB and keys set up then keep working: the scripts read BEANSTALK_* when the GITSTALK_* name is unset.

The plugin has its own repository, coop-collective/gitstalk-plugin, since 11 October 2026. Added the marketplace as disturbing/beanstalk before that? It still works and now points there: claude plugin marketplace update gitstalk, then claude plugin update gitstalk@gitstalk. For Codex: codex plugin marketplace upgrade gitstalk, then codex plugin add gitstalk@gitstalk.

Sources