apra-labs/apra-fleet/fleet
Claude Code and agent skill by apra-labs/apra-fleet
- community
Checking that the SKILL.md file is still in the repository.
Fleet infrastructure mechanics - member management, permissions, onboarding, provider awareness, and tool usage patterns
Install
npx vskill@latest install apra-labs/apra-fleet/fleetSKILL.md
Fleet Skill
This skill defines how to interact with fleet infrastructure: registering and onboarding members, managing permissions, dispatching work, monitoring tasks, and handling provider-specific differences.
Core Fleet Tools
| Tool | Purpose | |
|---|---|---|
register_member | Add a new member to the fleet | |
list_members | List all fleet members and their status | |
member_detail | Get detailed info on a member (provider, OS, icon, etc.) | |
update_member | Update member metadata (icon, name, etc.) | |
remove_member | Remove a member from the fleet | |
fleet_status | Check member idle/busy state before dispatch | |
execute_command | Run shell commands on a member | |
execute_prompt | Dispatch a prompt to a member's LLM agent | |
send_files | Push files from local to a member's work folder | |
receive_files | Pull files from a member's work folder | |
monitor_task | Check status of a long-running background task on any member. The auto_stop parameter and GPU utilization polling are cloud-only features. | |
compose_permissions | Generate and deliver provider-native permission config | |
provision_llm_auth | Provision LLM authentication for a remote member. | |
provision_vcs_auth | Provision VCS credentials (GitHub, Bitbucket, Azure DevOps) | |
revoke_vcs_auth | Revoke VCS credentials | |
setup_ssh_key | Migrate remote member from password to key-based auth | |
setup_git_app | Configure GitHub App for token minting | |
update_llm_cli | Update the LLM CLI on a member | |
cloud_control | Manage cloud infrastructure for members | |
shutdown_server | Shut down a remote member's server | |
credential_store_set | Store a secret credential for use in commands (entered OOB - never in chat) | |
credential_store_list | List stored credential names (values are never returned) | |
credential_store_delete | Delete a stored credential by name | |
credential_store_update | Update credential metadata (members, TTL, network policy) without re-entering the secret | |
stop_prompt | Kill the active LLM process on a member. Always call `TaskStop` after calling `stop_prompt`.<br><br>Use when: a member is hung, working on the wrong thing, or needs to be cancelled. |
See sub-documents for detailed usage:
onboarding.md- full 8-step member onboarding sequencepermissions.md- permission composition and denial handlingprofiles/- stack permission profiles (base-dev, base-reviewer, node, python, go, etc.) - add new profiles here to support additional stacks or rolestroubleshooting.md- fleet tool troubleshooting by symptomskill-matrix.md- skill installation matrix by project + VCS + roleauth-github.md,auth-bitbucket.md,auth-azdevops.md- VCS auth provisioning per providerbeads.md- Beads persistent task DB: commands, backlog ops, session recovery patternsbeads-conflict-resolution.md- manual dolt SQL recovery whenbd dolt pull/pushreports a real merge conflict
Beads - Persistent Task Tracking
Beads (bd CLI) is installed automatically by apra-fleet install. It gives fleet users a persistent, dependency-aware task database that survives across sessions, branches, and members.
Run `bd` via `Bash` on the orchestrator - never via `execute_command` on a member.
See beads.md for the full command reference and workflow examples.
Secret variables
The {{secret.NAME}} pattern lets you reference stored secrets in any command without ever exposing plaintext to the LLM or logs.
How it works:
- Store a secret with
credential_store_set- Fleet opens an OOB terminal prompt, so the value never appears in chat - Reference it as
{{secret.NAME}}anywhere in a command string passed toexecute_command,register_member,update_member,provision_vcs_auth,provision_llm_auth, orsetup_git_app - Fleet resolves the token server-side before execution; LLM does not see the secret.
When to use:
- Any API key, token, or password that a member needs in a shell command
- Rotating credentials:
credential_store_deletethencredential_store_set- no re-provisioning required - Pre-loading secrets before a dispatch so members can authenticate in commands autonomously
NOTE: `{{secret.NAME}}` only resolves in specific credential fields (listed above). Using it in any other parameter (e.g. a prompt, a path field in a non-credential tool, or any other unsupported parameter) will pass the token string through literally - the secret will NOT be injected, and the raw handle name will be visible in logs. Only use {{secret.NAME}} in the fields documented above.
Access control (scoping): Credentials can be scoped to specific members.
members="*"(default) - all members can access the credentialmembers="alice,bob"- only those members can access it- Scoping is enforced at resolve time - a member outside the allowed set receives an access-denied error
- Updating scope or metadata: Use
credential_store_updateto changemembers,ttl_seconds, ornetwork_policywithout re-entering the secret. Usecredential_store_setagain only if you need to change the secret value (triggers OOB re-entry).
TTL (time-to-live): Set ttl_seconds to auto-expire a credential. Expired credentials are rejected at resolve time with a clear error (not silently empty).
Example: credential_store_set name=ci_token ttl_seconds=3600
Network egress policy: Attach a network policy to a credential to control outbound network access for commands that use it:
| Policy | Behaviour | |
|---|---|---|
'allow' (default) | No restriction | |
'deny' | Commands invoking network tools (curl, wget, ssh, git push, etc.) are blocked | |
'confirm' | OOB prompt before the network call is allowed |
Member Identification
All tools accept member_id (UUID) or member_name (friendly name) to identify a member. member_id takes precedence when both are provided.
Tool Boundaries
- Local members: ALWAYS use fleet tools (
execute_command,execute_prompt,send_files, etc.) - never SSH directly or bypass fleet infrastructure - Fleet tools are the canonical interface - all member interactions go through them
Dispatch Rules
Rule: Shell commands (git, npm, bash scripts, file ops) -> execute_command. LLM reasoning tasks (write code, review, plan, analyse) -> execute_prompt. When in doubt: if a human could write the exact command string upfront, it's execute_command.
- `execute_prompt` - always wrap in a background Agent:
Agent(run_in_background=true). No exceptions. - `execute_command` - any command that may take several seconds must be wrapped in a background Agent. Short reads (
cat,git status,echo) can be called inline. Always use bash syntax - Git Bash is universally available on developer machines. Never use PowerShell or cmd.exe syntax, even on Windows members. - When clubbing fleet calls into a background Agent: Always name the tool explicitly in the subagent prompt - write "use
execute_commandto run..." or "useexecute_promptto dispatch...". Never leave tool selection implicit. - `send_files` / `receive_files` - transfers exceeding 1MB must use a background Agent.
Concurrent dispatch guard: Only one execute_prompt can be in-flight per member at a time (enforced server-side). A second concurrent dispatch returns immediately with:
Use stop_prompt to cancel the in-flight session before re-dispatching.
Pre-dispatch Checks
Before dispatching any work:
fleet_status- confirm member is idle (status must not be busy)- Member must have completed onboarding - see
onboarding.md
Do not dispatch to a busy member. If busy, wait or re-check member_detail.
File Transfer
Both send_files and receive_files are batch operations - always transfer all files in a single call, never one file per call.
send_files- push any files to a member: context files, plans, scripts, binaries, configs, or any other content. Takeslocal_paths(array of local file paths) and optionaldest_subdir(destination subdirectory relative to work_folder on member; defaults to work_folder root, equivalent to"."). Optionalsubstitutions: { name: value }replaces every{{name}}token in each file before transfer - see Substitutions section below. Always try to batch multiple files in a single call.receive_files- pull files back: results, logs, build artifacts, updated configs, etc. Takesremote_paths(array of file paths on the member) andlocal_dest_dir(local directory to write files into). Always try to batch multiple files in a single call.
Directories and globs: send_files accepts individual file paths only - directories and glob patterns are not supported yet. To transfer an entire directory, tar it locally and extract on the member:
Cross-OS transfers: Both send_files and receive_files work bidirectionally for Linux<->Windows transfers (fleet host on Linux, member on Windows, and vice versa).
Substitutions (send_files and execute_prompt)
Both send_files and execute_prompt accept an optional substitutions: { "token_name": "value" } parameter that replaces {{token_name}} placeholders in file content or prompt text before the content is delivered to the member.
Usage:
Rules:
- Token names must match
[A-Za-z_][A-Za-z0-9_]*- no dots, hyphens, or other special characters. - All tokens used in any file (or the prompt string) must have a corresponding key in
substitutions. Missing tokens cause the call to fail with zero side effects (no files written, no CLI invoked). - Extra keys are silently ignored - pass a superset map without error.
- No recursive substitution: values containing
{{...}}are written verbatim. - Source files on the fleet host are never modified; only the delivered copy is substituted.
- If
substitutionsis omitted and file/prompt content contains{{token}}patterns, a warning is returned (call still succeeds).
[SECURE] Secrets boundary -- never use substitutions for secrets:
- Substitution keys with dots (e.g.
secret.github_pat) are rejected outright. {{secret.NAME}}patterns in file/prompt content pass through verbatim - they are resolved later only byexecute_commandvia the credential store, not here.- Substitution values are never logged. But callers must not put plaintext secrets in substitution values; use
{{secret.NAME}}inexecute_commandfor secrets.
Permissions
compose_permissions produces provider-native config automatically. See permissions.md for:
- How to compose and deliver permissions before dispatching work
- How to handle permission denials during execution
- How to recompose when switching roles
execute_prompt Parameters
execute_prompt accepts substitutions (see Substitutions section above), model, resume, and timeout parameters.
Timeout Parameters
execute_prompt accepts two independent timeout parameters:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 93 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/fleet/SKILL.md
Popularity
- Repository stars
- 62
- Repository forks
- 10
- 7-day trend score
- 21
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/apra-labs/apra-fleet/fleet)