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 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 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.
{ "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 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.
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
originis a Gitstalk host. -
/gitstalk:new [owner/]name: creates a repository for the directory you are in (private unless you say otherwise), connects it asoriginand 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)
Continue only if your terminal shows this code and fingerprint. A key added here can push to your repositories.
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 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?
Read live
Repositories, beans, Ask, code, Actions runs and logs. Secret names, never values.
Push beans live
Open a bean, push it, wait for the verdict, claim backlog tasks.
Edit with no checkout beta
Send changed files with bean_commit; Gitstalk builds the commit.
Run workflows, set secrets live
Only with the write or secrets scope, and only where you are a maintainer.
Create repositories beta
With the create scope: repo_create, the setup script's
create, or a push to a new address. Private unless you ask.
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).
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.