tigris-object-operations — скилл для Claude Code: работа с объектами
Скилл для загрузки, скачивания, удаления и листинга объектов в Tigris Storage прямо из агента, плюс presigned URL.
npx skills add tigrisdata/skills --skill tigris-object-operations -a claude-codeЧто делает 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-code2Вручную: положить файлы
~/.claude/skills/tigris-object-operations/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/tigris-object-operations/
1Через Skills CLI (Vercel)
npx skills add tigrisdata/skills --skill tigris-object-operations -a codex2Вручную: положить файлы
.agents/skills/tigris-object-operations/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add tigrisdata/skills --skill tigris-object-operations -a cursor2Вручную: положить файлы
.cursor/skills/tigris-object-operations/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install tigrisdata/skills tigris-object-operations2Вручную: положить файлы
.github/skills/tigris-object-operations/SKILL.md1Через Skills CLI (Vercel)
npx skills add tigrisdata/skills --skill tigris-object-operations -a gemini-cli2Командой платформы
gemini skills install https://github.com/tigrisdata/skills --path skills/tigris-object-operationsВручную: положить файлы
.devin/skills/tigris-object-operations/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add tigrisdata/skills --skill tigris-object-operations -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора5
Похожие
Рядом в теме «Бэкенд и 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