Commands
| Command | Description |
|---|---|
| aichor auth | Authentication commands |
| aichor context | Manage the CLI local context |
| aichor local-repo | Manage the local repository |
| aichor engines | Operations on engines |
| aichor experiments | Operations on experiments |
| aichor projects | Operations on projects |
| aichor storage | Operations on project storage |
aichor auth
aichor auth key
Login using API key; requires an API key to authenticate.
The key can be obtained from https://web.aichor.ai/credentials
You can provide it in different ways:
- Interactive Login (Prompt for API key): Simply run the following command and enter the API key when prompted:
aichor auth key
- Passing the API key as an Argument:
aichor auth key --apikey YOUR_API_KEY
- Using an Environment Variable (Recommended for CI/CD): Set the AICHOR_API_KEY environment variable and run the login command:
export AICHOR_API_KEY=YOUR_API_KEY
aichor auth key
If the API key is valid, the CLI will store it for future use. Otherwise, an error message will be displayed.
Options:
--apikeyAPI key for login (will prompt if not provided).
aichor context
Manage the CLI context. Allows setting default projects and engines used by the CLI.
| Command | Description |
|---|---|
| aichor context list | Print the current CLI context |
| aichor context reset all | Reset all customizable fields in local context |
| aichor context reset engine | Reset default engine in local context |
| aichor context reset project | Reset default project in local context |
| aichor context set engine | Set default engine in local context |
| aichor context set project | Set default project in local context |
aichor context list
Print the current CLI context as JSON, showing the active default project and engine.
aichor context list
aichor context reset all
Remove all customizable fields from the CLI context.
aichor context reset all
aichor context reset engine
Remove the current engine from the CLI context.
aichor context reset engine
aichor context reset project
Remove the current project from the CLI context.
aichor context reset project
aichor context set engine
Define the default engine to be used in commands.
Alternatively, an engine name must be specified each time a command is executed.
Arguments:
engine_name
The engine name.
Example:
aichor context set engine <engine_name>
aichor context set project
Define the default project.
Alternatively, a project name must be specified each time a command is executed.
Arguments:
project_name
The project name.
Example:
aichor context set project <project_name>
aichor local-repo
Commands to generate templated files to help getting started with AIchor.
| Command | Description |
|---|---|
| aichor local-repo generate-files | Generate specific templated files for the local repository |
| aichor local-repo init | Generate templated AIchor-ready repo structure |
aichor local-repo generate-files
Generate specific templated files for the local repository.
⚠️ This will overwrite files with the same name in the directory where the CLI is being executed.
aichor local-repo generate-files [--force] <file_type>...
Arguments:
<file_type>...
One or more file types to generate.
Options:dockerfile,readme,pyproject,uv_directory,manifest
Options:
--force
Skip confirmation if existing files are found.
Example:
aichor local-repo generate-files uv_directory dockerfile
The generated directory tree for the uv_directory option will look as follows:
src/
└── project_name/
├── __init__.py
└── main.py
aichor local-repo init
Generate the required directory structure and files to start running experiments with AIchor, using uv to package the project.
aichor local-repo init
The generated files include:
- UV compliant directory structure: uv requires certain files and directories to exist, which AIchor will automatically generate.
- Pyproject.toml: This is the file where the required packages for the project can be defined. Depending on the chosen ML operator, some packages may already be included.
- Dockerfile: A basic Dockerfile that uses uv to create a ready-to-run image of the project.
- README.md: Simple README.md that explains the generated files and any changes that might be needed to suit custom needs and start running experiments.
- Manifest.yaml: An AIchor manifest file adapted to the selected ML operator and computing resource requests.
The generated directory structure will look like this:
<project_name>/
├── Dockerfile
├── README.md
├── aichor_manifests/
│ └── manifest.yaml
├── pyproject.toml
└── src/
└── project_name/
├── __init__.py
└── main.py
aichor engines
| Command | Description |
|---|---|
| aichor engines list | List available engines |
aichor engines list
Returns the list of engines, or a specific engine if engine-name is provided.
aichor engines list [engine-name] [options]
Arguments:
engine-name
Optional. Name of a specific engine to show details for.
Options:
-o, --output
Output format.
Accepted values:table,json.
Default istable.
Example:
aichor engines list <engine_name> --output json
aichor experiments
| Command | Description |
|---|---|
| aichor experiments cancel | Cancel an experiment |
| aichor experiments list | List experiments |
| aichor experiments list-pods | List pods for an experiment |
| aichor experiments logs query | Retrieve logs from a completed experiment |
| aichor experiments logs stream | Stream logs for a running experiment |
| aichor experiments metrics get | Show an experiment's runtime metrics as a table |
| aichor experiments metrics catalogue | List the available metrics and groups |
| aichor experiments metrics plot | Plot a metric as an interactive chart or static image |
| aichor experiments metrics summary | Per-pod right-sizing summary |
| aichor experiments resubmit | Resubmit an experiment |
| aichor experiments status | Get the status of an experiment |
| aichor experiments step | Get the current step of an experiment |
| aichor experiments submit local | Submit an experiment from your local repository |
| aichor experiments submit commit-sha <commit-sha> | Submit an experiment by specifying a branch and commit SHA |
aichor experiments cancel
Cancel an experiment.
aichor experiments cancel <experiment-id> [options]
Arguments:
experiment-id
ID of the experiment to cancel.
Options:
--project-name
Override the default project.
Required if no default project in CLI context exists.
aichor experiments list
Returns the list of experiments, or a specific experiment if experiment-id is provided.
aichor experiments list [experiment-id] [options]
Arguments:
experiment-id
Optional. ID of a specific experiment to show.
Options:
-
--engine-name
Override the default engine.
Used only when listing multiple experiments. -
-o, --output
Output format.
Accepted values:table,json.
Default istable. -
--page-number
Page number for pagination.
Default is 1. -
--page-size
Number of experiments per page.
Default is 50. -
--project-name
Override the default project.
Required if no default project in CLI context exists. -
--tags
Filter the list by tag name.
Repeatable; an experiment must carry all the given tags to appear, and may carry others too.
Used only when listing multiple experiments, and ignored whenexperiment-idis passed.
See Tags for the tag catalog, tagging experiments from the UI or the manifest, and the equivalent filter in the web interface.
In table mode the list is paged interactively: one page is shown and a Show next page? prompt controls whether the next is fetched.
In json mode the output is always a single valid JSON array and is never interactive (a prompt would corrupt the JSON). By default every experiment is returned, fetching all pages automatically. Pass --page-number to return exactly one page instead, for deterministic scripted paging; --page-size sets how many experiments that page holds.
Example:
- JSON output for a single experiment using project from CLI context:
aichor experiments list <experiment_id> --output json
- JSON output for all experiments with a specific project and engine (one array, all pages):
aichor experiments list --project-name <project_name> --engine-name <engine_name> --output json
- JSON output for one specific page (100 experiments), for scripted paging:
aichor experiments list --output json --page-number 2 --page-size 100
- Experiments carrying both the
baselineandgpu-sweeptags:
aichor experiments list --tags baseline --tags gpu-sweep
aichor experiments list-pods
Lists all pods for an experiment, or just a specific one if --pod-id is specified.
aichor experiments list-pods <experiment-id> [options]
Arguments:
experiment-id
ID of the experiment.
Options:
-
-o, --output
Output format.
Accepted values:table,json.
Default istable. -
--pod-id
ID of the pod. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Examples:
- JSON output for a single pod:
aichor experiments list-pods <experiment_id> --pod-id <pod_id> --output json
- JSON output for all pods in an experiment:
aichor experiments list-pods <experiment_id> --output json
aichor experiments logs query
Retrieve the last 2000 logs from a specific step in an experiment.
aichor experiments logs query <experiment-id> [options]
Arguments:
experiment-id
ID of the experiment to retrieve logs from.
Options:
-
--engine-name
Override the default engine.
Required if no default engine in CLI context exists. -
-o, --output
Output format.
Types:terminal,dir.
dircreates a directory at the current working path named after theexperiment-id. It contains .txt files, each with logs from a specific pod.
Default is terminal. -
--pod-id
Retrieve logs only from the specified pod.
If not provided, logs from all pods are shown.
Can only specify pod-id when--stepis run -
--project-name
Override the default project.
Required if no default project in CLI context exists. -
--step
Experiment step to fetch logs from.
Possible values:clone,build,submit,run.
Default isrun. -
--oldest
Fetch the oldest log entries instead of the most recent.
By default, the most recent 2000 entries are returned.
Example:
- Send logs to a directory named after the experiment ID and with a .txt file per pod with the corresponding logs.
aichor experiments logs query <experiment-id> --project-name <project_name> --engine-name <engine_name> -o dir
aichor experiments logs stream
Stream experiment logs starting from the current step.
If the experiment is older than 30 days, the logs will no longer be available.
aichor experiments logs stream <experiment-id> [options]
Arguments:
experiment-id
ID of the experiment to stream logs from.
Options:
-
--engine-name
Override the default engine.
Required if no default engine in CLI context exists. -
--pod-id
Stream logs only from the specified pod.
If not provided, logs from all pods are shown. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Example:
- Capturing the final experiment status in a bash script:
STATUS=$(aichor experiments logs stream <experiment-id> | jq -r '.experiment_status')
aichor experiments metrics
Query an experiment's runtime metrics (CPU, memory, GPU, disk, network) collected by AIchor.
| Command | Description |
|---|---|
| aichor experiments metrics get | Show metric series values as a table or json dictionary |
| aichor experiments metrics catalogue | List the available metrics and their groups |
| aichor experiments metrics plot | Render a single metric as a chart image, or an interactive HTML page |
| aichor experiments metrics summary | Per-pod right-sizing summary (over-provisioned / near-limit / idle GPU) |
Selecting a time range
The get, summary and plot commands share the same, mutually exclusive, options for choosing the time range:
-
--window
Trailing window such as30m,1h,4d. While the experiment is running it is measured back fromnow(). Once the experiment has finished it is measured back from the run's end instead, so the last<window>of the run is shown rather than nothing. When omitted,getandplotfall back to1h, whilesummarycovers the whole lifetime (a right-sizing verdict needs the whole run). -
--start/--end
An absolute range, as epoch seconds or RFC3339 (for example1782864000or2026-07-01T00:00:00Z). Both bounds must be provided together. -
--lifetime
The whole experiment lifetime (submission → now, or → termination once finished). Cannot be combined with--window,--startor--end. It is the default forsummary.
Metric keys and group names are discovered with aichor experiments metrics catalogue.
aichor experiments metrics get
Show an experiment's metric series as a compact table: one row per series (per pod, or per pod × GPU) with its last, min, mean and max value and a sparkline trend. At least one metric or group must be selected. The last, min, mean and max are calculated based on the chosen aggregator, e.g., when choosing mean aggregator these values show the last, min, mean and max of all mean values for the selected time range
aichor experiments metrics get <experiment-id> (--metric <key> | --group <name>) [options]
Arguments:
experiment-id
ID of the experiment.
Selection options (at least one is required):
-
-m, --metric
Metric key to fetch. Repeatable (for example-m cpu_usage -m memory_usage). -
-g, --group
Fetch every metric in a group (for examplegpu-memory). Repeatable.
Options:
-
--window/--start/--end/--lifetime
Time range. See Selecting a time range. -
--agg
How each point summarizes its time bucket.
Accepted values:instant(default),mean,max,min.
Applies to gauge and rate metrics only. -
-w, --watch
Refresh continuously until interrupted. Cannot be combined with-o json, since a watch prints one table per refresh rather than a single JSON document. -
--interval
Watch refresh interval in seconds (floored at the server-suggested cadence). -
-o, --output
Output format.
Accepted values:table,json.
Default istable. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Examples:
aichor experiments metrics get <experiment_id> --group gpu-memory
aichor experiments metrics get <experiment_id> -m cpu_usage -m memory_usage --window 6h
aichor experiments metrics get <experiment_id> -m cpu_usage --lifetime
aichor experiments metrics get <experiment_id> --group gpu-compute -o json | jq
JSON output
One object per requested metric sits in metrics, each holding one lines entry per series (a pod, or a pod and GPU pair), and each line holding points of timestamp (epoch seconds) and value. pod_nodes maps every pod in the response to the node it ran on. warnings carries any server-side notice, such as a series cap being applied.
Example payload
{
"namespace": "proj-ns",
"experiment_id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
"start": 1756300000,
"end": 1756303600,
"step_seconds": 30,
"suggested_poll_interval_seconds": 30,
"next_poll_at_seconds": 1756303630,
"metrics": [
{
"key": "cpu_usage",
"title": "CPU usage",
"group": "cpu",
"unit": "cores",
"agg": "instant",
"lines": [
{
"name": "trainer-0",
"pod": "trainer-0",
"gpu": "",
"points": [
{ "timestamp": 1756300000, "value": 1.5 },
{ "timestamp": 1756300030, "value": 1.62 }
]
}
],
"warnings": []
}
],
"pod_nodes": {
"trainer-0": "gke-node-1"
}
}
aichor experiments metrics catalogue
List the available metrics and the groups they belong to. This is a static catalogue and needs no experiment: the metric Key is the value passed to -m in metrics get, and the group slug is the value passed to --group.
aichor experiments metrics catalogue [options]
Options:
-
-g, --group
Show only the metrics in the given group.
Passed with no value, it lists the metric groups (names only) instead of the individual metrics. -
-o, --output
Output format.
Accepted values:table,json.
Default istable.
Examples:
aichor experiments metrics catalogue
aichor experiments metrics catalogue --group
aichor experiments metrics catalogue --group cpu
JSON output
catalogue and catalogue --group <name> return both a groups and a metrics array; catalogue --group with no value returns only groups.
Both groups and metrics are addressed by key: a metric's key is its -m value, and a group's key is its --group value. A group's key equals the group_slug its metrics carry, so metrics can be joined to their group without a second lookup. For a group, key and slug hold the same value; slug is kept for compatibility.
aichor experiments metrics summary
Provides a summary on resource allocation/usage during an experiment. Can show whether each pod is over-provisioned, running near its limit, wasting a GPU, etc. Verdicts are computed by AIchor, using specific thresholds so summaries are only a high level view, for more details an analysis using the metric dashboards in the UI should be used (coming soon). By default only the pods needing attention are listed, with a fleet rollup; --all lists every pod, and -o json returns the full machine-readable summary.
The whole experiment lifetime is covered by default (a right-sizing verdict needs the whole run, and a trailing window shows nothing once the experiment has ended); a range can be given to override this.
aichor experiments metrics summary <experiment-id> [options]
Arguments:
experiment-id
ID of the experiment.
Options:
-
--window/--start/--end/--lifetime
Time range (--lifetimeis the default here). See Selecting a time range. -
--all
Show every pod, not just those needing attention. -
-w, --watch
Refresh continuously until interrupted. Cannot be combined with-o json, since a watch prints one table per refresh rather than a single JSON document. -
--interval
Watch refresh interval in seconds (floored at the server-suggested cadence). -
-o, --output
Output format.
Accepted values:table,json.
Default istable. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Examples:
aichor experiments metrics summary <experiment_id>
aichor experiments metrics summary <experiment_id> --window 6h
aichor experiments metrics summary <experiment_id> --all -o json

JSON output
pods holds one entry per pod, always every pod: --all changes what the table shows, not what the JSON contains. Each entry carries cpu and mem gauges, one gpus entry per GPU, and a verdict.
A gauge reports usage as a fraction of what the pod asked for, as a mean and a max over the range. request is the one the verdict is based on, and limit is reported for reference. CPU has both, and its request can exceed 1.0 because a pod may burst above its request toward a limit set at roughly twice that. Memory has only request, with limit always null, since AIchor sets the memory request equal to the limit. Either is null when the pod declares no such value.
The status on a gauge is critical, over, ok, or empty when nothing was observed. A GPU's status is idle, underUtilized or ok, and its vram_status is nearLimit, underUtilized or ok. The pod's overall verdict is one of ok, nearLimit, overProvisioned, gpuIdle or gpuUnderUtilized, and totals counts pods under those same names.
Example payload
{
"namespace": "proj-ns",
"experiment_id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
"start": 1756300000,
"end": 1756303600,
"suggested_poll_interval_seconds": 30,
"next_poll_at_seconds": 1756303630,
"pods": [
{
"pod": "trainer-0",
"cpu": {
"limit": { "mean": 0.41, "max": 0.87 },
"request": { "mean": 0.82, "max": 1.74 },
"status": "ok"
},
"mem": {
"limit": null,
"request": { "mean": 0.63, "max": 0.78 },
"status": "ok"
},
"gpus": [
{
"gpu": "0",
"vram": { "mean": 0.71, "max": 0.93 },
"sm_active": { "mean": 0.55, "max": 0.98 },
"status": "ok",
"vram_status": "ok"
}
],
"oom_events": 0,
"restarts": 0,
"verdict": "ok"
}
],
"totals": {
"ok": 1,
"overProvisioned": 0,
"gpuIdle": 0
}
}
aichor experiments metrics plot
Plot a single metric as a chart. The output format follows the --export extension: a static image (.png, .jpg) or a self-contained interactive HTML chart (with plotly.js inlined, so it works offline). When no path is given, a PNG is written to a temporary file, so the chart opens in any image viewer. The chart's path is printed; pass --open to also open it in the default browser.
plot extraThis command needs plotly and matplotlib, which are shipped as an optional extra to keep the base install small. Install the CLI with aichor-cli[plot] first, see Plotting support. Running the command without the extra prints an error explaining how to add it.
aichor experiments metrics plot <experiment-id> --metric <key> [options]
Arguments:
experiment-id
ID of the experiment.
Selection option (required):
-m, --metric
Metric key to plot (list them with aichor experiments metrics catalogue). Exactly one, unlike aichor experiments metrics get, which takes several.
Options:
-
--window/--start/--end/--lifetime
Time range. See Selecting a time range. -
--agg
How each point summarizes its time bucket.
Accepted values:instant(default),mean,max,min.
Applies to gauge and rate metrics only. -
--cap
Maximum number of series to plot; the most active are kept and the rest hidden.
Default is 8. -
--export
Write the chart to this path. The format is chosen from the extension:.png/.jpgfor a static image, or.htmlfor the interactive chart.
Defaults to a temporary.pngfile. -
--open
Open the chart in the browser afterwards.
Off by default, so every run stays quiet and only prints the path it wrote. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Examples:
aichor experiments metrics plot <experiment_id> -m gpu_memory_used
aichor experiments metrics plot <experiment_id> -m cpu_usage --window 6h
aichor experiments metrics plot <experiment_id> -m cpu_usage --lifetime
aichor experiments metrics plot <experiment_id> -m cpu_usage --export cpu.html
aichor experiments metrics plot <experiment_id> -m gpu_memory_used --export gpu.png
aichor experiments resubmit
Resubmit an experiment.
aichor experiments resubmit <experiment-id> [options]
Arguments:
experiment-id
ID of the experiment to resubmit.
Options:
--project-name
Override the default project.
Required if no default project in CLI context exists.
aichor experiments status
Get the status of an experiment.
Outputs {"experiment_status": <status>} as JSON to stdout.
Possible status values: Created, Processing, Cancelled, Succeeded, Failed.
aichor experiments status <experiment-id> [options]
Arguments:
experiment-id
ID of the experiment.
Options:
--project-name
Override the default project.
Required if no default project in CLI context exists.
Examples:
aichor experiments status <experiment_id>
- Capturing the experiment status in a bash script:
STATUS=$(aichor experiments status <experiment-id> | jq -r '.experiment_status')
aichor experiments step
Get the current step of an experiment.
Outputs {"experiment_step": <step>} as JSON to stdout.
Possible step values: Waiting, Cloning, Building, Submitting, Running, Completed.
aichor experiments step <experiment-id> [options]
Arguments:
experiment-id
ID of the experiment.
Options:
--project-name
Override the default project.
Required if no default project in CLI context exists.
Examples:
aichor experiments step <experiment_id>
Capturing the experiment step in a bash script:
STEP=$(aichor experiments step <experiment-id> | jq -r '.experiment_step')
aichor experiments submit commit-sha
Submits an experiment by specifying a branch and a commit SHA.
aichor experiments submit commit-sha <commit_sha> --branch <branch> [options]
Arguments:
commit_sha
Commit SHA to use.
Required options:
--branch
Branch to trigger the experiment from.
Options:
-
--engine-name
Override the default engine. -
--manifest-path
Select the manifest to run by giving its path relative to theaichor_manifests/directory (for examplemanifest1.yamlorteam_a/manifest1.yaml). The path must end in.yamlor.yml. When omitted, AIchor falls back to the rootmanifest.yaml(legacy, deprecated).
This is what lets one commit drive many experiments: commit once, then re-trigger the same SHA with a different--manifest-patheach time. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Example:
- Submitting an experiment from a specific branch and commit SHA, using project and engine from the CLI context:
aichor experiments submit commit-sha <commit-sha> --branch <branch> --manifest-path manifest1.yaml
Capturing the experiment ID in a bash script:
EXPERIMENT_ID=$(aichor experiments submit commit-sha <commit-sha> --branch <branch> | jq -r '.experiment_id')
aichor experiments submit local
Submits an experiment from your local repository.
This will zip a local directory, send it to AIchor and trigger an experiment using this code.
aichor experiments submit local --repo-dir <repo_dir> [options]
Required options:
--repo-dir
Path to the local repository.
Options:
-
--message
Name for the experiment, shown in the experiments list. A local submit has no commit to take a message from, so this is purely a label you choose.
When omitted, AIchor names it for you:Local submit, orLocal submit (<manifest-path>)when--manifest-pathis given. -
--engine-name
Override the default engine. -
--project-name
Override the default project.
Required if no default project in CLI context exists. -
--manifest-path
Select the manifest to run by giving its path relative to theaichor_manifests/directory (for examplemanifest1.yamlorteam_a/manifest1.yaml). The path must end in.yamlor.yml. When omitted, AIchor falls back to the rootmanifest.yaml(legacy, deprecated).
Example:
- Submitting an experiment with contents of the current directory, named "First experiment", using project and engine from the CLI context:
aichor experiments submit local --message "First experiment" --repo-dir .
- Omitting
--messagelets AIchor name the experiment for you:
aichor experiments submit local --repo-dir .
- Naming the experiment, and selecting
aichor_manifests/manifest.yaml:
aichor experiments submit local --message "train ResNet" --repo-dir . --manifest-path manifest.yaml
Capturing the experiment ID in a bash script:
EXPERIMENT_ID=$(aichor experiments submit local --message "First experiment" --repo-dir . | jq -r '.experiment_id')
Support for .aichorignore
An .aichorignore file in the project's root directory can be used to exclude files and directories from being included in the repo when an experiment is submitted via the CLI.
Create an .aichorignore file in the project's root directory with .gitignore-style patterns:
# Ignore all files in test_ignore directory
test_ignore/
# Ignore temporary files
*.tmp
aichor projects
| Command | Description |
|---|---|
| aichor projects costs | List costs for a project |
| aichor projects list | List available projects |
| aichor projects linked-engines | List engines linked to a project |
aichor projects costs
Returns the costs of all projects, or a specific project if project-name is provided.
By default shows just total cost for the project.
It is also possible to select specific resources such as cpu, memory, pvc, buckets, as well as total and itemized gpu costs.
aichor projects costs [project-name] [options]
Arguments:
project-name
Optional. Name of a specific project.
Options:
-
--accelerators
Show accelerators usage costs per gpu name. -
--buckets
Show buckets usage costs. -
--cpu
Show cpu usage costs. -
--gpu
Show gpu usage costs. -
--memory
Show memory usage costs. -
-o, --output
Output format.
Accepted values:table,json.
Default istable. -
--pvc
Show PVC usage costs. -
--total
Show all costs.
Example:
- JSON output for total gpu and pvc costs
aichor projects costs <project_name> --gpu --pvc --output json
aichor projects linked-engines
Returns the engines linked to a project.
aichor projects linked-engines [project-name] [options]
Arguments:
project-name
Optional. Name of a specific project.
Options:
-o, --output
Output format.
Accepted values:table,json.
Default istable.
Example:
aichor projects linked-engines <project_name> --output json
aichor projects list
Returns the list of projects, or a specific project if project-name is provided.
aichor projects list [project-name] [options]
Arguments:
project-name
Optional. Name of a specific project to show.
Options:
-o, --output
Output format.
Accepted values:table,json.
Default istable.
Example:
aichor projects list <project_name> --output json
aichor storage
Operations on project storage buckets.
⚠️ The CLI is working under the following assumption:
- Directory paths end with trailing backslash, e.g.
./Path/To/Directory/ - File paths do not end with a trailing backslash, e.g.
./Path/To/File.txt
| Command | Description |
|---|---|
| aichor storage cloud cp | Copy files between two remote storage buckets |
| aichor storage cloud download | Download a file or directory from a remote storage bucket to a local path |
| aichor storage cloud list | List buckets for a project |
| aichor storage cloud list-contents | List contents inside a project bucket |
| aichor storage cloud mkdir | Create a directory in a project bucket |
| aichor storage cloud rm | Delete a file or directory in a project bucket |
| aichor storage cloud storage-credentials | Fetch storage credentials for project buckets |
| aichor storage cloud upload | Upload a local file or directory to a remote storage bucket |
Filter patterns
Several storage commands accept --include and --exclude options that filter files using glob patterns (e.g. *.txt, data/*.csv). Each option can be specified multiple times to provide more than one pattern. Patterns are matched against both the full path and the filename.
Priority rules:
- Exclude is evaluated first. A file matching any
--excludepattern is always removed, even if it also matches an--includepattern. - Include is evaluated second. If at least one
--includepattern is given, only files matching one of those patterns are kept. - No filters — all files are returned when neither option is provided.
| Scenario | Result |
|---|---|
--include "*.txt" | Only .txt files are kept |
--exclude "*.tmp" | All files except .tmp files are kept |
--include "*.txt" --exclude "*.txt" | No files (exclude has priority) |
--include "data/*.csv" --exclude "data/raw*" | .csv files in data/ except those whose name starts with raw |
aichor storage cloud cp
Copy files between two remote storage buckets.
aichor storage cloud cp --dst-path <dst_path> --dst-storage-id <dst_storage_id> --src-path <src_path> --src-storage-id <src_storage_id> [options]
Required options:
-
--dst-path
Destination path within the bucket. -
--dst-storage-id
ID of the destination storage bucket. -
--src-path
Source path within the bucket. -
--src-storage-id
ID of the source storage bucket.
Options:
-
--engine-name
Override the default engine. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Example:
aichor storage cloud cp --src-storage-id <src_storage_id> --src-path /mydir/ --dst-storage-id <dst_storage_id> --dst-path /mydir/ --project-name <project_name> --engine-name <engine_name>
aichor storage cloud download
Download a file or directory from a remote storage bucket to a local path.
aichor storage cloud download --remote-path <remote_path> --storage-id <storage_id> [options]
Required options:
-
--remote-path
Source path within the bucket to download from. -
--storage-id
ID of the source storage bucket.
Options:
-
--engine-name
Override the default engine. -
--local-path
Destination local path.
Defaults to current directory. -
--max-workers
Number of parallel download workers.
Default is 1. -
--overwrite
Overwrite existing local files. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Examples:
- Download a directory:
aichor storage cloud download --remote-path /mydir/ --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> --local-path ./mydir/
- Download a remote directory to a local directory with a different name:
aichor storage cloud download --remote-path /mydir/ --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> --local-path ./another_dir/
- Download a single file to the
./downloadsdirectory:
aichor storage cloud download --remote-path /mydir/file.txt --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> --local-path ./downloads/
- Download a single file:
aichor storage cloud download --remote-path /mydir/file.txt --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> --local-path ./file.txt
aichor storage cloud list
List buckets for a project.
aichor storage cloud list [options]
Options:
-
--engine-name
Override the default engine. -
-o, --output
Output format.
Accepted values:table,json.
Default istable. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Example:
aichor storage cloud list --project-name <project_name> --engine-name <engine_name>
aichor storage cloud list-contents
List contents inside a project bucket.
aichor storage cloud list-contents --storage-id <storage_id> [options]
Required options:
--storage-id
ID of the storage bucket.
Options:
-
--engine-name
Override the default engine. -
--exclude
Exclude items matching the given glob pattern (e.g.*.tmp).
Can be specified multiple times.
See Filter patterns for priority rules. -
--include
Include only items matching the given glob pattern (e.g.*.txt).
Can be specified multiple times.
See Filter patterns for priority rules. -
--max-depth
Maximum recursion depth when using--recursive.
If not set, depth is unlimited. -
-o, --output
Output format.
Types: [tree, size, simple].
Default is tree. -
--path
Path within the bucket to list. Defaults to root (.). -
--project-name
Override the default project.
Required if no default project in CLI context exists. -
-r, --recursive
List subdirectories recursively.
The different output work as follows:
treeshows the directory structure of the selected path. For example:
📂 Root
├── 📄 file1.txt
├── 📄 file2.txt
└── 📁 example_folder
└── 📄 file3.txt
sizeshows a file or directory per line along with the corresponding size. For example:
22.0 MiB 📄 file1.txt
24.0 MiB 📄 file2.txt
15.0 MiB 📁 example_folder/
15.0 MiB 📄 example_folder/file3.txt
----------------------------------------
Total unique data: 75.0 MiB across 4 items.
simpleshows the list of files, one per line. For example:
file1.txt
file2.txt
example_folder/
example_folder/file3.txt
Examples:
- List all contents recursively:
aichor storage cloud list-contents --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> -r
- List direct children of a path only (depth 0):
aichor storage cloud list-contents --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> -r --max-depth 0 --path /mydir/
- List only
.txtfiles:
aichor storage cloud list-contents --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> -r --include "*.txt"
- Exclude
.txtfiles:
aichor storage cloud list-contents --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> -r --exclude "*.txt"
aichor storage cloud mkdir
Create a new directory in a project bucket.
aichor storage cloud mkdir --path <path> --storage-id <storage_id> [options]
Required options:
-
--path
Path of the directory to create within the bucket. -
--storage-id
ID of the storage bucket.
Options:
-
--engine-name
Override the default engine. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Example:
aichor storage cloud mkdir --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> --path ./mydir/
aichor storage cloud rm
Delete a file or directory in a project bucket.
aichor storage cloud rm --path <path> --storage-id <storage_id> [options]
Required options:
-
--path
Path of the file or directory to delete. -
--storage-id
ID of the storage bucket.
Options:
-
--dry-run
Preview what would be deleted without performing any deletions. -
--engine-name
Override the default engine. -
--exclude
Exclude items matching the given glob pattern (e.g.*.tmp).
Can be specified multiple times.
See Filter patterns for priority rules. -
--force, -f
Delete without confirmation prompt. -
--include
Include only items matching the given glob pattern.
Can be specified multiple times.
See Filter patterns for priority rules. -
--max-print
Maximum number of items to display during the dry-run.
Default is 20. -
--max-workers
Number of parallel deletion workers.
Default is 3. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Examples:
- Delete a specific file:
aichor storage cloud rm --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> --path /mydir/file.txt --force
- Preview deletion of a directory:
aichor storage cloud rm --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> --path /mydir/ --dry-run
aichor storage cloud storage-credentials
Fetch storage credentials for the project's buckets.
aichor storage cloud storage-credentials --engine-name <engine_name> [options]
Options:
-
--engine-name
Override the default engine.
Required if no default engine in CLI context exists. -
-o, --output
Output format.
Accepted values:table,json.
Default istable. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Example:
aichor storage cloud storage-credentials --project-name <project_name> --engine-name <engine_name> --output json
aichor storage cloud upload
Upload a local file or directory to a remote storage bucket.
aichor storage cloud upload --remote-path <remote_path> --storage-id <storage_id> [options]
Required options:
-
--remote-path
Destination path within the bucket. -
--storage-id
ID of the destination storage bucket.
Options:
-
--engine-name
Override the default engine. -
--local-path
Source local path.
Defaults to current directory. -
--max-workers
Number of parallel upload workers.
Default is 1. -
--overwrite
Overwrite existing files at the destination. -
--project-name
Override the default project.
Required if no default project in CLI context exists.
Examples:
- Upload a directory:
aichor storage cloud upload --local-path ./mydir/ --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> --remote-path /mydir/
- Upload a local directory to a remote directory with another name:
aichor storage cloud upload --local-path ./mydir/ --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> --remote-path /another_dir/
- Upload a file to a remote directory:
aichor storage cloud upload --local-path ./file.txt --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> --remote-path /mydir/
- Upload a file:
aichor storage cloud upload --local-path ./file.txt --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> --remote-path ./file.txt
- Upload and overwrite existing files:
aichor storage cloud upload --local-path ./mydir/ --storage-id <storage_id> --project-name <project_name> --engine-name <engine_name> --overwrite