Ship what the agent built. Artifact Deploy takes a kind: "webapp" artifact from your library and puts it live at a global public HTTPS URL — in your own AWS account, with a default TTL, automatic cleanup, and a promote-to-persistent path.
Crew orchestrates the deploy; your account pays only for what the site actually serves.
~/.aws/config). Click Verify to confirm access.kind: "webapp" appear in the Artifacts gallery with a live local preview.Three tiers, chosen by the agent based on the artifact's needs:
| Tier | Resources in your account | Example |
|---|---|---|
| Static | S3 (per-site prefix) + shared CloudFront distribution | Landing page, three.js demo |
| Fullstack | + Lambda Function URL behind /api/* | API-backed demo |
| Stateful | + DynamoDB table | App with persistence |
The first deploy in an account creates a shared base stack (kirocrew-deploy-base: S3 bucket + CloudFront distribution). This takes ~5–15 min while CloudFront propagates globally.
Every subsequent deploy reuses the base stack and completes in seconds.
| Mode | Behavior |
|---|---|
| Finite TTL (default 72h) | Requires the reaper stack (install-reaper.sh) — an in-account Lambda that removes expired deployments. Without it, finite-TTL deploys are refused (409). |
Persistent (ttl_hours: 0) | No reaper required. Tear down manually from the card or console. |
The reaper only ever touches resources that carry the kirocrew:site + kirocrew:managed tags and match the managed naming scheme. It cannot delete anything else in your account.
Every artifact's card in the dashboard renders one of these states:
The card renders your app inside a browser-framed preview. It prefers the local copy (served through a token-gated gateway channel, sandboxed, works even before deploying). Deployed sites can render the remote CloudFront page directly when the gateway confirms it's framable.
The preview channel is deny-by-default: token-gated, sandboxed to an opaque origin, path-traversal and symlink hardened, and every response is scanned so credential-bearing files are refused rather than served.
The card shows what-if traffic scenarios:
1,000 views · $0.05 100,000 views · $5.00
These are estimates, not a bill. You pay only for actual usage. Estimates are labelled explicitly to avoid confusion.
Sidebar → Artifact Deploy. One place for everything deployed:
| Section | What it does |
|---|---|
| Profiles | Register / create AWS profiles, set the default, Verify access (STS read — Crew never stores credentials) |
| Stats | Profiles, active deployments, ready-to-deploy artifacts, estimated cost (labelled not a bill) |
| Fleet | Every active deployment: URL, TTL, profile, health, tear down / persist |
| Setup | IAM policy generator + reaper install guidance |
Three invariants hold:
kirocrew:managed=true. The reaper enforces the same on cleanup.Before your first deploy:
# 1. Register the AWS profile from ~/.aws/config in the Artifact Deploy console # 2. Apply the generated IAM policy to that profile (the console shows the command) # 3. Install the reaper stack in each region you'll deploy to ./install-reaper.sh --profile my-profile --region us-east-1
The IAM policy generator produces a least-privilege policy scoped to kirocrew:managed=true tagged resources. Apply it yourself; Crew won't do it for you.
Every deployed artifact card has a Tear down button. It:
expiredFor persistent deploys (ttl_hours: 0), this is the only way to remove them — the reaper doesn't touch persistent sites.
For a deploy you want to keep:
If a deploy expired or you want to update it:
| Symptom | Cause / fix |
|---|---|
| Finite-TTL deploy returns 409 | Reaper stack missing — run install-reaper.sh for that profile/region, or use ttl_hours: 0 |
| Blank remote preview on the card | Deployed site's headers pre-date the current base stack. Any next deploy updates the stack in place; until then, the card shows the status fallback with a plain link |
| Card stuck on "Not deployed" after a script deploy | Script-path deploys don't auto-update the artifact yet — ask the agent to back-fill the deploy metadata (the audited API path does this automatically) |
Artifact Deploy is one thing you can do with artifacts. Every artifact — not just webapps — has a stable identity, versions, and a live preview. See Artifacts & widgets for the model.
Web / Artifact Deploy