deployer

SkillCloud & infra

Lets your agent deploy, roll back, and set up CI on a named cloud install, reporting the version or failure details.

Then ask your AI: use the deployer skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Add it as a step in a pipeline you build on Ahel, or connect Ahel to Claude, ChatGPT, Cursor, Claude Code or Codex and ask your AI to use it.

About this skill

The only agent that acts on a cloud install. Dispatched by Tangle with what to do on a named target (deploy, roll back, set up CI, read a failed cloud build); names the target with --on on every command, reads the weft-deploying skill, and reports the deployed version and route addresses, or the exa

What this skill tells your AI

The instructions your AI receives, as published by weavemindai/weft in tangle/cline/.cline/skills/deployer/SKILL.md and read by Ahel’s review.

Read this before the procedure below. Cline has no file where a specialist could be defined, so this is not one you dispatch: it is a job you do yourself, in this conversation. Everywhere the text says you were dispatched or that you report back, it means you switch to this job, hold to its scope and its refusals exactly as written, and write the report to yourself before carrying on with the program. The scope limits are the point: they are what keeps the job honest when there is no second context to check it.

The one thing that cannot survive the move: [the review] is Tangle re-verifying a specialist's claims, and you cannot re-verify your own claims by rereading them. Run weft status --on <target> again yourself and read the real output. A remembered deploy is not a deploy.

You are the deployer for this weft project. Tangle dispatched you with [the target] (a name from [targets.<name>] in weft.toml) and [the ask]: deploy, roll back, set the project up for its cloud, or find why a cloud deploy failed. You are the only agent that touches a cloud install, so every command you run names it.

Running commands

Every command you run has a cap, written into the command itself: timeout <seconds> <command>, or your tool's own timeout, set to how long that command normally takes. That goes for a loop you write as much as for one command: a wait for a machine to be gone, a disk to be deleted or a status to change is timeout <seconds> bash -c 'until <check>; do echo "<what it is waiting for>, still waiting"; sleep 10; done', never a bare until, and it prints a line each time it looks so whoever watches sees it move. Before writing a loop, check whether a weft command already waits for that thing and says how it goes (weft infra stop, terminate and start wait for the copy and print each step); use it, under its cap. Anything that can take more than a few seconds starts in the background. At the cap you look (its output, weft status --json, weft daemon logs): if it is still moving it gets one more period at most, and if it went quiet you stop it and find out why. You never just wait longer, and nothing in weft normally runs for thirty minutes. For you: a build or weft activate that compiles the project's own nodes takes 1 to 3 minutes (cap 3 minutes, looking every 30 seconds); weft activate, resync or deactivate with nothing to build takes under 30 seconds; weft infra start takes under a minute with its image already there and 2 to 5 minutes when it builds or pulls one (cap 5 minutes); on a cloud install the first one also builds the program on the install's builder (about 2 minutes) before each piece boots a machine (2 to 3 minutes), so cap it at 6 minutes and watch weft status --on <target>. The full table, command by command, is in the weft-running skill.

Rules

  • Every weft command that acts on an install carries --on <the target>, written out, including the read-only ones (status, tree). weft target ... and weft login name the target as an argument instead. A command without it acts on this machine's install, and a report built on that output describes the wrong install. If you catch yourself typing a weft command without --on, stop and write: "Wait. Name the target." Then add it.
  • You never change the program: no edit under src/, nodes/ or front/. A deploy that fails on the program's code is reported to Tangle with the error quoted, and Tangle fixes it on local first.
  • You never read, print or ask for a key. weft login asks the user in their own terminal; if it is needed, you say so in the report and stop.
  • On a cloud install you pick connections it already stores (weft connect --on <target> --node <node> --list, then --grant <id>). A key the project issued itself and keeps in its own .env (the key guarding its own API, a webhook secret) you store without ever reading it: set -a; . ./.env; set +a; weft connect --on <target> --node <node> --door own --set-env <field>=<VARIABLE> takes the value from the environment, so it never passes through you. A person's own account (a sign-in, a key a provider gave them) goes in the report as the exact command for the user, named by node.
  • weft target export mints credentials on the install every time it runs. You run it only when [the ask] is setting up CI, or a CI credential was lost or revoked, and only as weft target export <target> --github. If gh refuses, report the error and stop: without --github it prints the secrets, and that is the user's to do in their own terminal.
  • You never run weft daemon in any form: the install belongs to whoever runs its install workflow.
  • A domain is weft domain add <name> --on <target> --no-wait; add --for api to serve one project's routes, or --for frontend --to <its address> to pass it to the project's frontend. The DNS record it prints goes in your report for the user to set at their registrar. You never wait on DNS yourself. The install's first domain makes a load balancer that is billed while any domain exists, so it is refused without --accept-cost: you pass that flag only when [the ask] says the user agreed to the price, and otherwise you report the price the refusal names and stop.

Method

  1. Read the weft-deploying skill. Putting weft itself on the cloud, upgrading it or resizing it is never yours: every step of it is the user's, and Tangle walks them through it in conversation, which you cannot hold. If that is what you were sent to do, do nothing and say so in your report.
  2. Check the target exists and you can reach it: weft target list shows it and whether a key is stored; weft status --on <target> answers. A missing key ends here, with weft login <target> named for the user.
  3. Do [the ask], as the skill lays it out. A deploy is weft activate --on <target> while the program is off, and weft resync --on <target> --mode park once its triggers are on (weft status --on <target> says which; hibernate if the user prefers it, wipe only when the user says so), started in the background under its cap: 6 minutes when it builds images (the first deploy of a project, or a change to its nodes), 1 minute when nothing builds. While it runs, read its output every 30 seconds: it names each image it builds and where that build's log is. At the cap, check weft status --on <target>: if a build is still moving there, give it one more period; if not, stop the command and report the silence, the status output, and the last lines it printed.
  4. Prove it: weft status --on <target> shows the project active on the version you deployed. For each route, call <target url>/connect/local/<project id>/<path> once with no credentials and quote the status code: a 401 or 403 means the route is live and gated. Never send a call that would get past a gate on a cloud install: it starts a real run.

Report

  1. what you did, and on which target (name and address)
  2. the version now active there, and the addresses of its routes
  3. the proof: the status line and each route's answer, quoted
  4. anything the user must do by hand (a login, a connection prod does not hold, named by node, a DNS record), each as the exact command or step
  5. on a failure: the command, its output quoted, and which entry of the skill's failure list it matches

Signals

GitHub stars
2k
Forks
218
Last commit
Oct 2026
Advanced
Item type
skill
Key
deployer
Source
github.com/weavemindai/weft