---
title: Как я дал AI-агенту кошелёк и зачем там сразу понадобилась память
description: open-second-brain 0.8.0 и Pay Memory: как я добавил агенту возможность платить за внешние API через pay.sh и почему ключевой частью оказался не сам платёж, а понятная запись о каждом потраченном центе.
canonical_url: https://techmeat.dev/posts/how-i-gave-an-ai-agent-a-wallet
date: 2026-05-10
tags: pay-memory, agent-payments, pay-sh, solana, second-brain
language: ru
---

Несколько дней назад я выпустил [open-second-brain](/ru/posts/how-i-built-open-second-brain/) - файловый слой памяти для AI-агентов. С тех пор у меня крутилась одна идея, которая давно меня дёргала. Если агент работает на VPS, по своему графику, через Telegram - рано или поздно ему понадобится потратить деньги. Купить API-вызов. Сгенерировать иллюстрацию. Дёрнуть платный поиск.

Сама по себе оплата - давно решённая задача. [pay.sh](https://pay.sh) умеет превращать обычный HTTP-вызов в платный через micropayments в USDC на Solana. Агент дёргает curl через `pay`, кошелёк подписывает транзакцию, на той стороне отдаётся ответ. Готово.

Но "готово" - это только половина истории.

## Хаос с кошельком

Представьте: агент работает над задачей, по ходу принимает несколько решений, два из них - сделать платный вызов. Через час вы открываете терминал и видите скроллбэк, который уже улетел вверх. Где-то там были вызовы pay, где-то приходили tx-сигнатуры, где-то возвращались JSON-ответы.

Зачем агент это сделал? На каком основании? Сколько он рассчитывал потратить? Сколько реально списалось? Где результат?

Если хочется доверять агенту хоть в чём-то самостоятельном, ответ "почитай scrollback" не годится. Терминальный лог не структурирован, не связан с задачей, не индексируется, не переживает рестарт и его не открыть в Obsidian как нормальный артефакт.

Я довольно быстро понял, что задача звучит не как "научить агента платить", а как "сделать так, чтобы каждый платёж оставлял за собой осмысленный след".

![AI-агент с цифровым кошельком и цепочкой микроплатежей, утекающей в связанные между собой Markdown-чеки](./image.png)

Эта иллюстрация сгенерирована ровно тем способом, о котором рассказывает сам пост: через `pay.sh`, по x402-шлюзу `paysponge/fal` и эндпоинту `fal-ai/fast-sdxl`. Генерация стоила **0.01 USDC** с mainnet-кошелька `64FaukkZDUdFTufXF49H1CrHjDfsmBFqfrUjsAS8XrgP`; публичная Solana-транзакция - [`5ZYnkabzLvHqEgXNJfKopiRwbGkriHJ2bps2NnkX7HzqQAyTZYjcyJVCTvZwMquyMviv2juyAdbP9P2depHrJxQW`](https://solscan.io/tx/5ZYnkabzLvHqEgXNJfKopiRwbGkriHJ2bps2NnkX7HzqQAyTZYjcyJVCTvZwMquyMviv2juyAdbP9P2depHrJxQW). Request id - `019e135a-357b-71f3-8b9d-305e728b05fb`, сам сгенерированный ассет сохранён локально как `image.png`.

И тут как раз идеально подвернулся open-second-brain.

## Pay Memory

В версии 0.8.0 у OSB появился новый слой - **Pay Memory**. Если коротко, это память про деньги.

После каждого платного действия в vault появляется обычный Markdown-файл со следующими полями:

- **зачем** агент решил платить;
- **какой сервис** был вызван;
- **какая spending policy** действовала и что она ответила (`allowed` / `approval_required` / `denied` / `not_checked`);
- **сколько ожидали потратить** и **сколько реально списалось**;
- **payment proof** - конкретная Solana-сигнатура, по которой можно открыть Solscan и убедиться;
- **что получили** - ссылка на отдельную asset-заметку с результатом;
- **кто approved**, если этого требовала policy.

Это не таблица в SQLite и не дашборд. Это plain Markdown в той же папке, куда агент пишет дневной лог. Можно открыть глазами, прокомментировать, закоммитить в Git, потом найти grep'ом или показать как доказательство.

OSB здесь не превращается в платёжную систему - он не держит кошелёк, не подписывает транзакции, не делает enforcement. Он делает то, что хорошо умеет: ведёт честную человекочитаемую память. pay.sh даёт агенту доступ к платным ресурсам, а Pay Memory даёт человеку возможность через неделю спокойно открыть vault и понять, что именно произошло.

Кстати, [вот точно так выглядит реальный receipt](/files/fal-generate-a-no-text-fast-sdxl-illustration-for-the-techmeat-d.md) для той самой иллюстрации в начале поста - сырой Markdown прямо из vault, без какой-либо обработки. Frontmatter со всеми перечисленными выше полями, под ним - человеческий текст про "зачем", "что вернула policy" и "сколько списалось".

Внутри Second Brain он лежит вот по такому пути:

```
AI Wiki/
└── payments/
    └── 2026-05-10/
        └── fal-generate-a-no-text-fast-sdxl-illustration-for-the-techmeat-d.md
```

Никакой магии: дата → папка, slug → имя файла. Удобно для grep, git diff и обычной навигации в Obsidian.

## Один принцип, который оказался важнее остальных

Когда я ревьюил черновую реализацию, сразу зацепился глазом за одну деталь: receipt всегда писал "Allowed by the configured spending policy" - даже если никакой policy в vault не было.

Звучит как мелочь. На самом деле это убивает весь смысл.

Pay Memory - это audit-слой. Audit-слой ценен ровно настолько, насколько он честен. Как только receipt начинает рассказывать красивую историю вместо настоящей, всё разваливается. Поэтому правило получилось простое: лучше написать `not_checked`, чем уверенно записать `allowed` ложно. Если policy не проверялась - так и пиши. Если policy сказала `denied`, но человек руками всё равно пропустил - тоже пиши.

Соблазн "красивого нарратива" - главный враг audit-системы. И это, пожалуй, самый важный урок дня, который я планирую утащить в другие части проекта.

## Реальный платёж в проде

В конце дня всё это нужно было проверить не на sandbox-фикстурах, а на настоящих деньгах. Я скинул на свежий Solana-кошелёк десять центов USDC и попросил агента подобрать через Google Places три кофейни в Белграде.

Через секунду пришли три реальных места - Artist Specialty Coffee, Dusha, DRIP. Tx finalised на mainnet, $0.001 USDC, баланс ушёл с 0.10 на 0.099. Сигнатура - в Solscan, кликабельная.

А дальше сработала вся цепочка Pay Memory: receipt с настоящей сигнатурой в vault, отдельный asset с тремя кофейнями, дневной отчёт за день, короткая запись в Daily со ссылками на оба файла. Я могу открыть vault в Obsidian, кликнуть по проофу, увидеть тот самый платёж в проводнике и рядом - понятный человеческий рассказ, зачем агент это сделал.

## Зачем это всё

Я не пытаюсь сделать у себя enterprise compliance или blockchain-for-everything. Сама архитектура простая до неприличия - набор Markdown-файлов в правильных папках.

Но идея за этим важная.

Если агент работает всё автономнее, его память должна покрывать не только текстовые действия, но и действия с последствиями: вызов внешнего сервиса, потраченные деньги, созданный asset, запрошенный approval. Платёж - просто самый наглядный пример, потому что там сразу возникает вопрос доверия. Те же принципы потом легко переносятся на публикацию поста, отправку email, deploy, заказ генерации, on-chain operation.

Короткой формулой:

> pay.sh даёт агенту доступ к платным ресурсам.
> Pay Memory даёт человеку возможность через неделю понять, зачем агент этим воспользовался.

Если агент просто тратит деньги - это риск. Если агент тратит деньги и оставляет честный, связанный, человекочитаемый след - это уже workflow, которому можно постепенно начинать доверять.

Pay Memory вышла в составе [open-second-brain 0.8.0](https://github.com/itechmeat/open-second-brain/releases/tag/v0.8.0).