Using GitHub
Developers: one command, once per machine
curl -fsSL https://raw.githubusercontent.com/Twing-dev/twing-cli/main/install.sh | sh
Requires Node.js 22.5 or later, npm, and macOS or Linux. Then open
Claude Code, Codex or OpenCode and work normally. If the repository already has .twing/twing.yml,
there is nothing else to do. You only need gh auth login
if the coordinator has to verify your GitHub identity and
gh has no token.
Admins: onboard a repository
Choose a coordinator, then run init in the repository you
want to onboard. init writes the server URL to
.twing/twing.yml; review and commit that change.
Use Twing's server
For a GitHub-hosted repository, an admin or maintainer can use Twing's public coordinator:
cd ~/path/to/repo
npx --yes @twing/cli@latest init --server https://coordination-server.twing.dev init verifies GitHub access using gh
when available, otherwise a GitHub device flow. An admin or
maintainer founds the project, and other GitHub users join with
their GitHub role. On the admin's run, init also
writes the bootstrap hook. Commit it so future clones bootstrap
automatically:
git add .twing/twing.yml .twing/bootstrap-hook.sh .claude/settings.json
git commit -m "Configure twing"
git push Use your own server
Pick how the coordinator authenticates people.
With authentication (public HTTPS)
Install the server. Its domain must already point at this machine, with ports 80 and 443 available:
curl -fsSL https://raw.githubusercontent.com/Twing-dev/twing-cli/main/deploy/install-server.sh | sh -s -- install \
--domain twing.example.com --mode auth Then configure a GitHub repository:
npx --yes @twing/cli@latest init --server https://twing.example.com
git add .twing/twing.yml .twing/bootstrap-hook.sh .claude/settings.json
git commit -m "Configure twing" Without authentication (one developer or a trusted private network)
Use this only for one developer or a private network you trust. Anyone who can reach a no-auth coordinator can claim any developer identity.
curl -fsSL https://raw.githubusercontent.com/Twing-dev/twing-cli/main/deploy/install-server.sh | sh -s -- install \
--insecure-http --bind 0.0.0.0 --port 8787 --mode no-auth Then configure a repository:
npx --yes @twing/cli@latest init --server http://<server-host>:8787 --no-auth --enable-enforcement
git add .twing/twing.yml .twing/bootstrap-hook.sh .claude/settings.json
git commit -m "Configure twing" Enable semantic conflict checks
Plan extraction and semantic conflict checks need an LLM
provider on your coordinator. The server auto-detects
credentials in this order: AWS Bedrock, GCP Vertex AI,
OpenRouter, then Bifrost. Without one, those checks pass
silently; the edit gate still requires a registered design.
Set one provider's variables in the server's
server.env, then upgrade:
# OpenRouter, for example
OPENROUTER_API_KEY=... curl -fsSL https://raw.githubusercontent.com/Twing-dev/twing-cli/main/deploy/install-server.sh | sh -s -- upgrade Monitor your team
Once you're set up, see designs, reviews, and activity across your repo at monitor.twing.dev when you use Twing's server. If you run your own server, you can install your own monitor.
Not on GitHub
Run your own coordinator without authentication. This suits a single developer or a private network you trust.
Admins
curl -fsSL https://raw.githubusercontent.com/Twing-dev/twing-cli/main/deploy/install-server.sh | sh -s -- install \
--insecure-http --bind 0.0.0.0 --port 8787 --mode no-auth Then, in your repository:
npx --yes @twing/cli@latest init --server http://<server-host>:8787 --no-auth --enable-enforcement
git add .twing/twing.yml .twing/bootstrap-hook.sh .claude/settings.json
git commit -m "Configure twing"
git push For a project that is already onboarded, turn on enforcement with:
twing project enable-enforcement Developers
curl -fsSL https://raw.githubusercontent.com/Twing-dev/twing-cli/main/install.sh | sh
Then open Claude Code, Codex or OpenCode in the repository and work
normally. --no-auth is cached per coordinator, so
later setup doesn't need the flag.