К основному содержанию
скилл CX Codex

tigris-object-operations — скилл для Claude Code: работа с объектами

Скилл для загрузки, скачивания, удаления и листинга объектов в Tigris Storage прямо из агента, плюс presigned URL.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add tigrisdata/skills --skill tigris-object-operations -a claude-code
Открыть на GitHub

Что делает tigris-object-operations

Скилл закрывает операции с объектами в Tigris Storage: put, get, remove, list, head и генерацию presigned URL. Внутри — справочник по функциям пакета @tigrisdata/storage с параметрами и примерами на TypeScript. Агент получает таблицу операций и опций, поэтому не выдумывает сигнатуры, а берёт их оттуда.

Перед началом скилл проверяет наличие Tigris CLI командой tigris help и при отсутствии ставит @tigrisdata/cli глобально через npm. Если установка нужна, агент сообщает об этом пользователю. Все методы возвращают TigrisStorageResponse<T, E>, и проверять надо сначала поле error, а уже потом data — это вынесено в раздел частых ошибок.

Для больших файлов есть multipart: true и колбэк прогресса, для листинга — пагинация через hasMore и paginationToken. Загрузку из браузера скилл советует делать через @tigrisdata/storage/client с указанием своего backend-эндпоинта. Учтите: без установленного CLI или без настроенного доступа к Tigris Storage примеры из скилла не заработают.

Какие задачи решает

  • загрузить файл в Tigris Storage из кода агента
  • скачать объект строкой, файлом или потоком
  • сгенерировать presigned URL для временного доступа
  • пролистать бакет с префиксом и пагинацией
  • прочитать метаданные объекта перед обработкой

Примеры запросов агенту

  • загрузи файл отчёта в Tigris Storage и верни URL
  • сделай presigned URL на скачивание object.txt на час
  • покажи все объекты с префиксом images/

Как установить tigris-object-operations

1Через Skills CLI (Vercel)

npx skills add tigrisdata/skills --skill tigris-object-operations -a claude-code

2Вручную: положить файлы

~/.claude/skills/tigris-object-operations/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/tigris-object-operations/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора5

Похожие

neon-object-storage neondatabase Настраивает S3-совместимое хранилище Neon, которое ветвится вместе с базой данных. Пригодится для загрузок, изображений и документов приложения. CX Codex +1 28 200установок object-storage devops-skills Скилл для работы с объектным хранилищем: команды AWS CLI, бакет-политики, lifecycle-правила, версионирование и self-hosted MinIO. CX Codex +1 350установок extension-object-storage caffeinelabs Скилл добавляет в проект хранилище файлов: содержимое лежит вне сети, а бэкенд держит только ссылки на него. Пригодится для галерей изображений, видео и документов. CX Codex +1 28 100установок upstash-blob-js Upstash Скилл для работы с объектным хранилищем @upstash/blob: загрузка файлов из браузера напрямую, presigned-ссылки, multipart и чтение по подписи. CX Codex +1 503установок encore-bucket encoredev Учит агента работать с объектным хранилищем Encore.ts: загрузка, скачивание, список и удаление файлов через Bucket. CX Codex +1 419установок extension-to-functions-codebase Google LLC Переносит Firebase Extension в локальную кодовую базу Cloud Functions или в отдельный npm-пакет. Помогает перевести триггеры с V1 на V2 и настроить декларативный доступ к IAM и API. CX Codex +1 56 400установок

Рядом в теме «Бэкенд и API»

Всё по теме «Бэкенд и API» →

Вопросы о tigris-object-operations

Как установить tigris-object-operations в Claude?

Выполните npx skills add tigrisdata/skills --skill tigris-object-operations -a claude-code. Скилл появится в ~/.claude/skills/tigris-object-operations/SKILL.md.

Что делает tigris-object-operations?

Даёт агенту справочник по операциям с объектами Tigris Storage: загрузка, скачивание, удаление, листинг, метаданные и presigned URL.

Что нужно для работы скилла?

Tigris CLI: скилл проверяет его через tigris help и при отсутствии ставит @tigrisdata/cli глобально через npm.

Исходный текст

SKILL.md · MIT
---
name: tigris-object-operations
description: Use when working with objects in Tigris Storage - uploading, downloading, deleting, listing, getting metadata, or generating presigned URLs
---

# Tigris Object Operations

## Prerequisites

**Before doing anything else**, install the Tigris CLI if it's not already available:

```bash
tigris help || npm install -g @tigrisdata/cli
```

If you need to install it, tell the user: "I'm installing the Tigris CLI (`@tigrisdata/cli`) so we can work with Tigris object storage."

## Overview

Tigris Storage provides object operations: upload (put), download (get), delete (remove), list, metadata (head), and presigned URLs.

All methods return `TigrisStorageResponse<T, E>` - check `error` property first.

## Quick Reference

| Operation     | Function                         | Key Parameters                    |
| ------------- | -------------------------------- | --------------------------------- |
| Upload        | `put(path, body, options)`       | path, body, access, contentType   |
| Download      | `get(path, format, options)`     | path, format (string/file/stream) |
| Delete        | `remove(path, options)`          | path                              |
| List          | `list(options)`                  | prefix, limit, paginationToken    |
| Metadata      | `head(path, options)`            | path                              |
| Presigned URL | `getPresignedUrl(path, options)` | path, operation (get/put)         |

## Upload (put)

```typescript
import { put } from "@tigrisdata/storage";

// Simple upload
const result = await put("simple.txt", "Hello, World!");
if (result.error) {
  console.error("Error:", result.error);
} else {
  console.log("Uploaded:", result.data?.url);
}

// Large file with progress
const result = await put("large.mp4", fileStream, {
  multipart: true,
  onUploadProgress: ({ loaded, total, percentage }) => {
    console.log(`${loaded}/${total} bytes (${percentage}%)`);
  },
});

// Prevent overwrite
const result = await put("config.json", config, {
  allowOverwrite: false,
});
```

## Put Options

| Option             | Values            | Default  | Purpose                  |
| ------------------ | ----------------- | -------- | ------------------------ |
| access             | public/private    | -        | Object visibility        |
| addRandomSuffix    | boolean           | false    | Avoid naming collisions  |
| allowOverwrite     | boolean           | true     | Allow replacing existing |
| contentType        | string            | inferred | MIME type                |
| contentDisposition | inline/attachment | inline   | Download behavior        |
| multipart          | boolean           | false    | Enable for large files   |
| onUploadProgress   | callback          | -        | Track upload progress    |

## Download (get)

```typescript
import { get } from "@tigrisdata/storage";

// Get as string
const result = await get("object.txt", "string");
if (result.error) {
  console.error("Error:", result.error);
} else {
  console.log("Content:", result.data);
}

// Get as file (triggers download in browser)
const result = await get("object.pdf", "file", {
  contentDisposition: "attachment",
});

// Get as stream
const result = await get("video.mp4", "stream");
const reader = result.data?.getReader();
// Process stream...
```

## Get Options

| Option             | Values            | Default     | Purpose            |
| ------------------ | ----------------- | ----------- | ------------------ |
| contentDisposition | inline/attachment | inline      | Download behavior  |
| contentType        | string            | from upload | MIME type          |
| encoding           | string            | utf-8       | Text encoding      |
| snapshotVersion    | string            | -           | Read from snapshot |

## Delete (remove)

```typescript
import { remove } from "@tigrisdata/storage";

const result = await remove("object.txt");
if (result.error) {
  console.error("Error:", result.error);
} else {
  console.log("Deleted successfully");
}
```

## List Objects

```typescript
import { list } from "@tigrisdata/storage";

// List all objects
const result = await list();
console.log("Objects:", result.data?.items);

// List with prefix (folders)
const result = await list({ prefix: "images/" });

// List with pagination
const allFiles = [];
let currentPage = await list({ limit: 10 });
allFiles.push(...currentPage.data?.items);

while (currentPage.data?.hasMore) {
  currentPage = await list({
    limit: 10,
    paginationToken: currentPage.data?.paginationToken,
  });
  allFiles.push(...currentPage.data?.items);
}
```

## List Options

| Option          | Purpose                              |
| --------------- | ------------------------------------ |
| prefix          | Filter keys starting with prefix     |
| delimiter       | Group keys (e.g., '/' for folders)   |
| limit           | Max objects to return (default: 100) |
| paginationToken | Continue from previous list          |
| snapshotVersion | List from snapshot                   |

## Object Metadata (head)

```typescript
import { head } from "@tigrisdata/storage";

const result = await head("object.txt");
if (result.error) {
  console.error("Error:", result.error);
} else {
  console.log("Metadata:", result.data);
  // { path, size, contentType, modified, url, contentDisposition }
}
```

## Presigned URLs

```typescript
import { getPresignedUrl } from "@tigrisdata/storage";

// Presigned URL for GET (temporary access)
const result = await getPresignedUrl("object.txt", {
  operation: "get",
  expiresIn: 3600, // 1 hour
});
console.log("URL:", result.data?.url);

// Presigned URL for PUT (allow client upload)
const result = await getPresignedUrl("upload.txt", {
  operation: "put",
  expiresIn: 600, // 10 minutes
});
```

## Presigned URL Options

| Option      | Values  | Default | Purpose         |
| ----------- | ------- | ------- | --------------- |
| operation   | get/put | -       | URL purpose     |
| expiresIn   | seconds | 3600    | URL expiration  |
| contentType | string  | -       | Require for PUT |

## Common Mistakes

| Mistake                      | Fix                                                  |
| ---------------------------- | ---------------------------------------------------- |
| Not checking `error` first   | Always check `if (result.error)` before `result.data`|
| Wrong format in `get()`      | Use 'string', 'file', or 'stream'                    |
| Forgetting `multipart: true` | Enable for files >100MB                              |
| Ignoring pagination          | Use `hasMore` and `paginationToken`                  |

## Client-Side Uploads

For browser uploads, use the client package to upload directly to Tigris:

```typescript
import { upload } from "@tigrisdata/storage/client";

const result = await upload(file.name, file, {
  url: "/api/upload", // Your backend endpoint
  onUploadProgress: ({ percentage }) => {
    console.log(`${percentage}%`);
  },
});
```

For initial setup, see **file-storage**.

© tigrisdata · MIT · tigrisdata/skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой