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

# Hardcore Mode

> Прямий доступ до вихідних файлів YAML та Markdown, що визначають поведінку агента — без візуального дизайнера.

<Warning>
  Зміни, внесені в Hardcore Mode, набувають чинності **негайно** з наступного вхідного повідомлення. Редагуйте обережно.
</Warning>

Hardcore Mode надає прямий доступ до вихідних файлів, що визначають поведінку агента. Замість візуального дизайнера ви редагуєте файли YAML та Markdown у дереві файлів.

## Структура файлів

Кожен агент — це папка з такою структурою:

```
agent/
  workflows/
    main.yaml       # логіка точки входу — виконується для кожного повідомлення
  skills/
    {name}.md       # заголовок конфігурації + системний промпт
```

<Note>
  `agent.yaml` та `flow.yaml` — це системні файли, якими керує платформа. Вони **недоступні** в Hardcore Mode. Ніколи не редагуйте їх.
</Note>

Усі файли `.md` у папці `skills/` мають однаковий формат: заголовок налаштувань YAML та тіло системного промпту. Цей тип файлів охоплює промпти агентів, промпти суб-агентів та навички — один уніфікований формат для всіх трьох.

***

## workflows/

`main.yaml` — це **точка входу**: рушій виконує його для кожного вхідного повідомлення. Ви можете мати кілька файлів workflow; додаткові викликаються через дії `run_workflow` з `main.yaml` або інших workflow.

Кожен файл workflow — це список **кроків**, що виконуються по черзі. Кроки спільно використовують `WorkflowState` — сховище ключ-значення, з якого можна читати та в яке можна записувати між кроками.

### Мінімальний приклад

```yaml theme={null}
steps:
  - type: skill
    id: answer
    skill: answer_question
    result_key: response

  - type: action
    id: send
    action:
      type: respond
      value: "{response}"
```

### Типи кроків

<Tabs>
  <Tab title="skill">
    **Запуск LLM** з використанням конфігурації та промпту, визначених у файлі навички.

    ```yaml theme={null}
    - type: skill
      id: find_answer           # унікальний ID у цьому файлі
      skill: answer_question    # назва skills/answer_question.md (без розширення)
      result_key: response      # зберегти відповідь LLM під цим ключем (за замовчуванням: "response")
      instruction: "Be concise" # необов'язково: додаткове повідомлення перед викликом LLM
    ```

    LLM отримує системний промпт із файлу навички, повну історію розмови та будь-які повідомлення, накопичені попередніми кроками (наприклад, попередні результати інструментів).
  </Tab>

  <Tab title="evaluate">
    **Витяг структурованих даних** з розмови та попередніх виходів кроків. Без інструментів, без діалогу — один структурований виклик LLM.

    ```yaml theme={null}
    - type: evaluate
      id: score_lead
      model: claude-haiku-4-5-20251001
      description: |
        Determine whether the customer has a clear budget and timeline.
      output:
        - field: has_budget
          type: boolean
        - field: timeline
          type: string_or_null   # null якщо не згадано
        - field: score
          type: int
    ```

    **Типи полів:** `boolean`, `string`, `string_or_null`, `int`
  </Tab>

  <Tab title="if">
    **Розгалуження за умовою** — перевіряє значення стану workflow та виконує дію.

    ```yaml theme={null}
    - type: if
      id: route
      branches:
        - condition:
            field: has_budget    # ключ зі стану workflow
            op: truthy           # truthy | falsy | eq | neq
          action:
            type: respond
            value: "Score: {score}, timeline: {timeline}"
        - condition:
            field: score
            op: eq
            value: 0
          action:
            type: do_nothing
      else:
        type: transfer_to_human
    ```

    Плейсхолдери `{key}` у `respond.value` замінюються відповідним значенням зі стану workflow.
  </Tab>

  <Tab title="action">
    **Пряма дія без LLM** — негайно виконує дію без виклику моделі.

    ```yaml theme={null}
    - type: action
      id: escalate
      action:
        type: transfer_to_human
    ```
  </Tab>
</Tabs>

### Дії

| Дія                 | Зупиняє виконання | Опис                                                                      |
| ------------------- | :---------------: | ------------------------------------------------------------------------- |
| `respond`           |         ✓         | Надсилає відповідь. Підтримує плейсхолдери `{key}` зі стану workflow.     |
| `do_nothing`        |         ✓         | Зупиняється без відповіді.                                                |
| `transfer_to_human` |         ✓         | Передає розмову людині.                                                   |
| `run_workflow`      |         ✓         | Запускає інший файл workflow як підпроцес.                                |
| `set_value`         |         —         | Записує `key: value` до стану workflow та переходить до наступного кроку. |

<AccordionGroup>
  <Accordion title="Приклад run_workflow">
    ```yaml theme={null}
    action:
      type: run_workflow
      workflow: escalation.yaml   # має існувати в папці workflows/
    ```
  </Accordion>

  <Accordion title="Приклад set_value">
    ```yaml theme={null}
    action:
      type: set_value
      key: greeted
      value: true
    ```
  </Accordion>
</AccordionGroup>

***

## skills/\{name}.md

Файл навички складається з двох частин, розділених `---`:

<Steps>
  <Step title="Заголовок налаштувань YAML">
    Між маркерами `---` — конфігурує LLM, інструменти та ліміти ітерацій.
  </Step>

  <Step title="Системний промпт">
    Усе після закриваючого `---` — інструкції, що надсилаються LLM.
  </Step>
</Steps>

### Повний приклад

```markdown theme={null}
---
skill: answer_question
description: Search the knowledge base and answer customer questions
llm:
  model: claude-haiku-4-5-20251001
tools: [search_qa]
max_iterations: 5
---

You are a helpful support agent. Use the search_qa tool to find answers.

Always reply in the same language the customer used.
If nothing is found, say you'll escalate to a human.
```

### Поля заголовка налаштувань

| Поле                   | Обов'язкове | Опис                                                                                  |
| ---------------------- | :---------: | ------------------------------------------------------------------------------------- |
| `skill`                |      ✓      | Має збігатися з назвою файлу без `.md`                                                |
| `description`          |      —      | Короткий опис, що відображається у списку файлів                                      |
| `llm.model`            |      ✓      | Модель для використання (див. [Моделі](#models))                                      |
| `llm.thinking_budget`  |      —      | Бюджет розширеного мислення Anthropic у токенах (наприклад, `8000`)                   |
| `llm.reasoning_effort` |      —      | Зусилля міркування OpenAI: `low` \| `medium` \| `high`                                |
| `tools`                |      —      | Список назв інструментів. Використовуйте `[]` для відсутності інструментів.           |
| `max_iterations`       |      —      | Максимальна кількість циклів виклику інструментів до зупинки (за замовчуванням: `10`) |

### Вставка стану workflow у промпти

Використовуйте `{values.key}` будь-де в тілі системного промпту, щоб вставити значення зі стану workflow:

```markdown theme={null}
The customer's lead score is {values.score}.
Based on this, adjust your tone accordingly.
```

### Моделі

<Tabs>
  <Tab title="Anthropic">
    Рекомендовано для більшості випадків.

    | Модель                      | Найкраще підходить для           |
    | --------------------------- | -------------------------------- |
    | `claude-haiku-4-5-20251001` | Швидкі, економічні завдання      |
    | `claude-sonnet-4-6`         | Збалансована продуктивність      |
    | `claude-opus-4-6`           | Найпотужніша, складне міркування |

    Використовуйте `llm.thinking_budget` для увімкнення розширеного мислення (бюджет токенів, наприклад `8000`).
  </Tab>

  <Tab title="OpenAI">
    | Модель         | Найкраще підходить для      |
    | -------------- | --------------------------- |
    | `gpt-5.5`      | Флагман, найвища потужність |
    | `gpt-5.4`      | Збалансована                |
    | `gpt-5.4-mini` | Доступна, легші завдання    |

    Використовуйте `llm.reasoning_effort` (`low` / `medium` / `high`) замість `thinking_budget`.
  </Tab>
</Tabs>

### Інструменти

| Інструмент    | Опис                                                    |
| ------------- | ------------------------------------------------------- |
| `search_qa`   | Семантичний пошук у базі знань Q\&A цієї організації    |
| `web_search`  | Пошук у реальному часі в інтернеті                      |
| `list_files`  | Перелік файлів у директорії цього агента                |
| `read_file`   | Читання файлу з директорії цього агента                 |
| `write_file`  | Створення або перезапис файлу в директорії цього агента |
| `delete_file` | Видалення файлу з директорії цього агента               |

***

## Правила та застереження

<Warning>
  `workflows/main.yaml` є **обов'язковим**. Без нього агент не повертає жодної відповіді.
</Warning>

<AccordionGroup>
  <Accordion title="ID кроків мають бути унікальними">
    Значення `id` мають бути унікальними в межах файлу workflow. Дублікати ID призводять до непередбачуваної поведінки.
  </Accordion>

  <Accordion title="skill: має точно збігатися з назвою файлу">
    `skill:` має точно збігатися з `skills/{skill}.md` — збіг є **чутливим до регістру**.
  </Accordion>

  <Accordion title="Зупиняючі дії завершують виконання негайно">
    `respond`, `do_nothing`, `transfer_to_human` та `run_workflow` зупиняють виконання негайно. Будь-які кроки після них у workflow **не виконуються**.
  </Accordion>

  <Accordion title="set_value не зупиняє виконання">
    На відміну від інших дій, `set_value` записує значення до стану workflow і переходить до **наступного кроку** — ніколи не зупиняє workflow.
  </Accordion>

  <Accordion title="Виходи evaluate зберігаються у стані workflow">
    Поля, отримані за допомогою `evaluate`, зберігаються у стані workflow і можуть бути прочитані будь-якою наступною гілкою `if` або плейсхолдером `respond`.
  </Accordion>

  <Accordion title="Ніколи не редагуйте agent.yaml або flow.yaml">
    Це системні файли, якими керує платформа. Пряме редагування може зламати агента непередбачуваним чином.
  </Accordion>
</AccordionGroup>
