Skip to main content

The PolyAI ADK is accessed through the poly command. Use the CLI help output as the first source of truth.

Start with help

To see all available commands and options:
poly --help
Each command also supports its own help output. For example:
poly push --help
Use help output as the source of truthThe installed CLI is the fastest way to confirm the commands and flags available in your local environment.

Core commands

poly start

End-to-end onboarding for self-serve accounts on studio.poly.ai. poly start is hardcoded to the studio region — for any other region, use poly login. poly start:
  1. Opens a browser window so you can sign up or sign in to a self-serve workspace.
  2. Generates an API key (or reuses your existing one) and writes it to ~/.poly/credentials.json under the studio region.
  3. Optionally creates a new Agent Studio project and pulls it down locally.
If the ADK detects an existing API key in the credential file or environment, poly start asks whether to use it. Accept and the command skips ahead to the project-creation prompt; decline and it runs the full sign-in flow. Examples:
poly start
poly start --base-path /path/to/projects
FlagDescription
--base-pathBase path to initialize the project in. Defaults to the current working directory.

poly login

Sign in to an existing Agent Studio account and save API key credentials for the CLI. Works against any region — including studio, which makes poly login --region studio a viable alternative to poly start for self-serve users on a new machine who already have an account and don’t need to create a project. poly login:
  1. Prompts for a region if --region is not supplied.
  2. Opens a browser window for sign-in via the Auth0 device authorization flow.
  3. Fetches or creates an API key for your user and saves it to ~/.poly/credentials.json under the chosen region.
Run poly login once per region you need access to — credentials for multiple regions are stored side by side in the credential file. Examples:
poly login
poly login --region us-1
poly login --region euw-1
poly login --region uk-1
poly login --region studio
FlagDescription
--regionRegion to log in to. If omitted, you are prompted to pick one. Choices match the standard region list.

poly project

Manage Agent Studio projects.

poly project create

Create a new Agent Studio project under an account, then initialize it locally. Run with no arguments and poly project create walks you through interactive prompts:
  1. Region — auto-selected if your API key only has access to one.
  2. Account — auto-selected if there’s only one in the region; otherwise pick from a searchable list.
  3. Project name — free-text name for the new project.
  4. Project ID — optional slug. Defaults to a slugified version of the name (lowercased, spaces replaced with hyphens, special characters removed). Leave empty to let the platform generate one.
After the project is created in Agent Studio, poly project create automatically calls poly init to initialize the local project directory. Examples:
poly project create
poly project create --region us-1 --account_id my-account --name my-project
poly project create --region us-1 --account_id my-account --name "My Project" --id my-project
poly project create --region us-1 --account_id my-account --name my-project --greeting "Hi, how can I help?"
poly project create --base-path /path/to/projects
FlagDescription
--regionRegion for the new project. Choices match the standard region list.
--account_idAccount ID to create the project under.
--nameDisplay name for the new project.
--id, --project_idOptional slug/ID for the project. Defaults to a slugified version of the name.
--greetingInitial greeting message for the agent. Defaults to "Hello, how can I help you?".
--voice-idVoice ID for the agent. Defaults to a region-specific voice if not supplied.
--base-pathBase path to initialize the project in. Defaults to the current working directory.
--jsonPrint a single JSON object on stdout (machine-readable). Requires --region, --account_id, and --name.
--json requires explicit flags for poly project createWhen using poly project create --json, you must supply --region, --account_id, and --name explicitly. Interactive prompts are not supported in JSON mode.

Error handling

SituationBehaviour
--json used without --region, --account_id, or --nameExits with { "success": false, "error": "..." }
No accessible regions foundExits with an error
No accounts found in the selected regionExits with an error
API error during project creationExits with an error; local init is not attempted
No project ID returned by the APIExits with an error; local init is not attempted

poly init

Initialize a new Agent Studio project locally. Run with no arguments and poly init walks you through interactive dropdowns:
  1. Region — auto-selected if your API key only has access to one.
  2. Account — auto-selected if there’s only one in the region; otherwise pick from a searchable list. Each entry is shown as "name (id)" to disambiguate accounts that share the same display name.
  3. Project — pick from a searchable list of every project the API key can see. Each entry is shown as "name (id)" for the same reason.
If no projects are found in the selected account, poly init offers to create one. Accepting the prompt starts the poly project create flow with the region and account already pre-selected. After selection, poly init creates the project directory at {base_path}/{account_id}/{project_id} and immediately pulls the current configuration from Agent Studio. Change into the project directory before running any other commands. The human-readable project name is stored in project.yaml alongside the project_id, account_id, and region:
project_id: my-project
account_id: my-workspace
region: us-1
project_name: My Project
Pass any combination of --region, --account_id, and --project_id to skip the matching prompt. This is the form to use in scripts and CI. Examples:
poly init
poly init --account_id 123 --project_id my_project
poly init --region us-1 --account_id 123 --project_id my_project
poly init --base-path /path/to/projects
poly init --format

Error handling

If the account or project ID is invalid or inaccessible, poly init returns a descriptive error and cleans up any partially created directories so no empty folders are left behind.
SituationError message
POLY_ADK_KEY not setPOLY_ADK_KEY environment variable is not set. Export your API key with: export POLY_ADK_KEY=<your-api-key>
No accounts found in the regionNo accounts found in the selected region.
No projects found in the accountPrompts to create a new project (interactive) or exits with error (JSON mode).
Project not foundProject '<project_id>' not found in account '<account_id>'.
Permission deniedForbidden: you do not have permission to access project '<project_id>' in account '<account_id>'.
When using --json, the response includes { "success": false, "error": "..." } with the same message.

poly pull

Pull the latest project configuration from Agent Studio. Examples:
poly pull
poly pull --force
poly pull --format
If the branch you are currently on no longer exists in Agent Studio, poly pull automatically switches to the main branch and displays a warning message with the new branch name. When using JSON output (--json), the response includes new_branch_name and new_branch_id fields if a branch switch occurred.

poly push

Push local changes to Agent Studio. Examples:
poly push
poly push --dry-run
poly push --skip-validation
poly push --force
poly push --format
When pushing creates a new branch (for example, when pushing to Agent Studio for the first time on a branch), the CLI displays a message with the new branch name.
FlagDescription
--dry-runRun all validation and diff steps without sending changes to Agent Studio.
--skip-validationBypass local validation. Use sparingly — for example, when a platform-generated resource fails a strict ADK check but is known to be valid on the platform.
--force, -fForce the push even when the local project diverges from the remote in unexpected ways.
--formatRun poly format over the project before pushing.
Call Link URL in chat output may be malformedEach chat session prints a Call Link URL for viewing the conversation in Agent Studio. On some deployments this URL has a doubled hostname (for example, https://studio.studio.poly.ai/…), which produces a 404. The conversation is still recorded — open Agent Studio directly and navigate to the conversation from there.
poly push reports an error message when there is nothing to pushIf there are no local changes, poly push prints Error: Failed to push and No changes detected. The exit code is 0, so CI scripts that check return codes are not affected. The message is misleading but the command has not actually failed.
When using JSON output (--json), the response includes new_branch_name and new_branch_id fields if a new branch was created.

poly status

View changed, new, and deleted files in your project.
poly status

poly diff

Show differences between the local project and the remote version. Examples:
poly diff
poly diff --files file1.yaml
poly diff --before main --after my-feature

poly revert

Revert local changes. Examples:
poly revert
poly revert file1.yaml file2.yaml
poly revert with no arguments reverts every change in the working tree; pass file paths to revert only those files.

poly branch

Manage project branches. Examples:
poly branch list
poly branch current
poly branch create my-feature
poly branch create my-hotfix --env live
poly branch create my-hotfix --env live --force
poly branch switch my-feature
poly branch switch my-feature --force
poly branch merge 'Merge feature branch'
poly branch merge 'Merge feature branch' --interactive
poly branch delete
poly branch delete my-feature

poly branch merge

Merge the current branch into main via the CLI. A merge message is required.
poly branch merge 'Merge message'
poly branch merge 'Merge message' --interactive
poly branch merge 'Merge message' --resolutions resolutions.json
For the full merge workflow — conflict tables, --interactive flow, the --resolutions JSON format, post-merge behavior, and troubleshooting — see the dedicated Branch merging reference.

poly branch delete

Interactively select and delete one or more branches. The main branch cannot be deleted.
  • Run without arguments to open an interactive checkbox prompt for selecting branches to delete.
  • Pass a branch name directly to skip the interactive prompt and delete that branch after confirmation.
poly branch delete
poly branch delete my-feature
poly branch delete requires a TTY and may fail with a 404poly branch delete opens an interactive confirmation prompt and must be run in a terminal. In non-interactive environments (scripts, CI), it throws [Errno 22] Invalid argument.On some projects, the delete command hits the same platform endpoint as branch chat and returns a 404 after the confirmation. If this happens, delete the branch through the Agent Studio UI instead.

poly branch create

Creates a new branch. By default the branch is sourced from the project’s main branch (the sandbox environment).
FlagDescription
--env, --environmentSource the new branch from a deployed environment snapshot instead of main. Choices: sandbox, pre-release, live.
--force, -fForce branch creation even if there are uncommitted local changes on main.
When --env live or --env pre-release is specified:
  • the version of the deployed environment is pulled into your local workspace
  • a branch is created from that snapshot
  • the version is immediately pushed to the new branch, leaving a clean slate for hotfix changes
  • the command can only be run from main
  • if there are local changes, the command will fail unless --force is also passed
Use --env live with cautionBranching from a live deployment snapshot will overwrite your local project with the live state. Merging this branch back to main may roll back changes that were introduced after the snapshot was taken.
Only one active branch is allowed at a timeAgent Studio supports one non-main branch per project. Attempting to create a second branch while one already exists returns an error. Merge or delete the existing branch in Agent Studio before creating a new one.

poly format

Format project resources. Examples:
poly format
poly format --check
poly format --files src/functions/booking.py

poly validate

Validate project configuration locally.
poly validate

poly review

Create a GitHub Gist of Agent Studio project changes to share with others. poly review requires a subcommand: create, list, or delete. Use poly review create to compare your local changes against the remote project, or pass --before and --after to compare two remote branches or versions. Add --verbose for full error tracebacks while troubleshooting. Examples:
poly review create
poly review create --before main --after feature-branch
poly review create --verbose

poly review list

Interactively select a review gist and open it in the browser.
poly review list
poly review list --json

poly review delete

Interactively select and delete review gists. Use --id to delete a specific gist directly without an interactive prompt.
poly review delete
poly review delete --id GIST_ID
poly review delete --json

poly chat

Start an interactive chat session with your agent, or run scripted/automated conversations. Examples:
poly chat
poly chat --environment live
poly chat --channel webchat
poly chat --metadata
poly chat --lang fr-FR
poly chat --input-lang en-US --output-lang fr-FR

Non-interactive (scripted) mode

Supply messages directly on the command line or from a file to run poly chat without a human at the terminal. This is useful for automated testing pipelines and CI scripts. Inline messages — use -m/--message (repeatable):
poly chat -m 'Hello' -m 'What can you help with?'
File-based input — use --input-file:
poly chat --input-file ./script.txt
echo -e 'Hello\nGoodbye' | poly chat --input-file -
Each line of the file is sent as a separate message. Use - to read from stdin. If the file path does not exist, poly chat exits with an error.

Resuming an existing conversation

Use --conversation-id (or --conv-id) to resume an existing conversation by its ID instead of creating a new session:
poly chat --conv-id <conversation_id>
poly chat --conv-id <conversation_id> -m 'Follow-up message'

Pushing before chatting

Use --push to push the local project to Agent Studio before starting the chat session. This ensures local changes are live before testing without requiring a separate poly push step:
poly chat --push
poly chat --push -m 'Hello'
If the push fails, the command exits without starting the chat session.

Language flags

Use language flags to specify the expected input and output language when chatting against multilingual agents. If not specified, the project default is used.
FlagDescription
--langSets both input and output language (e.g. en-US, fr-FR).
--input-langSets the input language (ASR) only. Overrides --lang for input.
--output-langSets the output language (TTS) only. Overrides --lang for output.
--input-lang and --output-lang take precedence over --lang when both are supplied.

poly chat flags summary

FlagDescription
--pushPush the project before starting the chat session.
-m, --message MSGSend a message non-interactively (repeatable).
--input-file FILERead messages line-by-line from a file (- for stdin).
--conversation-id, --conv-idResume an existing conversation by ID.
--jsonEmit a single JSON object when the session ends (see below).
--environmentTarget environment. Choices: branch, sandbox, pre-release, live. Defaults to branch. branch chats against the last pushed state of your current branch (not local uncommitted changes); on main it falls back to sandbox. Use --push to push local changes before chatting.
--channelChannel to use (e.g. webchat, voice).
--langSet both input and output language.
--input-langSet input language only.
--output-langSet output language only.
--variantName of the variant to use for the chat session.
--functionsShow function events in output.
--flowsShow flow metadata in output.
--stateShow state changes in output.
--metadataShow all metadata (equivalent to --functions --flows --state).

poly conversations

List and inspect conversations for the project using the public Conversations API. poly conversations requires a subcommand: list, get, or get-audio. Examples:
poly conversations list
poly conversations get <conversation_id>
poly conversations get-audio <conversation_id> -o recording.wav

poly conversations list

List conversations for the project.
poly conversations list
poly conversations list --limit 20 --offset 10
poly conversations list --json
FlagDescription
--limitMax number of conversations to return. Defaults to 50.
--offsetNumber of conversations to skip. Defaults to 0.
--pathBase path to the project. Defaults to the current working directory.
--jsonPrint a single JSON object on stdout (machine-readable).
The default table view shows conversation ID (rendered as a clickable Agent Studio link), start time, duration, caller number, channel, variant (when present), handoff status, and a short summary heading.

poly conversations get

Get detailed information for a specific conversation, including all turns.
poly conversations get <conversation_id>
poly conversations get <conversation_id> --json
Argument / FlagDescription
conversation_idThe conversation ID to look up. Required.
--pathBase path to the project. Defaults to the current working directory.
--jsonPrint a single JSON object on stdout (machine-readable).
The default output shows conversation metadata (channel, language, duration, timestamps, handoff, tags, PolyScore, summary, note) followed by a turn-by-turn transcript.

poly conversations get-audio

Download the audio recording for a conversation as a WAV file.
poly conversations get-audio <conversation_id>
poly conversations get-audio <conversation_id> --direction user
poly conversations get-audio <conversation_id> --redacted -o redacted.wav
poly conversations get-audio <conversation_id> --json
Argument / FlagDescription
conversation_idThe conversation ID. Required.
--directionAudio track to download. Choices: combined, user, agent. Defaults to combined.
--redactedDownload the redacted version of the audio.
-o, --outputOutput file path. Defaults to <conversation_id>.wav.
--pathBase path to the project. Defaults to the current working directory.
--jsonPrint a JSON summary on stdout instead of the success message (audio is still written to disk).

poly docs

Output resource documentation. Examples:
poly docs flows functions topics
poly docs context
poly docs --all
poly docs --all --output rules.md
Use --output to write the documentation to a local file. This is useful when working with AI coding tools — pass the output file as context to give the agent accurate knowledge of ADK resource types and conventions. Available resource names include:
NameDescription
agent_settingsPersonality, role, rules
api_integrationsExternal HTTP API definitions
chat_settingsChat greeting, style prompt
contextContext files for agent knowledge
entitiesStructured data collection
experimental_configFeature flags
flowsMultistep processes with steps, functions, conditions
handoffsSIP call transfers
functionsGlobal and flow functions, decorators, state, metrics
languagesDefault and additional language configuration
testsSimulated conversation test cases
safety_filtersContent moderation settings
smsText message templates
speech_recognitionASR settings, keyphrase boosting, transcript corrections
response_controlPronunciations, phrase filters
topicsKnowledge base for RAG
translationsLocalized text strings per language
variantsPer-variant configuration
voice_settingsVoice greeting, disclaimer, style prompt
variablesState variables referenced in code

poly deployments

Manage deployments for the project.

poly deployments list

List deployments for the project. Examples:
poly deployments list
poly deployments list --env live
poly deployments list --details
poly deployments show abc123def
poly deployments show abc123def --env live

poly deployments list

List deployments for the project.
FlagDescription
--envEnvironment to list deployments for. Choices: sandbox, pre-release, live. Defaults to sandbox.
--detailsShow additional deployment details.
--verboseShow full error tracebacks for debugging.
Use --details for readable outputThe default tabular view may wrap long URLs across multiple rows, making it unreadable in narrow terminals. --details produces a vertical layout that is easier to read.

poly deployments promote

Promote a deployment to the next environment (pre-release or live), removing the need to use the Agent Studio UI. Examples:
poly deployments promote --from <deployment_id> --to pre-release
poly deployments promote --from sandbox --to live --message "Release notes here"
poly deployments promote --from <deployment_id> --to pre-release --dry-run
poly deployments promote --from <deployment_id> --to live --force
FlagDescription
--fromID or environment name of the deployment to promote. Required.
--toTarget environment. Choices: pre-release, live. Required.
--message, -mOptional message to include with the promotion (e.g. release notes or changelog). If not specified, the existing deployment message is used.
--forceSkip the confirmation prompt. When used without --message, the existing deployment message is kept. This is the default in non-interactive mode (e.g. when --json is used).
--dry-runShow what would be promoted without actually promoting. Displays the deployment hash, target environment, and changes included.
--verboseShow full error tracebacks for debugging.
When promoting to live, the command searches for the deployment in pre-release and uses sandbox as the linear history source for computing included changes. When promoting to pre-release, the command searches sandbox. The output includes:
  • the deployment hash being promoted
  • whether it is a first-time promotion to that environment
  • a list of included deployments (changes being promoted) or reverting deployments (when promoting to an older version)
Without --force, the command prompts for confirmation before proceeding and optionally allows you to enter or override the deployment message interactively.

poly deployments rollback

Roll back sandbox to a previous deployment version. Examples:
poly deployments rollback --to <deployment_id>
poly deployments rollback --to <deployment_id> --message "Rolling back due to regression"
poly deployments rollback --to <deployment_id> --dry-run
poly deployments rollback --to <deployment_id> --force
FlagDescription
--toID or environment name of the deployment to roll back to. Required.
--message, -mOptional message to include with the rollback. If not specified, the existing deployment message is used.
--forceSkip the confirmation prompt. This is the default in non-interactive mode (e.g. when --json is used).
--dry-runShow what would be rolled back without actually rolling back. Displays the target deployment and the deployments that would be reverted.
--verboseShow full error tracebacks for debugging.
The output includes a list of reverting deployments — the versions that will be undone when the rollback completes. Without --force, the command prompts for confirmation before proceeding.

Machine-readable JSON output

All core subcommands accept a --json flag that switches stdout to a single JSON object. This is designed for scripting, CI pipelines, and any integration that needs stable, parseable output rather than human-readable console text.
poly status --json
poly push --json
poly pull --json
poly validate --json
poly diff --json
poly revert --json
poly branch list --json
poly branch create my-feature --json
poly branch switch my-feature --json
poly branch current --json
poly branch delete --json
poly branch delete my-feature --json
poly branch merge 'Merge message' --json
poly format --json
poly init --region us-1 --account_id 123 --project_id my_project --json
poly project create --region us-1 --account_id my-account --name my-project --json
poly chat --json -m 'Hello'
poly chat --json --input-file ./script.txt
poly deployments show abc123def --json
poly deployments list --json
poly deployments promote --from <id> --to pre-release --force --json
poly deployments rollback --to <id> --force --json
poly conversations list --json
poly conversations get <conversation_id> --json
poly conversations get-audio <conversation_id> --json
When --json is used:
  • stdout contains exactly one JSON object
  • the process exits with code 0 on success and non-zero on failure
  • human-readable console messages are suppressed
--interactive and --json cannot be used togetherpoly branch merge --interactive requires a terminal for its conflict-resolution prompts and is incompatible with --json.
--json implies --force for deployments commandsWhen --json is used with poly deployments promote or poly deployments rollback, the confirmation prompt is automatically skipped (equivalent to passing --force).

JSON output shapes

The exact fields vary by command. Common fields include:
CommandKey fields
poly status --jsonfiles_with_conflicts, modified_files, new_files, deleted_files
poly push --jsonsuccess, message, dry_run
poly pull --jsonsuccess, files_with_conflicts
poly validate --jsonvalid, errors
poly diff --jsondiffs
poly revert --jsonsuccess, files_reverted
poly branch list --jsoncurrent_branch, branches
poly branch create --jsonsuccess, new_branch_id, branch_name
poly branch switch --jsonsuccess, switched_to, dry_run
poly branch current --jsoncurrent_branch
poly branch delete --jsonsuccess, deleted
poly branch merge --jsonsuccess; on conflict: conflicts, errors
poly format --jsonsuccess, check_only, format_errors, affected, ty_ran, ty_returncode, ty_timed_out
poly init --jsonsuccess, root_path
poly project create --jsonsuccess, root_path (via init); on error: success, error
poly chat --jsonconversations (array); optional push (when --push is used)
poly deployments show --jsonsuccess, deployment, active_deployment_hashes, included_deployments, is_rollback
poly deployments promote --jsonsuccess, from_hash, to_env, message, included_deployments; dry_run when --dry-run is used
poly deployments rollback --jsonsuccess, target_hash, message, reverted_deployments; dry_run when --dry-run is used
poly conversations list --jsonconversations, count, limit, offset
poly conversations get --jsonfull conversation detail object
poly conversations get-audio --jsonsuccess, conversation_id, direction, redacted, output_path, size_bytes
For poly branch delete --json, when a branch that was the current branch is deleted, the response also includes "switched_to": "main". For poly branch merge --json, a successful merge returns { "success": true }. When conflicts or errors are present, the response includes "conflicts" and "errors" arrays containing the raw conflict and error objects from the platform. For poly deployments show --json, the response includes:
  • deployment — the full deployment record for the requested version hash.
  • active_deployment_hashes — a map of environment names to the currently active version hash in each environment.
  • included_deployments — the list of sandbox deployments included since the predecessor version in the queried environment.
  • is_rollbacktrue if the deployment is a rollback to an older version.
Error responses always include { "success": false, "error": "...", "traceback": "..." }.
init with --json requires explicit flagsWhen using poly init --json, you must supply --region, --account_id, and --project_id explicitly. Interactive prompts are not supported in JSON mode.
poly project create with --json requires explicit flagsWhen using poly project create --json, you must supply --region, --account_id, and --name explicitly. Interactive prompts are not supported in JSON mode.

poly chat --json output shape

When --json is used with poly chat, the command emits a single JSON object when the session ends:
{
  "conversations": [
    {
      "conversation_id": "conv-123",
      "url": "https://...",
      "turns": [
        { "input": null, "response": "Hello! How can I help?", "conversation_ended": false },
        { "input": "What are your hours?", "response": "We are open 9am–5pm.", "conversation_ended": false }
      ]
    }
  ]
}
  • conversations is an array because /restart in scripted input produces multiple entries.
  • turns[0] is always the agent greeting, with "input": null.
  • If --push is also supplied, the output includes a push key: { "push": { "success": true, "message": "..." } }.
  • If --functions, --flows, or --state are also set, the relevant metadata fields are included in each turn.

poly conversations get-audio --json output shape

When --json is used with poly conversations get-audio, the audio is still written to disk and the command emits a JSON summary:
{
  "success": true,
  "conversation_id": "KA-123",
  "direction": "combined",
  "redacted": false,
  "output_path": "KA-123.wav",
  "size_bytes": 2000000
}

poly deployments promote --json output shape

{
  "success": true,
  "from_hash": "abc123456xyz",
  "to_env": "pre-release",
  "message": "Release notes here",
  "included_deployments": [...]
}
On dry run, "dry_run": true is added and "success" reflects the pre-flight state without any changes being made. On error, "success": false and "error": "..." are returned.

poly deployments rollback --json output shape

{
  "success": true,
  "target_hash": "def789012xyz",
  "message": "Rolling back due to regression",
  "reverted_deployments": [...]
}
On dry run, "dry_run": true is added. On error, "success": false and "error": "..." are returned.

poly push --output-json-commands

Adds a commands array to the JSON output of poly push, containing the serialized Agent Studio commands that were staged. Useful for dry-run review and integration testing.
poly push --json --dry-run --output-json-commands
The output will include a commands key with each command serialized from its protobuf representation.

Driving pull/push from a captured projection

The --from-projection flag on pull, push, init, and branch switch lets you supply a projection JSON directly (as a string or via stdin with -) instead of fetching it from the API. This is useful for offline workflows and integration testing.
poly pull --from-projection - < projection.json
poly push --from-projection '{"topics": [...], ...}'
cat projection.json | poly pull --from-projection -
The --output-json-projection flag on pull, init, and branch switch includes the projection in the JSON output when --json is also set. This lets you capture a projection from one command and feed it into another.
poly pull --json --output-json-projection | jq .projection > proj.json
poly push --from-projection - < proj.json

Working pattern

A typical CLI workflow looks like this:
  1. create a new project with poly project create or initialize an existing one with poly init
  2. pull with poly pull if needed to refresh local state
  3. create or switch to a branch
  4. edit files
  5. inspect changes with poly status and poly diff
  6. validate with poly validate
  7. push with poly push
  8. optionally review with poly review
  9. test or chat with the agent using poly chat
  10. browse and debug conversations with poly conversations list and poly conversations get
  11. merge the branch with poly branch merge '<message>'
  12. promote to pre-release or live with poly deployments promote
Run commands from the project folderADK commands are expected to be run from within your local project directory. If needed, use the —path flag to point to a project explicitly.

Build an agent

See how the CLI fits into a real workflow.

Branch merging

Conflict resolution, --interactive flow, and --resolutions JSON for poly branch merge.

Tests

Write and manage simulated conversation tests in test_suite/.

Working locally

How the CLI fits into the daily edit/push/test loop.
Last modified on July 9, 2026