> ## Documentation Index
> Fetch the complete documentation index at: https://agent-compass.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Terminus-2 Skills

The `terminus2_skills` harness runs [Terminus-2](https://www.harborframework.com/docs/agents/terminus-2) with on-demand skill loading for [SkillsBench](/en/user_guide/modules/benchmarks/skillsbench) and [Terminal-Bench](/en/user_guide/modules/benchmarks/terminal_bench_2)-style tasks in a prepared terminal environment.

On top of the `terminus2` terminal agent, it builds an index from the skill directories in the container and injects relevant skill content into the context on demand, then collects the trajectory. Model credentials come from the CLI `--model-*` and support `openai-chat` and `openai-responses`.

## How it works

* **Terminal session.** Runs Terminus-2 in a tmux pane (`tmux_pane_width` × `tmux_pane_height`); `parser_name` (`json` / `xml`) parses model responses, and `interleaved_thinking` enables interleaved thinking for compatible models.
* **On-demand skills.** Builds a skill index from the directories in `skill_dirs` (capped at `max_skill_index_chars`); `skill_format` (`json` / `xml`) sets the skill tool-call format, and matched skill content is injected after being truncated to `max_skill_content_chars`.
* **Timeouts and summarization.** `agent_setup_timeout_sec` bounds setup, `verifier_timeout_multiplier` / `execute_timeout_multiplier` scale timeouts, and `max_turns` caps turns; `enable_summarize` turns on context summarization, and `proactive_summarization_threshold` is the token threshold that triggers proactive summarization.
* **Collect results.** `record_terminal_session` can record the terminal; a `RunResult` is returned at the end.

## Parameters

Pass a JSON object via `--harness-params '{...}'`, or a `harness.params` block in the file given to `--config`; the CLI wins on shared keys (deep-merge). See the [Harnesses overview](/en/user_guide/modules/harnesses/overview) for merge precedence.

### Parameter reference

<div style={{overflowX:'auto'}}>
  <table style={{minWidth:'1200px', width:'100%'}}>
    <colgroup>
      <col width="27%" />

      <col width="9%" />

      <col width="20%" />

      <col width="14%" />

      <col width="30%" />
    </colgroup>

    <thead>
      <tr><th style={{whiteSpace:'nowrap'}}>Parameter</th><th style={{whiteSpace:'nowrap'}}>Type</th><th style={{whiteSpace:'nowrap'}}>Default</th><th>Choices / values</th><th>Description</th></tr>
    </thead>

    <tbody>
      <tr><td style={{whiteSpace:'nowrap'}}><code>parser\_name</code></td><td>string</td><td><code>json</code></td><td><code>json</code> / <code>xml</code></td><td>Response parser.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>skill\_format</code></td><td>string</td><td><code>json</code></td><td><code>json</code> / <code>xml</code></td><td>Skill tool-call format.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>max\_turns</code></td><td>int / null</td><td><code>null</code></td><td>≥ 1</td><td>Maximum agent turns.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>agent\_setup\_timeout\_sec</code></td><td>float</td><td><code>360</code></td><td>> 0</td><td>Agent setup timeout in seconds.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>verifier\_timeout\_multiplier</code></td><td>float</td><td><code>1.0</code></td><td>> 0</td><td>Multiplier for benchmark verifier timeouts.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>execute\_timeout\_multiplier</code></td><td>float</td><td><code>1.0</code></td><td>> 0</td><td>Multiplier for agent command execution timeouts.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>enable\_summarize</code></td><td>bool</td><td><code>true</code></td><td><code>true</code> / <code>false</code></td><td>Whether to enable proactive and context-length summarization.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>proactive\_summarization\_threshold</code></td><td>int</td><td><code>8000</code></td><td>≥ 1</td><td>Token threshold that triggers proactive summarization.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>tmux\_pane\_width</code></td><td>int</td><td><code>160</code></td><td>≥ 1</td><td>Terminal agent tmux pane width.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>tmux\_pane\_height</code></td><td>int</td><td><code>40</code></td><td>≥ 1</td><td>Terminal agent tmux pane height.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>record\_terminal\_session</code></td><td>bool</td><td><code>false</code></td><td><code>true</code> / <code>false</code></td><td>Whether to record the terminal session.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>interleaved\_thinking</code></td><td>bool</td><td><code>false</code></td><td><code>true</code> / <code>false</code></td><td>Whether to enable interleaved thinking for compatible models.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>skill\_dirs</code></td><td>list</td><td><code>\["/root/.claude/skills", "/root/.terminus/skills"]</code></td><td>—</td><td>Skill directory list inside the container.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>max\_skill\_index\_chars</code></td><td>int</td><td><code>16000</code></td><td>≥ 1</td><td>Maximum characters in the skill index.</td></tr>
      <tr><td style={{whiteSpace:'nowrap'}}><code>max\_skill\_content\_chars</code></td><td>int</td><td><code>4000</code></td><td>≥ 1</td><td>Maximum characters loaded from one skill.</td></tr>
    </tbody>
  </table>
</div>

## Run examples

<Tabs>
  <Tab title="Default">
    Run on docker with default skill directories and format.

    ```bash theme={"system"}
    agentcompass run \
      skillsbench \
      terminus2_skills \
      "$MODEL_NAME" \
      --env docker \
      --model-base-url "$MODEL_BASE_URL" \
      --model-api-key "$MODEL_API_KEY"
    ```
  </Tab>

  <Tab title="Custom params">
    Raise the per-skill load cap.

    ```bash theme={"system"}
    agentcompass run \
      skillsbench \
      terminus2_skills \
      "$MODEL_NAME" \
      --env docker \
      --harness-params '{
        "skill_format": "json",
        "max_skill_content_chars": 6000
      }' \
      --model-base-url "$MODEL_BASE_URL" \
      --model-api-key "$MODEL_API_KEY"
    ```
  </Tab>
</Tabs>

## Output

The harness returns a `RunResult` per task: the normalized trajectory, final answer, and execution status. Per-task details and aggregate metrics are written by the benchmark under `results/<benchmark>/<model>/<run>/` (see [Results](/en/user_guide/results)).
