Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when an AI agent, script, or CI job needs to deploy to or operate Gipity WITHOUT a human present to complete an interactive email-code login - e.g. a self-hosted coding agent (Hermes, OpenClaw), a cron, or a CI pipeline running in an ephemeral container. Covers minting a long-lived agent API token (gip_at_*), authenticating headlessly via the GIPITY_TOKEN env var, and running the build → deploy → verify loop unattended.
.claude/skills/gipityai-agent-deploy/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-18 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 30% | 0% |
<!-- GENERATED from platform/docs/skills/agent-deploy.md by platform/scripts/sync-claude-plugin.ts - do not edit here. -->
> Gipity required. This skill needs the gipity CLI linked to a project. If gipity status errors or shows no project, run the setup flow in the gipity skill first (in Claude Code or Grok: /gipity:setup; in Codex or any other agent, follow the gipity skill's setup steps directly). > > This doc is shared across Gipity surfaces; where it names an agent tool, use the CLI equivalent: add → gipity add <name>, file_write/file_read/file_delete → edit files in the project directory directly (they auto-sync), project_deploy → gipity deploy dev, code_execute → gipity sandbox run. The live version of this doc: gipity skill read agent-deploy.
The normal gipity login is interactive: it emails a 6-digit code that a human reads and pastes back. An autonomous agent, a cron job, or a CI runner has no inbox to check - and a fresh/ephemeral container has no saved session on disk. For those, use a long-lived agent API token (gip_at_*) instead. It authenticates from an environment variable, so it survives fresh containers, never expires unless you set --expires, bills to your account like any other usage, and can be revoked instantly.
This is the path for self-hosted coding agents (e.g. Hermes, OpenClaw), scripts, and CI that want to build, deploy, and operate Gipity apps without a human in the loop.
~/.gipity/auth.json).If a human is present at a terminal, plain gipity login is simpler - see getting-started. Use a token when login can't be completed interactively.
From a machine where you're already logged in - your own CLI or the web CLI in the browser:
bashgipity token create --name "Hermes on my VPS" # name is a label you choose gipity token create --name "CI deploy" --expires 90 # optional expiry, in days gipity token create --name "ci" --expires 90 --json # machine-readable
It prints the token once - copy it immediately, it can't be retrieved later:
gip_at_eygYHKVRkBP8UXY5dfQzZV_xMH6t1x4Bynnhv4GD128Only a hash is stored server-side, so a lost token can't be recovered - only revoked and replaced. With --json the output is { "token": "gip_at_…", "shortGuid": "at_…", "expiresAt": "…"|null }.
Put the token in the agent's environment. The CLI picks it up automatically, skips login entirely, and acts as your account:
bashexport GIPITY_TOKEN=gip_at_eygYHKVRkBP8UXY5dfQzZV_xMH6t1x4Bynnhv4GD128
That's the whole auth step. GIPITY_TOKEN takes precedence over any saved session, so the same command works identically in a fresh container with no auth.json and on a logged-in workstation. Every CLI command now works unattended:
bashgipity status # confirms authenticated, no login prompt gipity init # link the cwd as a project (or `gipity add <template>` in an empty dir) gipity deploy dev # → https://dev.gipity.ai/<account>/<project>/ gipity page inspect <url> # headless verify: console errors, failed resources
The full build loop - gipity add → edit files → gipity deploy dev → gipity page inspect → fix → repeat (see deploy) - runs with no interactive step anywhere.
> Keep deploys on dev. Never run gipity deploy prod unattended unless the job is explicitly a production release - prod publishes to the user's live URL.
bashgipity token list # active tokens: name, created, expires, last-used gipity token revoke <id> # e.g. gipity token revoke at_espgamjb - instant, irreversible
Revocation takes effect immediately. The active token count also appears on the Plan tab in Monitor.
--expires <days> for CI or short-lived agents; omit it only for long-running trusted agents.gipity token revoke <id> and mint a fresh one - there's no in-place rotation.last-used tells you which is which.| Piece | Detail | |---|---| | Token format | gip_at_ + random secret; shown once at creation | | Env var | GIPITY_TOKEN - read by the CLI on every command, ahead of any saved login | | Sent as | Authorization: Bearer gip_at_… to the Gipity API | | Stored as | A one-way hash server-side - never the plaintext | | Lifetime | Never expires unless --expires <days> is set; revoke is instant | | Mint / list / revoke | POST / GET / DELETE …/auth/agent-tokens (via gipity token …) |
gipity login, creditsgipity.yaml the token-authed agent drives| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-18 | fail→pass | 15,854 | 6,084 | -62% | 1 | 1 | 0% | 2,418 | 2,477 | +2% | 0 | 0 | — |
case-02 | fail→pass | 13,585 | 6,732 | -50% | 1 | 1 | 0% | 2,519 | 2,944 | +17% | 0 | 0 | — |
case-03 | fail→pass | 11,135 | 2,290 | -79% | 1 | 1 | 0% | 1,906 | 2,041 | +7% | 0 | 0 | — |
case-01 | fail→pass | 13,264 | 3,893 | -71% | 1 | 1 | 0% | 2,063 | 2,406 | +17% | 0 | 0 | — |
case-04 | fail→pass | 8,534 | 2,313 | -73% | 1 | 1 | 0% | 1,562 | 2,024 | +30% | 0 | 0 | — |
case-05 | fail→pass | 12,468 | 3,103 | -75% | 1 | 1 | 0% | 2,378 | 1,967 | -17% | 0 | 0 | — |
case-06 | fail→pass | 20,697 | 3,296 | -84% | 1 | 1 | 0% | 960 | 1,866 | +94% | 0 | 0 | — |
case-07 | fail→pass | 23,684 | 1,798 | -92% | 1 | 1 | 0% | 4,527 | 1,944 | -57% | 0 | 0 | — |
case-12 | pass→pass | 11,042 | 5,065 | -54% | 1 | 1 | 0% | 1,799 | 2,429 | +35% | 0 | 0 | — |
case-08 | fail→pass | 9,594 | 2,699 | -72% | 1 | 1 | 0% | 1,697 | 2,059 | +21% | 0 | 0 | — |
case-09 | fail→pass | 10,700 | 1,829 | -83% | 1 | 1 | 0% | 1,880 | 1,909 | +2% | 0 | 0 | — |
case-10 | pass→pass | 8,437 | 2,898 | -66% | 1 | 1 | 0% | 1,357 | 2,153 | +59% | 0 | 0 | — |
case-11 | pass→pass | 11,343 | 2,968 | -74% | 1 | 1 | 0% | 1,900 | 2,163 | +14% | 0 | 0 | — |
case-13 | fail→pass | 6,660 | 1,810 | -73% | 1 | 1 | 0% | 1,086 | 1,941 | +79% | 0 | 0 | — |
case-14 | pass→pass | 11,716 | 5,470 | -53% | 1 | 1 | 0% | 1,923 | 2,463 | +28% | 0 | 0 | — |
case-15 | fail→pass | 12,640 | 3,330 | -74% | 1 | 1 | 0% | 2,046 | 2,134 | +4% | 0 | 0 | — |
case-16 | fail→pass | 10,898 | 1,566 | -86% | 1 | 1 | 0% | 1,843 | 1,813 | -2% | 0 | 0 | — |
case-17 | pass→pass | 2,879 | 2,780 | -3% | 1 | 1 | 0% | 447 | 1,905 | +326% | 0 | 0 | — |
case-19 | pass→pass | 11,610 | 3,391 | -71% | 1 | 1 | 0% | 1,868 | 2,260 | +21% | 0 | 0 | — |
case-20 | fail→pass | 6,958 | 1,955 | -72% | 1 | 1 | 0% | 1,292 | 1,977 | +53% | 0 | 0 | — |
case-21 | fail→pass | 7,972 | 2,850 | -64% | 1 | 1 | 0% | 1,572 | 2,111 | +34% | 0 | 0 | — |
case-22 | fail→pass | 8,994 | 4,116 | -54% | 1 | 1 | 0% | 1,597 | 2,377 | +49% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +73 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.