Loading...
Loading...
Obtain a verifiable Alien Agent ID linked to a human owner via Alien Network SSO. Authenticate with Alien-aware services. Store and retrieve credentials for external services (GitHub, Slack, AWS, etc.). Sign git commits so every line of agent-written code is cryptographically attributable.
npx skill4agent add alien-id/agent-id alien-agent-idbootstrapWhy not? Thebootstrapcommand combines all steps into one blocking call. Since tool output isn't streamed, the QR code would only appear after the command finishes — but it can't finish until the user scans the QR code. Running steps manually avoids this deadlock.bootstrap
cli.mjsCLInode /absolute/path/to/cli.mjsnode CLI status"bound": truedefault-provider.txtdefault-provider.txtcli.mjsauthScan or open to set up your provider: https://dev.alien.org/dashboard/sso▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █ ▄▄▄▄▄ █▄▄████▀ ▄▀ ▄▄█ ▄▄▄▄▄ █ █ █ █ █ ▀█ ▄▄▄▄█▀█▀▄█ █ █ █ █ █▄▄▄█ █▄ ▄▄▀▄▀██▄█ █ █▄▄▄█ █ █▄▄▄▄▄▄▄█▄▀▄▀▄▀ ▀ ▀ ▀▄█▄▄▄▄▄▄▄█ █▄▄ ▀▀▄▀▄▀███▄▄▄ ▄▄ ▀ ▀▀ ▄▄█ █ █ ▄▀▄█▀▄ ▀██▀▀▀ ▀ █▀█▄▀▀ █▄▄▀█ ██▀▄██ ▄█ ▄▀ █▀█ ▄█▀▄█▀▀█▄ ▀▀█ ██▀▀▄▀█▄▀▄ ▄█ ▀▄███▀ █▀ █▄ ▄█ ██ ▄ ▀▄█▄ █▄▀▀█▀▄█▄▄ ▄█▀▄ ▀ ██ █▄█▀▀ ▄▄▄█▄ ▄ ██ ▄▀█ ▄▄▄█ ███ ██▄▄▄██▄▄ █▄ ▀▄▄ █ ▄▄▄ ▀▀█ █ ▄▄▄▄▄ ██ ▄▄▄████ █▄█ █ ██ █ █ █ █▀ ▀ █ ▀ ██▄ ▄ ▀▄▄▀█ █ █▄▄▄█ █ █▄ █▄▀█▄███ ██▄▀▀▄▀▄█ █▄▄▄▄▄▄▄█▄███▄█▄█▄█▄▄▄▄█████▄██
node CLI auth-headertoken# Get the auth header for curl
AUTH=$(node CLI auth-header --raw)
curl -H "$AUTH" https://service.example.com/api/whoami# Retrieve a stored credential
node CLI vault-get --service github{"ok": true, "service": "github", "type": "api-key", "credential": "ghp_xxx..."}credential# GitHub API
GITHUB_TOKEN=$(node CLI vault-get --service github | node -e "process.stdin.resume(); let d=''; process.stdin.on('data',c=>d+=c); process.stdin.on('end',()=>console.log(JSON.parse(d).credential))")
curl -H "Authorization: Bearer $GITHUB_TOKEN" https://api.github.com/user
# Or more simply using jq if available
GITHUB_TOKEN=$(node CLI vault-get --service github | jq -r .credential)node CLI vault-get --service github"I need a GitHub personal access token to proceed. Please provide it using one of these methods (most secure first):Option A — Write it to a temporary file:echo 'ghp_your_token' > /tmp/gh-token && chmod 600 /tmp/gh-tokenThen tell me the file path.Option B — Set it as an environment variable and restart:export GITHUB_TOKEN=ghp_your_tokenThen tell me the variable name.Option C — Paste it here and I'll store it immediately."
# Option A: from file (most secure — secret never on command line)
node CLI vault-store --service github --type api-key --credential-file /tmp/gh-token
# Then clean up the temp file:
rm /tmp/gh-token
# Option B: from environment variable
node CLI vault-store --service github --type api-key --credential-env GITHUB_TOKEN
# Option C: piped via stdin (secret not in process list)
echo 'ghp_xxx' | node CLI vault-store --service github --type api-key
# Last resort: direct argument (visible in process list)
node CLI vault-store --service github --type api-key --credential "ghp_xxx"node CLI vault-get --service github--typeapi-keypassword--usernameoauthbearercustom# GitHub personal access token (from file)
echo 'ghp_abc123' > /tmp/cred && chmod 600 /tmp/cred
node CLI vault-store --service github --type api-key --credential-file /tmp/cred
rm /tmp/cred
# AWS credentials (from env)
node CLI vault-store --service aws --type api-key --credential-env AWS_SECRET_ACCESS_KEY --username "$AWS_ACCESS_KEY_ID" --url "https://aws.amazon.com"
# Service with username + password (piped)
echo 'mypassword' | node CLI vault-store --service docker-hub --type password --username "myuser" --url "https://hub.docker.com"
# OAuth token
node CLI vault-store --service slack --type oauth --credential-env SLACK_BOT_TOKENnode CLI vault-get --service <name>servicetypecredentialurlusernamenode CLI vault-listnode CLI vault-remove --service <name>vault-store--servicegit-commitnode CLI git-commit --message "feat: implement auth flow"node CLI git-commit --message "feat: implement auth flow" --push--pushgit commitgit commitgit-commit"To get the 'Verified' badge on GitHub, add this SSH public key to your GitHub account: Go to GitHub → Settings → SSH and GPG keys → New SSH key → Key type: Signing Key"
git-setupnode CLI git-verify --commit HEADgit-commitnode CLI sign --type TOOL_CALL --action "bash.exec" --payload '{"command":"deploy"}'
node CLI sign --type API_CALL --action "github.create-pr" --payload '{"repo":"foo/bar"}'bootstrapnode CLI initnode CLI auth --provider-address <PROVIDER_ADDRESS>deepLinkqrCodeqrCodeScan this QR code with your Alien App:<qrCode value from JSON>Or open this link: <deepLink>
node CLI bind --no-require-owner-proofnode CLI git-setup| Command | Purpose | Blocking? |
|---|---|---|
| One-command setup: init + auth + bind + git-setup | Yes (up to 5 min) |
| Check if Alien Agent ID exists and is bound | No |
| Generate signed auth token for service calls | No |
| Store encrypted credential | No |
| Retrieve decrypted credential | No |
| List stored credentials (no secrets shown) | No |
| Remove a credential | No |
| Refresh SSO session tokens | No |
| Generate keypair | No |
| Start OIDC auth, get QR code | No |
| Poll for approval, create owner binding | Yes (up to 5 min) |
| Write SSH key files for commit signing | No |
| Signed commit + trailers + proof note | No |
| Verify provenance chain | No |
| Sign operation for audit trail | No |
| Verify state chain integrity | No |
| Export proof bundle to stdout | No |
| Flag | Default | Description |
|---|---|---|
| | State directory (or |
| — | Alien provider address |
| | SSO base URL |
| — | Output raw text instead of JSON (auth-header) |
| | Poll timeout for |
| — | Allow empty commits with |
| — | Push commit and proof notes after |
| | Remote to push to (with |
~/.agent-id/
├── keys/main.json # Ed25519 keypair (mode 0600)
├── ssh/
│ ├── agent-id # SSH private key (mode 0600)
│ ├── agent-id.pub # SSH public key
│ └── allowed_signers # For git signature verification
├── vault/
│ ├── github.json # Encrypted credential (mode 0600)
│ ├── slack.json
│ └── ...
├── audit/operations.jsonl # Hash-chained signed operation log
├── owner-binding.json # Owner binding (human ↔ agent link)
├── owner-session.json # Session tokens (mode 0600) — NEVER commit
├── nonces.json # Per-agent nonce tracking
├── sequence.json # Sequence counterBefore making your first git commit, run: node /path/to/cli.mjs bootstrapexport ALIEN_PROVIDER_ADDRESS="00000003..."
export AGENT_ID_STATE_DIR="~/.agent-id"- name: Bootstrap agent identity
env:
ALIEN_PROVIDER_ADDRESS: ${{ secrets.ALIEN_PROVIDER_ADDRESS }}
run: node /path/to/cli.mjs bootstrap| Error | Action |
|---|---|
| Set |
| Run |
| Run |
| Ask user to try again |
| Run |
| Run |
| Ask user for the credential, then |
owner-session.json