digital-roster 0.3.2

Rent the intelligence, own the governance — a control plane for workers: software colleagues whose every action passes through a gateway you control (default-deny egress, injected credentials, budgets, approval gates, audit).
{
  "openai-codex": {
    "auth": "oauth",
    "model_hosts": [
      "chatgpt.com"
    ],
    "client_id": "app_EMoamEEZ73f0CkXaXp7hrann",
    "token_url": "https://auth.openai.com/oauth/token",
    "token_encoding": "form",
    "skew_ms": 0,
    "account_id_claim": [
      "https://api.openai.com/auth",
      "chatgpt_account_id"
    ],
    "login": {
      "flow": "device_code",
      "device_authorization_url": "https://auth.openai.com/api/accounts/deviceauth/usercode",
      "device_token_url": "https://auth.openai.com/api/accounts/deviceauth/token",
      "verification_url": "https://auth.openai.com/codex/device",
      "exchange_redirect_uri": "https://auth.openai.com/deviceauth/callback"
    },
    "inject": [
      {
        "header": "authorization",
        "value": "Bearer {access}"
      },
      {
        "header": "chatgpt-account-id",
        "value": "{accountId}"
      }
    ]
  },
  "smtp": {
    "auth": "smtp"
  },
  "discord": {
    "auth": "discord",
    "scope_dims": ["servers", "surfaces"],
    "surface_classes": ["public", "private", "dm"]
  },
  "anthropic": {
    "auth": [
      "oauth",
      "api_key"
    ],
    "model_hosts": [
      "api.anthropic.com"
    ],
    "client_id": "9d1c250a-e61b-44d9-88ed-5944d1962f5e",
    "token_url": "https://platform.claude.com/v1/oauth/token",
    "token_encoding": "json",
    "skew_ms": 300000,
    "login": {
      "flow": "pkce",
      "authorize_url": "https://claude.ai/oauth/authorize",
      "redirect_uri": "http://localhost:53692/callback",
      "scope": "org:create_api_key user:profile user:inference user:sessions:claude_code user:mcp_servers user:file_upload",
      "state_source": "verifier",
      "extra_authorize_params": {
        "code": "true"
      }
    },
    "inject": [
      {
        "header": "authorization",
        "value": "Bearer {access}"
      },
      {
        "header": "x-api-key",
        "value": "{key}"
      }
    ]
  },
  "github": {
    "auth": "api_key",
    "brief": "Work GitHub through its API — the gh CLI, or curl against api.github.com. When github.com is among the hosts above, plain git (clone, fetch, push) is authenticated in transit too.",
    "inject": [
      {
        "header": "authorization",
        "value": "token {key}"
      },
      {
        "header": "authorization",
        "value": "Basic {b64:x-access-token:{key}}",
        "hosts": [
          "github.com"
        ]
      }
    ],
    "connection": {
      "hosts": [
        "api.github.com",
        "github.com"
      ],
      "env": "GH_TOKEN"
    },
    "verify": {
      "method": "GET",
      "url": "https://api.github.com/user",
      "headers": {
        "user-agent": "roster",
        "accept": "application/vnd.github+json"
      }
    }
  },
  "gitlab": {
    "auth": "api_key",
    "brief": "Use the GitLab REST API at gitlab.com/api/v4. Plain git against gitlab.com is not authenticated here; for repository work, code tasks arrive with the checkout already mounted.",
    "inject": [
      {
        "header": "private-token",
        "value": "{key}"
      }
    ],
    "connection": {
      "hosts": [
        "gitlab.com"
      ],
      "env": "GITLAB_TOKEN"
    },
    "verify": {
      "method": "GET",
      "url": "https://gitlab.com/api/v4/user"
    }
  },
  "notion": {
    "auth": "api_key",
    "inject": [
      {
        "header": "authorization",
        "value": "Bearer {key}"
      }
    ],
    "connection": {
      "hosts": [
        "api.notion.com"
      ],
      "env": "NOTION_TOKEN"
    },
    "verify": {
      "method": "GET",
      "url": "https://api.notion.com/v1/users/me",
      "headers": {
        "Notion-Version": "2022-06-28"
      }
    }
  },
  "linear": {
    "auth": "api_key",
    "inject": [
      {
        "header": "authorization",
        "value": "{key}"
      }
    ],
    "connection": {
      "hosts": [
        "api.linear.app"
      ],
      "env": "LINEAR_API_KEY"
    },
    "verify": {
      "method": "POST",
      "url": "https://api.linear.app/graphql",
      "body": "{\"query\":\"{ viewer { id } }\"}"
    }
  },
  "slack-api": {
    "auth": "api_key",
    "hidden": true,
    "inject": [
      {
        "header": "authorization",
        "value": "Bearer {key}"
      }
    ],
    "connection": {
      "hosts": [
        "slack.com"
      ],
      "env": "SLACK_TOKEN"
    },
    "verify": {
      "method": "GET",
      "url": "https://slack.com/api/auth.test",
      "body_contains": "\"ok\":true"
    }
  },
  "slack": {
    "auth": "slack",
    "use": [
      "channel",
      "capability"
    ],
    "inject": [
      {
        "header": "authorization",
        "value": "Bearer {bot_token}"
      }
    ],
    "connection": {
      "hosts": [
        "slack.com"
      ],
      "env": "SLACK_TOKEN"
    }
  }
}