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

# Skills

> Bundle reusable agent instructions with a task.

A task can include skills in its environment so every agent running the task receives the same instructions and reference files. Each skill is a directory containing a `SKILL.md` file.

## Add skills to a task

Place the skills in the environment build context:

```bash theme={"system"}
my-task/
├── task.toml
└── environment/
    ├── Dockerfile
    └── skills/
        └── <skill-name>/
            ├── SKILL.md
            └── ...
```

Copy them into the image:

```dockerfile title="environment/Dockerfile" theme={"system"}
FROM <base-image>

COPY skills/ /skills/
```

Then point `environment.skills_dir` to that sandbox directory:

```toml title="task.toml" theme={"system"}
[environment]
skills_dir = "/skills"
```

Use an absolute sandbox path. This is required when task skills are combined with skills supplied at job runtime.

## How Harbor passes task skills

Harbor does not upload the task's skill files separately: they already exist in the built or prebuilt environment at `environment.skills_dir`. Before creating the agent, Harbor passes that path to the agent integration as `skills_dir`.

Compatible pre-integrated agents then copy or register the skills in their native configuration directory. A custom agent receives `skills_dir` in its constructor and should use it during `setup()` or `run()`. The path remains available in the sandbox as well.

<Note>
  Setting `environment.skills_dir` does not copy files into the environment. Ensure the directory exists in the built or prebuilt image.
</Note>

## Combine task and job skills

[Job-provided skills](/core-concepts/jobs/skills) are uploaded into the task's `environment.skills_dir`, so the agent receives both sources through one directory. A job-provided skill replaces a bundled skill with the same directory name for that trial.

If the task does not declare `environment.skills_dir`, job-provided skills use `/harbor/skills`.
