Skip to content

feat(share): conversations, owner-authored replies, local-CLI composer - #22

Merged
AbsoluteMode merged 1 commit into
mainfrom
feat/conversations
Jul 30, 2026
Merged

feat(share): conversations, owner-authored replies, local-CLI composer#22
AbsoluteMode merged 1 commit into
mainfrom
feat/conversations

Conversation

@AbsoluteMode

Copy link
Copy Markdown
Owner

Три вещи из обсуждения с Максимом.

Треды. Вопрос редко закрывается одним ходом. Теперь можно доуточнять в обе стороны: Егор задаёт follow-up без пересказа контекста, твоя сторона может переспросить. thread едет внутри зашифрованного тела — relay не узнаёт, какие конверты относятся к одному разговору. Треды закрываются по 40 ходам или двум неделям тишины: открытая ветка это постоянный канал, а не вопрос.

Владелец отвечает своими словами — без апрува. Часто настоящего ответа в индексе нет, он в голове. Пишешь реплаем в тред обычный текст — он уходит как есть. Правило: авторство и есть авторизация, отдельное подтверждение собственного набранного текста — ритуал, а не рубеж. /ok остаётся только для машинных черновиков.

Сырой контекст не отдаём вообще. Наружу идёт ответ — то же, что владелец сказал бы, посмотрев свою историю, — плюс счётчик источников (отличить обоснованное от выдуманного). Session id и названия проектов остаются дома: прочитать их спрашивающий всё равно не может, а метаданные это ровно те, что не стоит светить. Композеру велено ссылаться на то, что существует вне машины: PR, коммиты, пути файлов, команды.

Композер на локальном CLI. claude -p вместо API: ключ не нужен, платит подписка. Ужат до текста: --tools "" снимает все встроенные тулзы, --strict-mcp-config отрезает MCP, промпт идёт argv (не через шелл), рабочий каталог пустой. В модуле зафиксирована найденная побочка: print-режим пишет транскрипт, который session-recall индексирует, — перед боевым использованием CLAUDE_CONFIG_DIR надо увести в сторону.

Сканер теперь читает и источники — поднимает флаг, если модель читала материал рядом с ключом, даже когда итоговый текст чистый.

Живой прогон композера на реальных фрагментах вернул: «Чинили пином, не миграцией… mcp>=1.2.0,<2 в pyproject.toml, PR #13… чего в фрагментах нет: деталей миграции».

Новые CLI: share reply <thread>, share threads. 15 новых тестов, сюита 256 passed.

🤖 Generated with Claude Code

A question is rarely answered in one shot. Threads let the asker follow up
without restating everything and let the owner ask back before answering — and,
most valuably, let the owner answer in their own words when the real answer was
never in the index. That path needs no approval: typing it IS the
authorization, so only machine-drafted text still needs /ok.

What crosses the wire is the answer, never the transcript: sessions ids and
project names stay home (the asker cannot read them anyway and they are exactly
the metadata worth not leaking), and the composer is told to cite artifacts
that exist outside this machine — PRs, commits, file paths, commands — because
those are what make an answer usable. Only a source count travels, so a
grounded answer is still distinguishable from a guess.

The composer now defaults to the locally installed `claude` CLI: no API key, no
extra cost, and stripped to text-in/text-out via --tools "" and
--strict-mcp-config, argv rather than a shell, in an empty working directory.
Note in the module: print mode writes a transcript that session-recall indexes,
so CLAUDE_CONFIG_DIR must point elsewhere before real use.

The scanner now also reads the source fragments, flagging a candidate whose
sources sat next to a secret even when the composed answer looks clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@AbsoluteMode
AbsoluteMode merged commit c7d3d7f into main Jul 30, 2026
7 checks passed
@AbsoluteMode
AbsoluteMode deleted the feat/conversations branch July 30, 2026 20:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants