Саша говорит
101 subscribers
218 photos
11 videos
7 files
105 links
Поток сознания @ruliov
Download Telegram
Не буду я роли завозить. Решил попробовать переехать в opencode на работе, ибо я пока довелосипедирую своё — к тому моменту уже уволят если мне из-за лока на текущем сетапе неудобно вести больше полутора сессий (может и не уволят, но если я сам знаю, что могу распараллелиться на сильно больше чем сейчас, то когда-нибудь ещё кто-нибудь узнает).

Поспрашивал у гугла, он мне сказал что конфиги агентов в опенкоде это не совсем режимы roocode (а может и в roocode они мне кеш скидывали, кек :) ). Решил экспериментнуть и сделал очень простого универсального агента, промпт которого на экране.

Он конфигурируется файлами ролей которые сам и читает. И просто говоря ему в какой режим переключиться — так и делает. За день как тыкал, проверил — следует хорошо, можно раз пять туда-сюда переключиться и не запутывается, как ему нужно себя вести.

Команды и тулы во всех режимах доступны все, будем надеяться на его совесть. Да и если ограничивать сильно доступные действия, то он потупеет. Например, иногда в ask-роли вот нужно временный файл записать чтобы с ним что-то сделать, а мы тулу записи файлов забрали. Зачем? Пусть творит чернуху, если что просто сделаем git checkout . && git clean -id

От самого opencode смешанные ощущения. Вроде работает, а вроде встречаешь приколюхи то там то тут. Нельзя, например, потерять какую-то часть чата, можно удалить только до прошлого своего сообщения. Редко бывают ситуации, когда какой-нибудь тул разнесёт, ты отвлёкся, а агент там уже минут 10 с ума сходит, погрузившись в какой-то свой параллельный мир. В теории я мог бы найти место где его повело, удалить сообщения с того момента и отправить ему наставление, чего делать точно не нужно. Но тут могу только потерять и полезные сообщения тоже. Ну или попробовать объяснить что всё это туфта была и давай по-другому делать (но чат уже проклят ересью, они обычно не восстанавливаются).

От копирования текста из терминала у меня глаз дёргается (десктопное приложение не буду использовать, потому что уже почти сделал так что он внутри докера будет запускаться). Когда смотришь на суб-таску — не всегда очевидно что оно встало на запросе подтверждения действия (подсвечивает строку на которые обычно не смотришь, даже цвет квадратика не меняет). Отредактировав конфиг (с авторазрешениями или плагина) нужно выходить из всех экземпляров, даже /restart какого нет. Неявные скиллы. Пишешь /skills, видишь что скиллов ноль. А на самом деле есть магический скилл customize-opencode, например :).

Ну да ладно, я начал только в обед его использовать, может через три дня уже привыкну ко всему и донастроюсь.
Словил ещё прикол что он .agents/commands не поддерживает, нужно в его путь и формат складывать. Не страшно, ну да ладно.

Знатно им попользовался за день, сделал утилитку, которой можно заводить папки воркспейсов, а потом подключаться к ним. Что стартует контейнер где есть репозиторий, сразу запущен tmux с opencode и терминалом, прокинуты память, планы, прочие конфиги. Пока пошаренные, посмотрим насколько бодаться будет (я не коммичу память/планы в рабочий репозиторий (в личные коммичу), они полезны мне, но другим во-первых могут выглядеть мусором ибо коллеги в других местах проекта работают, во-вторых конфликтовать жёстко будем).

Завтра если будет время, то попробую agterm чтобы обозревать все эти воркспейсы разом, плюс подпилю плагинчик чтобы за всем зоопарком следить и в openpets отправлять агрегированные сообщения вроде «два воркспейса простаивают, сэр», на случай если я ютубы смотрю пока агенты крутятся и провтыкал тихий звук уведомления.

Надеюсь с понедельника повышу параллельность до 3-4 сессий, в пределе пяти, тут как раз много относительно независимых багов есть которые нужно пофиксить, плюс есть висяки по отложенному проекту, если оно с автоаппрувами практически всего будет самостоятельно шуршать к какому-то решению, то вполне можно будет потянуть.

За недельку отладим, соберу фидбек от самого себя и может дойдём до корневой сессии которая работает снаружи этих воркспейсов, которой я могу дать задачку/список задач, оно подумает насколько оно пересекающееся, раскидает по воркспейсам/создаст новых если не хватает. А мне только на вопросы отвечать, фидбек по готовому предоставлять чтобы переделало, да раздуплять затупившие модели (надеюсь редко, они становятся всё лучше за примерно те же деньги :) ).
Сходил на что-то вроде джимханы, немного порулил своей фиестой, да понажимал газ в пол. Потом сделал плагинчик чтобы показывало статусы агента в agterm. Белый это крутится, оранжевый — есть вопрос/аппрув, зелёный — что всё готово.

С контейнером нетривиально оказалось, пришлось сделать опцию которая прокидывает бинарники с хоста в контейнер, создавая там прокси-бинарник, который затем про TCP в relay идёт и просит выполнить agtermctl на хосте, прокидывая в контейнер результат.

Поддопилил плагинчик разрешений, который отклоняет грепы/глобы/выполнения команд в путях (нууу, пытается; но там довольно забористый парсинг с PEG-выражениями, который вполне себе норм пока детектит, если не обфусцировать :) ) которые я не разрешал в отдельном конфиге, чтобы не пыталось грепать по всему ~.

Накрутил в этой контейнерилке поднятие ssh и генерацию ssh-конфига, использую его в vscode, чтобы в два клика подключаться внутрь контейнера и можно было там на диффы посмотреть.

В ws-dev сессии там докручивалось напиливание wsctl expose, чтобы изнутри контейнера без его пересоздания можно было любой порт наружу выставить, чтобы я мог там запустить свой фронт и протыкать его.

До петсов не дошёл. Думаю что их сделаю привязанными к agterm, а не opencode. Там есть вроде как команда которая выдаёт список событий которые в нкго идут. Буду их мониторить и как статусы меняются — смотреть все текущие и агрегировать в состояние этой зверюшки.

Завтра будем пробовать, как оно на практике. Надеюсь, ничего не упустил и не придётся допиливать прям в процессе. А то не уверен, что я не развалил свой прошлый сетап :)
🍓1
Вполне норм вышло. Всё равно находилось что допиливать, правда.

Местами подбешивает меня opencode всё равно. Особенно в стороне суб-агентов. Невозможность их остановки и дописывания сообщений это совсем беда какая-то.

Ну и нельзя часть сообщений подчистить, только до прошлого моего (а иногда прям сильно хочется, например, когда видишь, что стартанул чат, оно упёрлось в косяк плагина разрешений, нужно его поправить и дать повторить, а всё что могу это явно сказать «ой, my bad, повтори ещё разок»).

Так что продолжаем продолжать. Хотя как смотрю, сколько всего нужно сделать становится печально. Узнал вот ещё что без LSP довольно тяжко получать код который сразу соответствует линтерам, которые ругулярно и я и моделька забывает прогонять.

Qwen 3.8 Flash потешный, кстати. Похоже он по умности плюс-минус как и Qwen 3.7 Plus, но стоит просто копейки. Вот сейчас план со скрина дописался, делится на под-планы, получится что-то около 12 центов на ~150k контекста. Думаю что и реализуется может за 20-30 центов каких. На 3.7 Plus оно было бы раза в полтора-два дороже, в сумме бы доллар получился.

#rhd
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Прикольно эти команды берут и работают. Вроде ерунду сделал — просто докидывание текста и добавление тегов, но само это переплетение плагинов мне нравится.

Неполностью описал чего хотел, нужно попросить ещё чтобы если итоговое сообщение после выполнения и удаления команды из содержимого привело к пустому сообщению — нужно удалить его (это просил) и не запускать тул-луп (это попросить забыл).

#rhd
🥰1
Media is too big
VIEW IN TELEGRAM
Добрался до openpets. Какая-то слишком сложная штука в которой слишком много лишнего, а документация выглядит так себе. В итоге навайбкодил тулу которая смотрит за событиями agterm и... дёргает CLI этих петов чтобы отправлять сообщения/реакции.

Я пытался сначала их плагин наваять, но там как-то сильно сложно всё оказалось, что мне нейронка начала предлагать отдельный HTTP-сервер поднять чтобы с этим плагином общаться, потому что он то ли как-то изолировано работает, то ли что. В итоге забил и просто командами дёргаю (возможно поэтому видно задержку, позже хотя бы npx из этой цепочки приберу).

Но в итоге агрегирует мне все статусы и показывает бейджик статуса. Если хотя бы один просит действий — то будет оранжевый waiting. Не особо мне это всё нравится, но хотя бы точно не провтыкаю)
💅2
Ещё один юзкейс для jev-like штук, который я, конечно же, реализовывать не буду.

У меня уже несколько недель болит от того как нейронки пишут комменты. Гайдлайны мои становятся всё длиннее, даже помогает. Но бывает что оно несмотря на то, что оно указано в AGENTS.md забывает их прочитать. Или даже читало, но забыло. Не указывая даже на проблемные комменты говоришь «а прочитай-ка memory/commenting.md». И оно такое: ААААА, ДААА, ТОЧННОО! И переписывает все косячные комментарии.

Из-за дешевизны этих system 1 штук (их там уже реализаций огого наделали, можно даже локально запускать), можно сделать LSP который смотрит за правками файлов, закидывает написанные комментарии в классификатор «хорошести» и следования гайдлайнам. Если не прошёл — кидает диагностику, что ничего не понятно, перепиши.

Мои гайдлайны если верить разбиралке это примерно 4 тысячи токенов. Размером самого комментария можно пренебречь. При цене $0.042 за лям это получается примерно шесть тысяч комментариев за доллар можно оценить. Плюс гайдлайны можно оптимизировать, сделав более компактное и строгое описание для этой ерунды, а не для LLM. В одной среднего размера задаче которую я решаю за доллара полтора там будет комментариев ну может пару десятков всего. Т.е. оверхеда по деньгам я не особо прям почувствую.

Может и реализую, чо нет. Но точно не до выходных)
Тот кто разрешил завести зону .md — горите в аду. Вы ещё .html заведите.
😁3
Натыкиваю план для под-чатов, страшно, сколько он там вопросов в итоге нагенерит ещё)

UPD: а не нагенерил, сказал что всё понял. Молодец какой.

#rhd
🤗2
Чекнул, работает ли. Работает, но почему-то зациклилось)) Попробовал на просьбах сложнее — такое ощущение что где-то нарушено продолжение тул-лупа или что, будто не захватывает ответ. Хотя странно, MCP ж работает и его результаты тулов видит. А там те же механизмы и не должно ничто влиять.

Ну да ладно, как следующий раз к этому вернусь — добавлю жосткого логирования что в модель отправляем и посмотрим, куда оно теряется :)

Может гонки какие-то, хз) #rhd
✍1
Даже лучше. Я себе ещё какое-то время назад прокси openai compatible сочинил, чтобы мог докидывать в запросы к опенроутеру параметров (плюс нигде не указывать токены), типа:


proxy:
port: 9999
target:
path: https://.../v1
apiKey:
env: MY_AWESOME_API_KEY
models:
"deepseek/deepseek-v4-flash-0731":
extraBody:
provider:
sort: throughput
max_price: {"prompt": 0.15, "completion": 0.35}
"z-ai/glm-5.2":
extraBody:
provider:
sort: throughput
max_price: {"prompt": 0.8, "completion": 2.5}


(там у них есть это поле, где можно провайдеров сначала отсортировать по price/throughput/latency, потом ограничить по цене, чтобы случайно не попадать на модели с инвалидностью, выдающие три токена в 10 секунд берущие за это в два раза больше чем в среднем по палате)

Прикручу к этой проксе логирование, пусть все сессии постоянно складывает в какой-нибудь sqlite, бахну к этой базе фронт за полчаса, пусть себе копится, потом придумаем что с ними делать.

Иногда, например, интересно почитать системные промпты клода/опенкода/кодекса и прочих 🙂
😍1
Опять под подкаст всё запилил. Причём даже вполне автономно получилось, я даже план не читал, просто глянул что мне пообещали сделать. Теперь знаю что опенкод молодец и кроме моих инструкций агента в системный промпт докидывает только свой скилл для кастомизации самого себя, совсем немного информации окружения и всё (а то прошлый корпоративный харнесс решал за меня, что мне будет лучше и не давал выкинуть их системный промпт).

Прикольно, словило вызовы его внутреннего агента для генерации тайтлов чатов.

Сейчас пару багов поправлю, ибо оно некорректно группирует чаты (это не сильно тривиальная задача, там нужно смотреть хеши подмножества прошлых сообщений), нужно не так агрессивно группировать, ибо все подчаты оказались в одном. Плюс чуть визуализацию вызовов тулов хочу чуть подправить. И чтобы из "человеческого вида" можно было raw-запросы посмотреть полегче, а то оно их в самый низ сложило просто списком, что не найдёшь нужного момента.
Про гараж я поднаврал, не будет пока видосов никаких с наведением порядка в нём, я уже там хлама понаскладывал которому не особо место в квартире)) и занимаюсь более утилитарными вещами.

Разобрал щиток старый, а там автоматы ноль разрывают и у меня во всех розетках и освещении при выключенных автоматах фазы везде, ещё и где-то протекающие, ибо там около сотни вольт напряжения показывает в выключенной розетке 🫠

Пока электрика не нашёл который может обесточить весь ряд гаражей чтобы поправить это и отрезать мне всю текущую проводку — собрал и повесил свой щиток рядом в котором хотя бы УЗО есть чтобы с меньшей вероятностью помереть. Сделал себе отдельный удлинитель и повесил свет в уголке. В понедельник или позже досверлю дырень в стене, повешу второй прожектор, чтобы там совсем ярко было и тень не мешала.

Завтра подключу наконец сварку и выясню, до какого напряжения&тока могу подняться перед тем как пройзойдёт что-либо из:

• Выбьет мой автомат на 16А (оцениваю как маловероятное до 130А+, посмотрел на ютубах, C-характеристику по идее не выбьет если с перерывами варить)
• Выбьет автомат из старого щитка на непонятный ток (ну я как-то надеюсь что там не меньше 16 тоже, но я даже не уверен в их работоспособности 🤷‍♂️)
• Начнёт дымиться одна из скруток
• Сгорит розетка, в которую я подключил щиток (ибо фаза там где-то в скрутке и я не могу её отключить, нет другого безопасного варианта подключения, поэтому пока заюзал розетку)

Но постараюсь раз в секунд 15 брать пирометр и смотреть во все места :)

#garage
👍3⚡1
О, нас сотня на счётчике) по факту думаю около 60-70, но какая разница 🙂

Ща ещё немного посижу, покачу в озон, заберу китайский отрезной станок на 355мм диск, два метра 150мм вентиляционной гофры и хомуты к ней. Вентилятор канальный раньше забрал.

Обмотаю багажник какой-то пеной (не знаю, то ли под паркет, то ли на стены, главное что её рулон копейки стоит и отлично подкладывать под всякое грязное/тяжёлое, ибо оно и толстое довольно (но рвётся тоже относительно легко, всё равно аккуратно нужно)), заеду опять на металлобазу и куплю себе всяких железок потоньше (до этого взял 4мм, но их я ножовкой не распилю, а в выходной не хочу болгаркой пилить, да и в кооперативе рядом с домами запрещено сильно шуметь 🙁 ).

Попробую пострадать и попилить руками полуторомиллиметровые эти железки, если не сильно напряжно будет — то может чего попробую поварить. Если напряжно — то забью до отпуска (в среду будет 🙂 ). В отпуске в будний день попробую станочек и напилю себе деталек чтобы что-то похожее на прототип стола можно было сварить. И толстые свои профиля нужно будет распилить на три куска чтобы потом как буду думать что смогу приварить — приварить их к воротам чтобы замок более свежий повесить. Надеюсь сторож не прибежит)

Когда/если получится замок повесить — посмотрю ютуб по поводу того как шумоизоляцию ворот накрутить (если сделать её до — то я всё подожгу когда буду приваривать железки к воротам 🙂 ). По идее там не космическая наука и если какой-то резины на ворота приклею, на неё минеральной ваты, сверху зашить чем-нибудь, поставить хоть какие-то уплотнители по периметру — то если мне чего отпилить будет нужно, то оно не сильно прям нарушит общественное спокойствие, если целый день не буду пилить 🙂

Единственное что нужно будет проверить работают ли у меня вентиляционные трубы, снять с них одно ведро (висят под потолком чтобы капало с труб в них, кек) и напечатать какую-то ерунду на 3D-принтере которая вставится в этот канал, каким-то чудом сможет отводить влагу, но при этом и иметь переходник на мой вентилятор, чтобы я мог выдувать воздух из гаража, чтобы он задувался через вторую (ну или туда тоже вентилятор поставить, они не сильно дорогие).

Тяжко как-то, вайбкодить попроще, конечно) #garage
💯1