> ## Documentation Index
> Fetch the complete documentation index at: https://docs.evolvingmachines.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# evolve upload

> Upload a job directory as a finished job.

```bash theme={null}
evolve upload <job_dir> [options]
```

Upload a job directory in the Harbor job layout, its `.tar.gz`, or a public URL of one, as a terminal job. The command follows the import to the job, prints the record with the task linkage (`linked N of M trials to <dataset>` and the not-linked tasks with their reasons), names any skipped trials, and ends with the analyze hint.

```bash theme={null}
evolve upload ./job-2026-08-27__12-00-00 -d terminal-bench-4@4.0
```

## Options

<ParamField path="-d, --dataset" type="name[@version]">
  Link the uploaded trials to a published dataset version by task name. Without it the trials link by their task hash on their own; this is the override, and the way to settle an ambiguous hash. See [upload](/core-concepts/upload#task-linkage).
</ParamField>

<ParamField path="--from" type="url">
  A public https URL of the job archive (`.tar.gz`) that the server fetches itself, instead of `<job_dir>`. No local bytes.
</ParamField>

<ParamField path="--no-wait">
  Return after the import is accepted, with the import id, instead of following it to the job. Re-attach with `evolve job import <id> --watch`.
</ParamField>

## Global options

<ParamField path="--json">
  Machine-readable JSON output.
</ParamField>

<ParamField path="--api-key" type="key">
  API key. Defaults to `$EVOLVE_API_KEY`.
</ParamField>

<ParamField path="--base-url" type="url">
  API base URL. Defaults to the Evolve dashboard API.
</ParamField>

## Following an import

`evolve job imports` lists your uploads, and `evolve job import <import-id> --watch` follows one. See the [`job`](/cli-reference/job) group.
