← Help

Create game assets from your terminal

Use Asset Yard with any local game project or coding agent. Create images, music, 3D models, speech, sound effects, and video.

You do not need a Multiplayers project, a scene group ID, or a browser filesystem. The CLI writes normal local files.

1. Install the CLI

Install Python 3.10 or later on Windows, macOS, or Linux. Then run:

python -m pip install https://uncen.ai/static/downloads/uncen_cli-0.7.0-py3-none-any.whl
uncen --help

assetyard and uncen run the same CLI. Existing scripts can keep the uncen name.

This command installs the CLI and its dependencies. It does not install a GPU model on your computer.

If your Python command is python3, use that name instead. A virtual environment can keep the installation separate.

Install from an Uncen source checkout

Run this command from the repository root:

python -m pip install -e packages/uncen-cli

The public wheel does not require access to the source repository.

2. Sign in and use your account credits

uncen login
uncen balance
uncen capabilities
  1. Open the Uncen approval page when the CLI starts your browser.
  2. Sign in with Google.
  3. Check that the account and code match your terminal.
  4. Select Connect this device.
  5. Return to the terminal.

Personal access uses your available account credits. You do not need a separate CLI allowance or a monthly grant replacement.

uncen balance shows the balance for personal access. Restricted access shows its own allowance, not the complete account balance.

One-off credit top-ups are not available yet. uncen credits top-up reports top_up_unavailable. It does not open a subscription checkout.

Subscription options are available separately. Changing an existing paid plan does not immediately refill credits.

When your account receives credits, personal access uses them without another login. The CLI cannot buy credits or charge a payment card.

whoami shows your account and connection. capabilities shows the supported tools and their availability.

Manage CLI connections to disconnect a device or change an older connection.

Check capabilities before generating. A command does not enable a missing worker or substitute another provider.

Sound effects require an enabled Stable Audio 3.0 Small SFX worker. Availability can differ from other asset types.

Public Breeze TTS 2 voice design remains disabled until Uncen records written commercial authorization. A temporary admin-only evaluation path stays private and non-commercial.

Use the CLI with Claude, Codex, or another coding agent

The agent does not need your Google password. Run the login command on the computer where the agent works.

Open the printed approval URL yourself. The account that approves the page owns the assets and pays for them.

uncen --profile claude-game login --label "Claude game assets"
uncen --profile claude-game whoami
uncen --profile claude-game capabilities

The agent uses the saved operating system credential. It does not receive your Google session or administrator permissions.

Personal access lets this device use your available account credits. Use restricted access when you want a separate allowance.

Use uncen --profile claude-game logout to disconnect the device. Your downloaded files and server library remain.

Advanced: restrict an agent's tools or spending
uncen --profile sound-designer login --max-credits 30 --scope assets:read --scope sfx:generate
uncen --profile sound-designer whoami

Explicit --max-credits, --scope, or login --collection options select restricted access.

Restricted access keeps its own limit, tools, collection restriction, and expiry. It never gives the coder administrator permissions.

Use CLI connections to change its total limit or expiry without logout.

The page also lets you approve conversion to personal access. It does not convert old connections automatically.

Global options, including --profile, go before the command.

Approve from another browser or phone
uncen login --no-browser

Open the printed approval URL in a trusted browser. Check the code and approve the request.

Desktop login uses the native credential store. See the headless instructions below when your Linux server has no keyring.

Do not copy browser cookies or Google tokens into the terminal.

Set defaults once

TTS uses Chatterbox when you omit --provider. The voice key selects the reference voice, not the speech engine.

assetyard configure default-tts-provider chatterbox
assetyard configure default-profile claude-game
assetyard configure default-collection dangerous
assetyard configure --show
assetyard generate tts --voice ayq1_atlas_narrator_c1 --text "Welcome aboard." --out assets/welcome.flac

An explicit argument wins. An unavailable provider returns an error; the service does not substitute another engine.

The profile selects the account that pays. Check whoami after a profile change.

The collection default supplies the generation scope label for generate and estimate. It does not change login permissions.

Use --add-to "Sector Prime" to organize the private library. That collection is different from the generation scope label.

Voice search also supports default-category, default-gender, default-age, and default-language.

Optional: remember recent choices

Automatic remembering is off by default. Enable it when you want the CLI to remember successful commands.

assetyard configure --dynamic-defaults
assetyard --profile claude-game voices list --category hero --gender male
assetyard voices list
assetyard --reset
assetyard configure --no-dynamic-defaults

Remembered profiles, generation scope labels, and voice filters stay separate for each working directory and profile.

Providers require explicit configuration. The CLI never remembers prompts, dialogue, references, output paths, seeds, or spending limits.

Notices go to stderr. JSON stays on stdout and includes cli_defaults when defaults affect the command.

Precedence is: explicit argument, remembered setting, configured setting, built-in default.

--reset clears remembered settings across working directories for the selected API origin. Configured settings and credentials remain.

--reset-all-dynamic-settings is the same command. Use configure --unset default-category to remove a configured setting.

Global --no-dynamic-defaults bypasses remembering once. Global --no-defaults bypasses both preference layers once.

For repeatable automation, use --no-defaults --profile PROFILE with explicit request settings.

Manifest builds do not inherit local provider, collection, or filter preferences. Put those choices in the manifest.

Retries preserve the saved provider and collection when you omit those arguments.

3. Create an asset

--out waits for the job and downloads the result. The library flags also wait. Otherwise, use --wait or receive the queued request.

Image

uncen generate image --prompt "A bright cartoon forest menu background" --width 1024 --height 1024 --out assets/menu.png

Use images for backgrounds, concept art, textures, or references. Check the provider's supported dimensions.

uncen generate image --prompt "Cali briefs the squad inside a carrier hangar" --reference-image assets/cali.png --out assets/cali-briefing.png

Use a local character image to keep identity and clothing consistent. See the reference image section below.

3D model

uncen generate model --prompt "One low-poly wooden supply crate with a closed lid" --geometry-profile prop --out assets/crate.glb

Use prop for simple objects. Other profiles include standard, character, and source.

Fewer vertices do not guarantee sharp edges. A character model does not automatically include a skeleton or animation.

Pixal3D is the default 3D provider. No provider flag is required.

Pixal3D preserves the reference view. A three-quarter reference can produce a tilted or sideways model.

For a rigid vehicle, select orientation_profile=rigid_vehicle. This requests a front reference and deterministic geometric alignment.

This profile requires a generated reference. An uploaded reference does not establish the vehicle's front.

uncen generate model --prompt "One symmetric courier spacecraft with a pointed nose and two wings" --geometry-profile prop --orientation-profile rigid_vehicle --out assets/courier.glb

CLI 0.4.2 supports --set orientation_profile=rigid_vehicle after the backend update. CLI 0.4.3 adds --orientation-profile rigid_vehicle.

The aligned GLB uses +Y up, +Z forward, and a centered pivot. These axes follow the glTF convention.

This is not universal front detection. Check orientation.status in the result metadata before using a vehicle.

needs_review means the geometry is ambiguous. The result preserves the source pose instead of claiming correct alignment.

The vehicle profile also checks bilateral symmetry. Large unmatched wings or other structural defects require review. Small details can differ.

The default source profile preserves the input pose. It does not infer vehicle settings from prompt words.

A game that moves along -Z needs one shared 180-degree Y rotation at import. Do not add separate corrections for each ship.

Run uncen capabilities before a large batch. The result keeps its provider license record.

Pixal3D mesh work is free during the beta. The reference image still uses its normal image price.

Each account can keep one Pixal3D request active. The service accepts four active Pixal3D requests in total.

The service rejects explicit real-world end uses that the DINOv3 license prohibits.

Music

uncen generate music --prompt "Playful instrumental game music" --duration 20 --music-kind gameplay_loop --wait

Inspect download.filename and download.mime_type. Then choose the correct extension when you download the result.

Speech

uncen generate tts --text "The next round starts now." --voice VOICE_FROM_CATALOG --wait

Replace the voice placeholder with a catalog key. Speech uses --text, not --prompt.

Browse published Asset Yard voices with uncen voices list. Then use the stable voice key with Chatterbox:

uncen generate tts --text "All pilots, prepare for launch." --voice ayv2_hero_vanguard_c1 --out assets/launch.wav

See the TTS voice section below for catalog, built-in, and custom voices.

The output format depends on the provider.

Voice design

uncen generate voice --prompt "A calm space guide with clear diction" --text "Welcome aboard. I will guide your crew through each system check, one clear step at a time. Watch the blue status lights, confirm each green signal, and stay with me until the launch computer reports that every system is ready." --provider breeze_tts2_voice --language en --cfg-scale 4 --out assets/guide-voice.wav

This command prepares a private Chatterbox reference sample. Voice design is not an alternate speech provider.

Use 160 to 500 characters for the sample transcript.

The server returns license_pending until written approval and worker activation.

Sound effect

uncen generate sfx --prompt "One short cartoon pop, dry recording, no music" --duration 1 --set steps=8 --out assets/pop.wav

The SFX worker supports WAV output, durations from 1 to 30 seconds, and 1 to 8 sampling steps.

Describe the sound and its timing. Request a single event when you need a game action sound.

Video

uncen generate video --prompt "The camera moves around the object" --image-media-id OWNED_IMAGE_ID --duration 5 --out assets/preview.mp4

Replace OWNED_IMAGE_ID with a completed image from your account. A restricted connection's collection rule also applies.

The first version uses an owned reference image. It does not accept an arbitrary image URL.

Frame spacing can change the exact duration. For WAN, one second at 16 frames per second produces 17 frames.

Check metadata.duration_seconds and metadata.dimensions for measured output values. The requested settings stay unchanged.

Design a Breeze voice for Chatterbox

Public Breeze TTS 2 voice design is disabled. Approved admin grants can use the temporary private evaluation mode. Run uncen capabilities before a request.

Evaluation samples and their Chatterbox derivatives are non-commercial. Do not distribute them with a product.

The response reports enabled: false and unavailable_code: license_pending until activation.

The BreezeBlue Research and Non-Commercial License v1.1 covers the model and its self-hosted output.

Using a Breeze sample as a Chatterbox reference does not bypass those terms.

Do not use this chain commercially until BreezeBlue gives Uncen written authorization.

After activation, create a grant with voice and speech permissions:

uncen --profile voice-work login --max-credits 30 --scope assets:read --scope voice:generate --scope tts:generate

Personal access does not include private voice evaluation. Use a separate restricted profile after the account receives evaluation permission.

First, run the voice command above. The prompt describes the voice, and the text gives the exact sample transcript.

Choose text that produces a sample from 10 to 30 seconds. Copy its completed media ID.

Then pass that private sample to Chatterbox:

uncen --profile voice-work generate tts --text "Navigation is ready. Start the launch sequence when your team is prepared." --voice custom --reference-media-id VOICE_MEDIA_ID --out assets/launch-guide.wav

Replace VOICE_MEDIA_ID with the first command's media ID.

The server accepts an owned private media ID. It does not accept a local path or arbitrary URL.

Optional steering also uses an owned audio media ID and its exact transcript:

uncen --profile voice-work generate voice --prompt "Keep the pace, but sound warmer and less formal" --text "You found the hidden route. Stay close, and I will get everyone home safely. Follow the painted stones beside the river, keep your lantern covered, and wait for my signal before the whole group crosses the old wooden bridge." --provider breeze_tts2_voice --steering-media-id OWNED_AUDIO_MEDIA_ID --steering-text "The exact transcript spoken in the steering audio." --out assets/warm-guide-voice.wav

Use --steering-media-id and --steering-text together.

Run both stages separately. Manifest version 1 cannot pass a new media ID to a later entry.

A later manifest can use a literal reference_media_id after the voice sample exists.

Use --provider to select a listed provider. Use --set KEY=VALUE for exact settings from capabilities.

--max-credits 5 adds a limit for one request. The account balance and any restricted allowance still apply.

Music and sound-effect generation do not guarantee seamless loops. Inspect the audio before adding it to a game.

Seeds do not guarantee identical files across runs or hardware. Reuse downloaded files when you need an exact match.

4. Keep a character consistent with reference images

Pass a local character image with --reference-image. Repeat the option when the editor supports several references.

uncen --profile claude-game generate image --collection dangerous --prompt "Cali gives a mission briefing on the carrier bridge. Keep her face, hair, uniform, and insignia consistent." --reference-image references/cali.png --out assets/cali-bridge-briefing.png

uncen --profile claude-game generate image --collection dangerous --prompt "Cali and the commander study a tactical display. Preserve both identities." --reference-image references/cali.png --reference-image references/commander.png --out assets/tactical-briefing.png

The CLI accepts PNG, JPEG, and WebP files up to 20 MiB. Local files and media IDs share one five-image limit.

A provider can set a lower limit. Check image.reference_providers in uncen capabilities.

The CLI calculates each file's SHA256 value. The server reuses a matching private upload in the same account and collection.

Use an existing owned image when you already know its media ID:

uncen --profile claude-game generate image --collection dangerous --prompt "Cali reports from a damaged flight deck." --reference-image-media-id OWNED_IMAGE_ID --out assets/cali-flight-deck.png

You can mix both options. The CLI rejects duplicate or invalid media IDs.

The server checks the image owner, state, file type, and collection before dispatch.

The API does not accept an arbitrary image URL. This rule prevents a cross-account read.

The generated image remains in the account's media library and private storage. The CLI also downloads the requested local file.

A manifest cannot contain a local reference path. Use settings.reference_image_media_ids after the upload exists.

5. Choose a TTS voice

Open the private voice library to hear voices, inspect requested traits, and save favorites. Sign in first. The initial preview requires an administrator account.

The three new HFY voices use original Qwen3 references and Chatterbox speech. They do not clone an actor or impersonate a game character.

VoiceStable keyRequested role
Atlas Deep Narratorayq1_atlas_narrator_c1Deep male HFY narrator, middle-aged, General American English
Orion Vanguardayq1_orion_vanguard_c1Adult male military hero, General American English
Lyra Vanguardayq1_lyra_vanguard_c1Adult female military hero, General American English
uncen voices show ayq1_atlas_narrator_c1
uncen generate tts --voice ayq1_atlas_narrator_c1 --text "They called our world a death trap. Humanity called it home." --out assets/narrator.flac
uncen generate tts --voice ayq1_orion_vanguard_c1 --text "Stay together. Nobody gets left behind." --add-to "Sector Prime" --out assets/commander.flac
uncen generate tts --voice ayq1_lyra_vanguard_c1 --text "The route is clear. Bring our people home." --mark-favorite --out assets/heroine.flac

The references passed technical and transcript checks. Their release does not claim a human listening review or verified accent fidelity.

Each published Asset Yard voice has a stable, unique voice_key. A game can store this key without storing audio locations.

The provider field names Chatterbox. The optional source_provider field records which model created the sample.

You do not need to remember the keys. Search the catalog by category or name:

uncen --profile claude-game voices list
uncen --profile claude-game voices list --category game_hero --search vanguard
uncen --profile claude-game voices list --category hfy_narration --gender male --age middle_aged --search deep
uncen --profile claude-game voices list --limit 200 --offset 0
uncen --profile claude-game voices show ayv2_hero_vanguard_c1

The key format is stable and readable. For example, ayv2_hero_vanguard_c1 identifies candidate one for the Hero Vanguard design.

Use the returned key directly:

uncen --profile claude-game generate tts --collection dangerous --text "All pilots, prepare for launch." --voice ayv2_hero_vanguard_c1 --out assets/launch.wav
Voice modeSelectionUse
Asset Yard catalogA stable voice_key from uncen voices listReusable game characters and narrators
Provider voiceA provider and voice from tts.providers in uncen capabilitiesProvider-specific built-in voices
Private custom sample--provider chatterbox --voice custom --reference-media-id OWNED_AUDIO_MEDIA_IDA Breeze evaluation sample until commercial authorization

A provider voice is optional. The provider uses its default voice when you omit --voice.

uncen voices list returns 100 items by default. Use --limit and --offset for a larger catalog.

Use --language, --gender, --age, --category, and --search to narrow the result. Repeated catalog pages use a short server cache.

uncen voices list shows the published voices that Chatterbox can use on this creation site.

Each dispatch binds the profile's private S3 URI, verified audio SHA-256, and optional S3 version. The worker revalidates the binding before ComfyUI receives it.

Catalog results include release_basis and human_reviewed. A human_review release passed the score gate. A technical_checks release passed batch, trait receipt, storage, format, and loudness checks only.

A custom reference must be an owned, ready Breeze sample from this site. It must last 10 to 30 seconds.

A restricted connection also requires the same client, grant, and collection.

Operator review is the standard release path. Open uncen.ai/admin/voice-bank with an administrator account.

The current bank has 140 designs and two candidates for each design.

Each v2 design records requested presentation, age, accent, timbre, and delivery. The API returns the exact creator prompt and a verified receipt status.

Observed presentation and age describe the generated audio. They stay separate from the requested creator targets.

Each player uses a normalized review copy by default. Expand the original player to compare the pristine generation.

The final review copy measures from -19.0 through -17.5 LUFS. Its true peak does not exceed -1.4 dBTP.

Filter by batch, category, review status, or text. Listen to each candidate and score all five quality fields.

Select the observed voice presentation and age. These traits describe the sound, not a biological identity.

Approval needs a 4.0 average. Intelligibility and audio quality must each score at least 4.

Needs work keeps a candidate pending. Reject prevents publication.

Review status does not change the live catalog. Publication creates the explicit runtime set.

Click Publish approved after review. Publication does not require a Chatterbox restart.

An admin can use Technical release all for urgent internal use. Every planned candidate must remain unreviewed and pass all technical checks.

A technical release does not create scores or observed traits. Check release_basis and human_reviewed in CLI results.

A published profile cannot receive a review. Depublish it or create a new candidate revision before human review.

VoxCPM2 and the Qwen3 trial generate private bank references. They are not public generate voice providers. Chatterbox uses published voice keys.

Keep favorites and named collections

CLI 0.6.0 adds private organization for personal connections. Restricted connections do not gain new permissions.

The initial library preview requires an administrator account. The server can later enable access for all signed-in users.

uncen generate image --prompt "A painted starport at sunrise" --mark-favorite --add-to "Sector Prime" --out assets/starport.png
uncen library collections
uncen library create "Mission briefings"
uncen library list
uncen library list --collection COLLECTION_UUID
uncen library favorite voice ayq1_atlas_narrator_c1
uncen library add voice ayq1_lyra_vanguard_c1 --to "Sector Prime"
uncen library favorite media MEDIA_UUID
uncen library unfavorite media MEDIA_UUID

library list shows favorites by default. Use --collection COLLECTION_UUID for a collection and --type voice or --type media to filter.

Repeat --add-to NAME to use several collections. Collection names can contain spaces. Repeated names resolve to the same private collection.

--add-to NAME organizes the library. The older --collection LABEL controls the generation scope. These are separate concepts.

Library commands use a generated media UUID or a published voice key. A request UUID belongs to the jobs commands.

Organization cannot turn a valid generation into a failed generation. The CLI keeps the completed result and its local download.

If a library action fails, the result includes organization.status: "partial" and safe retry_argv instructions.

Local credential or lock errors also preserve the completed generation. Retry commands retain the original state directory and credential settings.

Repeat organization without another generation:

uncen jobs organize REQUEST_UUID
uncen jobs organize REQUEST_UUID --mark-favorite --add-to "Sector Prime"

The first command repeats saved pending or partial actions. The second uses explicit actions. Neither command spends generation credits.

Favorites and collections remain private. They do not publish files, extend retention, or provide game hosting.

6. Give this brief to a coding agent

Give the agent this page and the following text. Replace PROJECT_SLUG with one stable project name.

Follow https://multiplayers.ai/help/asset-cli as the canonical Asset Yard CLI guide.
Install the published wheel before you start.
Place --profile claude-game before each command.
Ask me to open and approve the login URL. Never ask for my Google password.
Run whoami and capabilities before you create an asset.
Use --collection PROJECT_SLUG on every request.
Use --reference-image for a local character reference.
Reuse an owned image with --reference-image-media-id when its media ID is known.
Run voices list and select a stable voice_key for each speaking character.
Use and that voice_key for TTS.
Use --out for every final asset.
Keep request IDs and asset lock files. Resume a request instead of generating a duplicate.
Do not place CLI tokens in source files, prompts, logs, or the repository.

The human connects the device. The agent receives an asset credential, not the Google session or account administrator permissions.

A CLI collection is not a Multiplayers project. It does not attach files to a game automatically.

Inside Multiplayers, the coding agent can call list_tts_voices, request_tts, and request_image. The image tool accepts owned reference_image_media_ids.

The agent uses request_model and then sync_models to add a GLB and its backend license file to the game workspace.

7. Build a repeatable asset pack

See Voidwake: Meridian Run for a small working game and Asset Yard manifest.

The public link uses the completed Asset Yard pack by default. It loads the downloaded GLB, music, sound-effect, and key-art files.

Add ?edition=development only to compare the procedural development assets.

Create an assets.yaml file in your game directory:

version: 1
assets:
  - id: crate
    kind: model
    prompt: One low-poly wooden supply crate with a closed lid
    settings:
      geometry_profile: prop
    out: assets/crate.glb
  - id: courier
    kind: model
    prompt: One symmetric courier spacecraft with a pointed nose and two wings
    settings:
      geometry_profile: prop
      orientation_profile: rigid_vehicle
    out: assets/courier.glb
  - id: pop
    kind: sfx
    prompt: One short cartoon pop, dry recording, no music
    settings:
      duration_seconds: 1
      seed: 42
    out: assets/pop.wav

Build the pack from your account balance:

uncen assets build assets.yaml --run coder-a --json

Add --max-credits 25 when you want a separate limit for this build.

The CLI creates assets.coder-a.lock.json. Run the same command to resume the pack.

The lock keeps request IDs, actual settings, metadata, file hashes, and credit usage. It also identifies the account and asset library.

  • Builds run sequentially. An optional limit applies across the complete lock file.
  • Previously generated assets count toward that optional limit.
  • Changing a locked prompt or settings produces an error.
  • Use a new asset ID, run, or lock file when you want a new generation.
  • Use --output-dir when a run needs a separate output directory.

Collections are optional. Add --collection my-game to organize a pack without creating a Multiplayers project.

For coding comparisons, give each coder the same completed pack. For generation comparisons, use separate runs and budgets.

Manifest path rules

Output paths use forward slashes and stay beneath the manifest directory or the explicit output directory.

Absolute paths, traversal, symbolic links, and duplicate paths are errors.

Keep the JSON lock file for reproducible assets. Add *.uncen-lock to the game's ignore file.

JSON manifests use the same schema as YAML manifests.

8. Resume or download a job

The CLI records a request UUID before it submits the job. Keep that UUID when a command times out or loses its connection.

uncen jobs status REQUEST_UUID
uncen jobs wait REQUEST_UUID --timeout 1800
uncen jobs download REQUEST_UUID --out assets/recovered.glb

Replace REQUEST_UUID with the actual request ID. Choose an output path that matches the returned file format.

Stopping the CLI does not cancel the server job. A new generate command creates another request unless you reuse its exact request ID.

For an asset pack, repeat the original assets build command. The lock preserves unfinished requests.

Keep the request IDs and lock files. Personal login keeps the same asset library when you reconnect.

The CLI rejects a different account or incompatible library. It does not submit replacement jobs or charge again.

Change an older restricted connection through CLI connections. Do not replace it to increase its allowance.

Files, credentials, and server storage

ItemWhere it stays
Downloaded assetsNormal files in your local game directory. The game does not need an Uncen token at runtime.
Generation records and filesYour Uncen account, the media database, and S3. Downloading does not delete the server copy.
Asset manifest and JSON lockYour project directory. They contain prompts and metadata, but no credentials or signed download URLs.
Access and refresh tokensThe native credential store, or an explicitly selected protected file on a headless POSIX host. The CLI does not print tokens.
Request journalsThe operating system state directory, or the directory selected with --state-dir.

The first version does not provide temporary retention or delete-on-download. Read each asset's license metadata before distributing it.

New CLI outputs are private. Website previews require your account login. Upload an edited copy when you need a separate version.

The CLI does not provide public hosting or a public CDN. Download assets and include them in your own game build or deployment.

Downloads verify SHA256 and byte counts before publishing the local file. An identical file is reused.

A different local file requires another path or explicit --overwrite. The CLI does not silently replace edited game assets.

Troubleshooting and automation

The command cannot find a credential store

Windows uses Credential Manager. macOS uses Keychain. Linux desktop login uses Secret Service or KWallet.

A headless Linux host can use an explicitly selected credential file outside the repository:

uncen --credential-file /home/dev/.config/assetyard/credentials.json login --no-browser
uncen --credential-file /home/dev/.config/assetyard/credentials.json balance

Replace the absolute path with your own path. The directory must allow only its owner. The file must use mode 0600.

The directory uses mode 0700. The CLI rejects links and unsafe permissions. Windows continues to use its native credential store.

The file contains secrets. Keep it outside source control, shared folders, build artifacts, and logs.

This explicit file mode supports token refresh. An environment access token does not:

uncen --token-env UNCEN_ASSET_TOKEN whoami

Environment access tokens expire after at most 15 minutes. Do not use them as a durable login for long jobs.

Never put tokens in source files, manifest files, or command arguments.

A provider or asset type is unavailable

Run uncen capabilities. Check both availability and authorization for that asset type.

An unavailable worker requires server configuration. A restricted connection can also lack permission for the requested tool.

The CLI does not choose another model or paid service without your request.

A refresh response was lost

The client saves a retry identifier before refresh. A repeated refresh uses the same identifier to recover a lost response.

If the recovery window expires, reconnect through the browser:

uncen login

Reconnect through the browser. The CLI keeps the existing identity when the server approves reconnection.

A denied request does not replace your saved login. Keep your existing request IDs and resume after reconnection.

Use the CLI from an agent or script

Normal results and errors use one JSON object on stdout. Progress and approval information use stderr.

--json is accepted, but JSON output is already the default. Read the exit code and preserve the returned request ID.

0   Command succeeded
2   Invalid input or budget
3   Login, permission, or credential store error
4   Generation failed
5   API, network, or integrity error
6   Local file conflict or file access error
7   Wait timed out; the server job can continue
130 Command interrupted

jobs status returns a failed job as data. jobs wait returns exit code 4 for the same failed job.