fleetshift-create-shift
Skill2.8k starsChanged 3 months agoApache-2.0View on GitHub
Create a Fleetshift shift definition that runs an agent to apply transformations across a set of repository targets. Use when the user wants to set up a reusable, repeatable change (e.g. "add a header to every service", "migrate every repo from X to Y") that can later be run, checked on, and have PRs opened from it. Requires explicit user confirmation before creating the shift.
We split this skill into the rules it gives an agent
13 rules. About 0 are common, 7 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 24
If it isn't, ask the user to run npx @spotify/portal-cli auth login.
- Very specific: line 25
If auth list shows more than one Portal instance, confirm which one with the user and pass --instance <name> on every call.
- Very specific: line 27
If a Portal MCP server is connected instead, the same actions are available as fleetshift_<action> tools (for example …
- Very specific: line 31
Never pass --yes. It confirms actions marked destructive (stop-jobs, close-prs, delete-shift).
- Distinctive: line 38
Before creating anything, understand the current state.
- Distinctive: line 49
If a shift with the user's desired name already exists, surface it and propose a distinct name rather than overwriting.
- Very specific: line 51
If the user wants a one-off change and there is no reusable target set, create-shift still works: the targets define the scope up front.
- Distinctive: line 56
Keep user input to a minimum.
- Distinctive: line 66
shiftPrompt: write a precise, self-contained instruction for the agent to follow in every target repo.
- Very specific: line 71
pullRequest: default to metadataMode: "generate" with a title derived from the goal.
- Distinctive: line 77
owner: default to the caller. Set a group only if the user mentions a team.
- Distinctive: line 99
Do not pass a custom image unless the user explicitly requests an allowed deployment-managed image.
- Distinctive: line 106
After a successful create, verify with a read-only call and report the result:
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Create a Fleetshift shift
A Fleetshift shift is a reusable definition: an agent prompt plus a set of
repository targets and PR metadata. Once created, a shift can be run
(fleetshift-run-shift), checked on (fleetshift-check-shift), and have PRs opened from it
(fleetshift-create-prs).
This skill creates agent-type shifts only: the shift runs an LLM agent against each target repository with a prompt you provide.
Mutating action — explicit confirmation required. Do not call
fleetshift:create-shiftuntil the user has explicitly confirmed the shift name, the agent prompt, the target scope, and the PR metadata. A "looks good"/"go ahead" is not enough — ask and get a clear "yes" first.
Prerequisites
- The Portal CLI is authenticated:
npx @spotify/portal-cli auth show. If it isn't, ask the user to runnpx @spotify/portal-cli auth login. Ifauth listshows more than one Portal instance, confirm which one with the user and pass--instance <name>on every call. - If a Portal MCP server is connected instead, the same actions are
available as
fleetshift_<action>tools (for examplefleetshift_list-shifts). They take the same input, but have no--dry-run, so the confirmation steps below matter even more. - Never pass
--yes. It confirms actions marked destructive (stop-jobs,close-prs,delete-shift). Only thefleetshift-run-shiftkill switch uses it, forstop-jobs. - You know what change the user wants and which repositories it applies to.
1. Scope the shift (read-only)
Before creating anything, understand the current state. These calls never mutate anything and need no confirmation:
# Existing shifts (names, owners, progress) so you can avoid collisions
npx @spotify/portal-cli actions fleetshift:list-shifts --input '{}' --json
# Details of an existing shift, if you want its targets/PR config as a model
npx @spotify/portal-cli actions fleetshift:get-shift --input '{"shiftName":"<shift-name>"}' --json- If a shift with the user's desired name already exists, surface it and propose a distinct name rather than overwriting.
- If the user wants a one-off change and there is no reusable target set,
create-shiftstill works: the targets define the scope up front.
2. Draft the inputs from the user's goal
Keep user input to a minimum. Work out the goal (what should change and why) from the conversation, then draft every field yourself. Don't send the user a form to fill in. Only ask about something you can't reasonably infer, usually just which repositories to target. Everything else gets a draft the user can accept or tweak in the confirmation step.
- name: derive a short kebab-case id from the goal (e.g.
add-maintainers-header), checked againstlist-shiftsso it doesn't collide with an existing shift. - title: derive a human-readable title from the goal.
- shiftPrompt: write a precise, self-contained instruction for the agent to follow in every target repo. Spell out the exact change, how to tell it's done, and what not to touch. Turn the user's goal into these concrete steps; don't just repeat it back. Look at a representative target repo first if that makes the prompt more accurate.
- pullRequest: default to
metadataMode: "generate"with a title derived from the goal. UsemetadataMode: "manual"only if the user has specific PR wording in mind. - targets: build one or more structured
{ source, type, id }references from whatever the user named (services, a team, a soundcheck check). Look up entity refs yourself instead of asking for them. - owner: default to the caller. Set a group only if the user mentions a team.
3. Confirm explicitly, then create (mutating)
First validate the drafted payload with --dry-run. This checks the input
locally and doesn't create anything:
npx @spotify/portal-cli actions fleetshift:create-shift --input '{"name":"add-maintainers-header","title":"Add maintainers headers","type":"agent","shiftPrompt":"Add a Maintainers section to the README listing the owning team from catalog-info.yaml, keeping existing content intact.","targets":[{"source":"catalog","type":"entity","id":"component:default/my-service"}],"pullRequest":{"metadataMode":"generate","title":"Add maintainers header to README"}}' --dry-run --jsonFix anything the dry run rejects. Then show the user the drafted payload
(shift name, prompt, target scope, PR title/description) in one go, so they
can confirm or adjust it in a single reply. A dry run is not a create: only
after an explicit "yes", run the same command without --dry-run:
npx @spotify/portal-cli actions fleetshift:create-shift --input '<the confirmed payload>' --json- The shift type must be
"agent". - Do not pass a custom image unless the user explicitly requests an allowed deployment-managed image.
- For more than 10 targets, summarize the full scope and confirm it separately,
then pass
"confirmedLargeTargetSet":true.
4. Verify
After a successful create, verify with a read-only call and report the result:
npx @spotify/portal-cli actions fleetshift:get-shift --input '{"shiftName":"add-maintainers-header"}' --jsonReport the shift name, owner, target count, and what to do next — usually
"run it" (see fleetshift-run-shift).
After
- To run it: use the
fleetshift-run-shiftskill. - To check on runs/PRs later: use the
fleetshift-check-shiftskill (read-only, safe to run days or weeks later). - To open PRs for completed targets: use the
fleetshift-create-prsskill.
Trending
More talk lately.thin dataabout the whole repository
Who's talking about spotify/portal-ai-plugins
- @github-trending-js.bsky.social“📦 spotify / portal-ai-plugins ⭐ 2,216 (+34) 🗒 TypeScript”Bluesky · Sep 24, 2026 · 1 likes
- @tommis.fi“github.com/spotify/port...”Bluesky · Sep 5, 2026 · 1 likes
- sudosubin/agents.nix“claude-code-plugins.github.spotify.portal-ai-plugins: init at 0-unstable-2026-10-23”GitHub · Oct 28, 2026
- sudosubin/agents.nix“claude-code-marketplaces.github.spotify.portal-ai-plugins: init at 0-unstable-2026-10-23”GitHub · Oct 28, 2026
- Uraxii/dotai“feat(shunt): vendor Spotify's shunt, patched to the current hook schema”GitHub · Sep 25, 2026
The biggest 5 of 10 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 10
Talked about on GitHub and Bluesky (10 times).
On GitHub · 8
- Oct 28, 2026claude-code-plugins.github.spotify.portal-ai-plugins: init at 0-unstable-2026-10-23 — sudosubin/agents.nix0 reactions
- Oct 28, 2026claude-code-marketplaces.github.spotify.portal-ai-plugins: init at 0-unstable-2026-10-23 — sudosubin/agents.nix0 reactions
- Sep 25, 2026feat(shunt): vendor Spotify's shunt, patched to the current hook schema — Uraxii/dotai0 reactions
- Sep 13, 2026What krewe can take from the Spotify Portal plugins — atlantic-blue/quay-krewe0 reactions
- Sep 10, 2026feat(pi): block blind full-file reads over 800 lines in cost-optimization — maruina/dotfiles0 reactions · 1 comment
3 more on GitHub
- Sep 6, 2026Align delegation with Spotify Shunt: Fable edits, workers read — pontusc/.dotfiles0 reactions
- Sep 6, 2026feat(trusty-mpm): shunt-style bulk-read diversion hook per session, opt-in via manifest — bobmatnyc/trusty-tools0 reactions · 11 comments
- Sep 6, 2026poc(trusty-mpm): shunt-style PreToolUse read/write diversion to a cheaper worker model, alone and on Bedrock — bobmatnyc/trusty-tools0 reactions · 8 comments
On Bluesky · 2
- Sep 24, 2026📦 spotify / portal-ai-plugins ⭐ 2,216 (+34) 🗒 TypeScript — @github-trending-js.bsky.social1 likes and repost
- Sep 5, 2026github.com/spotify/port... — @tommis.fi1 likes and repost · 1 reply
In this repository11 other files it gives its agents.
- AGENTS.mdAGENTS.md
- actionsSkill
- doctorSkill
- feedbackSkill
- fleetshift-check-shiftSkill
- fleetshift-create-prsSkill
- fleetshift-run-shiftSkill
- fleetshift-troubleshoot-shiftSkill
- searchSkill
- serviceSkill
- setupSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

