# Навык интеграции с Trello

## Файл: SKILL.md

---
name: trello-integration-skill
description: Этот навык позволяет работать с учётной записью Trello: получать списки досок и колонок и автоматически создавать карточки.
---

# Навык интеграции с Trello

Навык интеграции с Trello связывает ИИ-агента с учётной записью Trello пользователя. Агент может самостоятельно получать существующие доски и списки и создавать карточки задач в выбранных колонках по запросу пользователя.

## Возможности
- **Получение досок:** список всех доступных пользователю досок Trello с названием, ID и URL.
- **Получение списков:** все списки выбранной доски (например, колонки «Сделать», «В работе», «Готово»).
- **Создание карточек:** автоматическое создание карточек с заголовком и описанием в указанных списках.

---

## Настройка и предварительные условия

Для локального использования навыка нужны учётные данные Trello Developer API.

1. Создай учётные данные на [портале разработчиков Trello (Power-Ups Admin)](https://trello.com/app-key).
2. Создай ключ API.
3. Сгенерируй секретный токен с доступом на чтение и запись.
4. Добавь эти значения в корневой файл проекта `.env`:

```env
# Trello Integration
TRELLO_API_KEY=your_api_key_here
TRELLO_TOKEN=your_token_here
```

---

## Использование и устройство

Навык использует автономные скрипты Node.js из каталога `.agent/skills/trello_skill/scripts/`.

### 1. Получить все доски
Получи все доски пользователя, прошедшего аутентификацию, чтобы выбрать нужный `boardId`.

**Команда:**
```bash
node .agent/skills/trello_skill/scripts/list_boards.js
```

### 2. Получить колонки (списки) доски
Получи списки нужной доски, чтобы найти точный `listId` (например, ID колонки «Сделать»).

**Команда:**
```bash
node .agent/skills/trello_skill/scripts/list_lists.js <boardId>
```

### 3. Создать карточку
Создай карточку в указанном списке.

**Команда:**
```bash
node .agent/skills/trello_skill/scripts/create_card.js <listId> "<Card Title>" "<Optional Description>"
```
*(Всегда заключай заголовок и описание карточки в двойные кавычки, чтобы оболочка не разделила их на отдельные аргументы.)*

---

## Порядок действий ИИ-агента

Когда пользователь просит управлять задачами в Trello или добавить задачу, действуй следующим образом:
1. **Определи место назначения:** если `listId` неизвестен, сначала запусти `list_boards.js` и найди нужный `boardId`, затем запусти `list_lists.js <boardId>` и получи соответствующий `listId` (например, для колонки «Сделать»).
2. **Выполни команду:** запусти скрипт `create_card.js <listId> "Task Title" "Task Description"`.
3. **Сообщи результат:** подтверди успешное создание карточки и дай пользователю прямой URL новой карточки Trello.


## Файл: create_card.js


const path = require('path');
require('dotenv').config({ path: path.join(__dirname, '../../../../.env') });

const API_KEY = process.env.TRELLO_API_KEY;
const TOKEN = process.env.TRELLO_TOKEN;

if (!API_KEY || !TOKEN) {
    console.error("Error: TRELLO_API_KEY or TRELLO_TOKEN is missing from the .env file.");
    process.exit(1);
}

const listId = process.argv[2];
const cardName = process.argv[3];
const cardDesc = process.argv[4] || "";

if (!listId || !cardName) {
    console.error(`Usage: node create_card.js <listId> "${card_name}" ["${card_description}"]`);
    process.exit(1);
}

async function createCard() {
    const url = `https://api.trello.com/1/cards?idList=${listId}&key=${API_KEY}&token=${TOKEN}`;

    try {
        const response = await fetch(url, {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                name: cardName,
                desc: cardDesc,
                pos: 'top'
            })
        });

        if (!response.ok) {
            const errText = await response.text();
            throw new Error(`HTTP error! status: ${response.status}, message: ${errText}`);
        }
        const card = await response.json();
        console.log(`Successfully created card!`);
        console.log(`Name: ${card.name}`);
        console.log(`ID: ${card.id}`);
        console.log(`URL: ${card.url}`);
    } catch (error) {
        console.error("Failed to create card:", error.message);
    }
}

createCard();


## Файл: list_board.js


const path = require('path');
require('dotenv').config({ path: path.join(__dirname, '../../../../.env') });

const API_KEY = process.env.TRELLO_API_KEY;
const TOKEN = process.env.TRELLO_TOKEN;

if (!API_KEY || !TOKEN) {
    console.error("Error: TRELLO_API_KEY or TRELLO_TOKEN is missing from the .env file.");
    process.exit(1);
}

async function listBoards() {
    const url = `https://api.trello.com/1/members/me/boards?key=${API_KEY}&token=${TOKEN}&fields=name,url`;
    try {
        const response = await fetch(url);
        if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
        const boards = await response.json();
        console.log("--- Your Trello Boards ---");
        boards.forEach(b => console.log(`Name: ${b.name}\nID: ${b.id}\nURL: ${b.url}\n`));
    } catch (error) {
        console.error("Failed to fetch boards:", error.message);
    }
}

listBoards();


## Файл: list_lists.js


const path = require('path');
require('dotenv').config({ path: path.join(__dirname, '../../../../.env') });

const API_KEY = process.env.TRELLO_API_KEY;
const TOKEN = process.env.TRELLO_TOKEN;

if (!API_KEY || !TOKEN) {
    console.error("Error: TRELLO_API_KEY or TRELLO_TOKEN is missing from the .env file.");
    process.exit(1);
}

const boardId = process.argv[2];
if (!boardId) {
    console.error("Usage: node list_lists.js <boardId>");
    process.exit(1);
}

async function listLists() {
    const url = `https://api.trello.com/1/boards/${boardId}/lists?key=${API_KEY}&token=${TOKEN}&fields=name`;
    try {
        const response = await fetch(url);
        if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
        const lists = await response.json();
        console.log(`--- Lists in Board ${boardId} ---`);
        lists.forEach(l => console.log(`Name: "${l.name}"\nID: ${l.id}\n`));
    } catch (error) {
        console.error("Failed to fetch lists:", error.message);
    }
}

listLists();

---
Источник: prompts.chat. Текст: CC0 1.0 Universal. Русская версия: Kvantora.
