podcvd
Manages the lifecycle of Cuttlefish instances and their groups using podcvd, including automatic management of all ADB connections.
Informações da origem
- Repositório
- google/android-cuttlefish
- Última atividade na origem
- 13 de outubro de 2026 às 18:46
- Idioma detectado do SKILL.md
- inglês
- Estrelas
- 734
- Forks
- 251
Opções de instalação
Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.
Revise os arquivos de origem
Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.
Explorador de arquivos
2 arquivosExibindo SKILL.md
SKILL.md
Instruções da origem · Visualização somente leitura- name
- podcvd
- description
- Manages the lifecycle of Cuttlefish instances and their groups using podcvd, including automatic management of all ADB connections.
# podcvd Skill Instructions
This skill fully orchestrates the lifecycle of Cuttlefish instances and their groups within container environments, **including the automatic establishment and teardown of ADB connections.**
> [!WARNING]
> **Exclusive ADB Connection Control**: This skill internally manages all required ADB connections when creating, removing, or clearing instances. You **MUST NOT** invoke external skills, MCP servers, or secondary tools to establish ADB connections to these Cuttlefish instances, as doing so will cause system conflicts.
> [!WARNING]
> **Strict Isolation from `cvd`**: `podcvd` and standard `cvd` do not share state or information. Mixing their usage will cause inconsistent states and system errors.
> * **MUST NOT** use standard `cvd` commands if this `podcvd` skill has been used in the environment.
> * **MUST NOT** use this `podcvd` skill if standard `cvd` was previously used to manage instances.
> * **Why Instances May Seem Missing**: Because they do not share state, instances created via standard `cvd` will **not** be visible to `podcvd` (e.g., `podcvd fleet` will show no instances), and vice versa. If you cannot find an expected Cuttlefish instance, verify which tool was used to create it.
## Prerequisites
* **Required Build Artifacts**: Launching Cuttlefish instances requires appropriate Cuttlefish host tools (host binaries and libraries) and Android device images (such as system.img, boot.img, and vendor.img):
* **Inside an Android Workspace**: You must initialize the environment (e.g., `lunch <target>`) and build the required targets (e.g., `m`) to ensure that valid Cuttlefish host tools (inside `ANDROID_HOST_OUT`) and Android device images (inside `ANDROID_PRODUCT_OUT`) are generated.
* **Outside an Android Workspace**: If you are not in an active build environment, you must ensure that compatible, pre-built Cuttlefish host tools and Android device images are already present in the working directory or are otherwise accessible via the relevant environment paths (like `ANDROID_HOST_OUT` and `ANDROID_PRODUCT_OUT`).
## Setup & Installation Guidance
If `podcvd` is not installed (e.g., `which podcvd` fails) or executing `podcvd` fails due to an unconfigured host (e.g., explicit prompts to run `podcvd-setup` or missing device permissions such as `/dev/kvm`), follow the rule below:
### Execution Rule (Mandatory)
* You **MUST** check if the reference file `references/installation.md` exists within this skill directory.
* **If `references/installation.md` exists**: You **MUST** read its contents using `view_file` and strictly follow the environment-specific instructions provided inside to install `cuttlefish-podcvd`, initialize the host, or guide the user through the required setup steps.
* **If `references/installation.md` does NOT exist**: Do not execute installation or setup commands directly. Instead, guide the user to manually run `sudo apt install -y cuttlefish-podcvd` (if `podcvd` is not installed) or `podcvd-setup` (if the host is unconfigured) in their terminal, and finish.
## Mandatory Environment Configuration (Client ID Tracking)
Setting the `PODCVD_CLIENT_ID` environment variable is **MANDATORY** whenever executing `podcvd` subcommands. This ensures proper session tracking and prevents resource collisions.
### Execution Rule (Mandatory)
* You **MUST** check if the reference file `references/podcvd_client_id.md` exists within this skill directory.
* **If `references/podcvd_client_id.md` exists**: You **MUST** read its contents using `view_file` and strictly follow the platform-specific instructions provided inside to construct and pass `PODCVD_CLIENT_ID` before calling `podcvd`.
* **If `references/podcvd_client_id.md` does NOT exist**: Only as an exception, omit setting `PODCVD_CLIENT_ID` (leave it empty) and execute `podcvd` directly.
## Key Execution Guidelines & Considerations (Crucial)
> [!IMPORTANT]
> Always follow these essential execution policies when managing Cuttlefish instances:
* **ADB Connection Lifecycle**: Subcommands (e.g., `create`, `start`, `restart`, `powerwash`) automatically establish or re-establish ADB connections, while subcommands (e.g., `stop`, `remove`, `clear`, `reset`) automatically tear down ADB connections. Never invoke external ADB tools manually.
* **Dynamic Group Identifier Tracking**: Executing `podcvd create` initializes a new instance group and returns a JSON response containing its assigned `"group_name"`. Because `"group_name"` is the primary identifier for managing that group, you **MUST** extract and track this string (from the `create` output or `podcvd fleet`) to dynamically pass `--group_name=<group_name>` in subsequent lifecycle operations (e.g., `stop`, `start`, `restart`, `remove`).
* **Booting & Execution Duration**: Starting or booting Cuttlefish instances (e.g., executing `create`, `start`, `restart`, `powerwash`) takes approximately 1 minute for the virtual device boot process and ADB connection setup to complete. During this boot window, `podcvd fleet` will report status `"Starting"` and `adb devices -l` may temporarily show an empty list. You **MUST wait** for `podcvd fleet` status to transition to `"Running"` (up to 1-2 minutes) before verifying ADB device readiness or executing teardown operations. Do not prematurely cancel, clear, or report failure while status is still `"Starting"`.
* **Status Verification**: Always verify instance state using `podcvd fleet` **BEFORE and AFTER** state transitions. Before issuing any state-changing subcommand (e.g., `stop`, `restart`, `remove`), execute `podcvd fleet` to ensure previous operations have finished and the group is in the expected state (e.g., `"Running"`). After transitions, verify status and confirm ADB connection readiness using `podcvd fleet` and `adb devices -l`.
## Standard Ready-to-Use Commands (Recommended)
To ensure high success rates and avoid malformed options, prefer using the fully constructed standard command lines below for general tasks. Always include `PODCVD_CLIENT_ID="<client_id>"` at the start of every command line.
### 1. Create Instance Group (Establishes ADB Connection)
Creates an instance group with standard configurations and **automatically establishes ADB connections**. (For bulk creation, see the concurrency policy below).
```bash
PODCVD_CLIENT_ID="<client_id>" podcvd create --report_anonymous_usage_stats=n
```
### 2. List Active Fleets
Lists all currently running Cuttlefish instance groups.
```bash
PODCVD_CLIENT_ID="<client_id>" podcvd fleet
```
### 3. Remove Specific Group (Destroys ADB Connection)
Removes a targeted instance group and **automatically destroys corresponding ADB connections**. Replace `<group_name>` with the actual ID.
```bash
PODCVD_CLIENT_ID="<client_id>" podcvd --group_name=<group_name> remove
```
### 4. Clear All Groups (Destroys All ADB Connections)
Completely tears down all Cuttlefish instance groups and destroys all relevant ADB connections globally.
```bash
PODCVD_CLIENT_ID="<client_id>" podcvd clear
```
## Concurrency & Parallel Execution Policy (Crucial)
Unless the user **explicitly requests sequential execution**, operations targeting **different instance groups** (such as creating multiple instances or removing multiple distinct groups) **MUST ALWAYS be executed in parallel**.
User intent is paramount and overrides this rule, but parallel processing is the mandatory default for any bulk workload.
> [!WARNING]
> **Default Strict Prohibition**: When handling bulk requests (e.g., "create 10 instances" or "remove groups A, B, and C"), you **MUST NOT** execute them sequentially by default. Waiting for one task to complete before initiating the next severely degrades system performance.
**Execution Guidance for Agents:**
Launch independent `podcvd` commands concurrently as background tasks, with leveraging agent's native capability dealing with concurrent behavior if possible.
**Exceptions to Parallel Execution:**
1. **User Override**: The user explicitly asks to perform tasks sequentially (one by one).
2. **State Dependency**: Operations sequentially target the **exact same `group_name`** (e.g., creating a group and immediately modifying it).
3. **Global Operations**: The `clear` subcommand internally processes global cleanup across all groups, so manual parallelization does not apply.
## Advanced Usage
Below are the currently supported podcvd subcommands in alphabetical order:
* `bugreport`: Captures diagnostic host logs into a zip archive for troubleshooting (optionally includes device adb bugreport)
* `cache`: Manage the files cached by cvd
* `clear`: Clears the instance database, stopping any running instances first
* `create`: Create a Cuttlefish instance group
* `display`: Enables hotplug/unplug of displays from running cuttlefish virtual devices
* `env`: Enumerate + Query APIs for all gRPC services made available by this virtual device instance
* `fetch`: Retrieve build artifacts based on branch and target names
* `fleet`: Lists active devices with relevant information
* `help`: Used to display help information for other commands
* `lint`: Error checks the input virtual device json config file
* `load`: Creates and starts an instance group from a JSON configuration file
* `login`: Acquire credentials
* `logs`: List and display log files
* `monitor`: Monitor device logs (launcher, kernel, and logcat) in real-time
* `powerbtn`: Trigger power button event on the device
* `powerwash`: Reset device to first boot state
* `remove`: Remove instance groups and related artifacts from the system
* `reset`: Remove all instance groups and kills orphaned cuttlefish processes
* `restart`: Restart device
* `resume`: Resume the cuttlefish device
* `screen_recording`: Record screen contents
* `setup`: Configure the host for Cuttlefish
* `snapshot_take`: Take snapshot of the cuttlefish device
* `start`: Start all Cuttlefish Instances in a group
* `status`: Query status of a single instance group. Use `podcvd fleet` for all devices
* `stop`: Stop Cuttlefish instances
* `suspend`: Suspend the cuttlefish device
* `version`: Prints version of cvd client and cvd server
To inspect supported flags and advanced setup options for any subcommand, query built-in help directly:
```bash
PODCVD_CLIENT_ID="<client_id>" podcvd help <subcommand>
```
## Connection Details Formatting Tip (Mandatory Output Formatting)
Executing the `create` or `fleet` subcommands returns JSON outputs containing instance configuration details. When reporting these connection details in your responses, you **MUST** follow these exact structural formats:
1. **ADB Connection Address**: You **MUST** combine the host IP address and the allocated ADB port into the standard **`IP:PORT`** format (for example: **`192.168.112.1:6520`**). Never output only the port number or `adb_port: 6520`.
2. **Web UI Endpoint**: You **MUST strip away specific device paths** from the `web_access` URL and present **ONLY the base Protocol, IP, and Port** (for example, if JSON returns `"https://192.168.112.1:11443/devices/cvd_1-1-1/files/client.html"`, present it as **`https://192.168.112.1:11443`**).
Ver no GitHub