Как я дал AI-агенту кошелёк и зачем там сразу понадобилась память

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

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

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

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

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

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

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

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

AI-агент с цифровым кошельком и цепочкой микроплатежей, утекающей в связанные между собой Markdown-чеки

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

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

Pay Memory

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

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

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

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

Кстати, вот точно так выглядит реальный receipt для той самой иллюстрации в начале поста - сырой 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.