Mentions
Conversations linking to GitHub, newest first. Times are UTC.
Mentions by source
X
Bluesky
Hacker News
V2EX
Qiita
DEV
Mastodon
Latest posts
AI한테 마인크래프트 시키는 방법 yc-software/minecraft-agent-harness
@benhylak It really has to be fixed at the platform level. I don't have a big presence here, yet every day I get 3+ DM requests filled with random AI slop. Maybe something like mitchellh/vouch
Encoding downloaded clip with ffmpeg I'm updating an old batch script and struggling to make it work. The script requests a video URL, start time and end time/duration, then downloads that clip and encodes it as mp4/mkv (user choice) with h264 and AAC audio. This last is what I'm having trouble with. :: user inputs variables starttime, endtime, yturl, clipname yt-dlp -f bestvideo+bestaudio --download-sections "*%starttime%-%endtime%" --force-keyframes-at-cuts %yturl% --output "%clipname%" This works, but outputs a .webm file. yt-dlp#7607 says that this line allows re-encoding, and when I last tested the script a couple of years ago I believe it worked, but now it is completely ignored: --use-postprocessor FFmpegCopyStream --ppa CopyStream:"-c:v libx264 -c:a aac -f mp4" ffmpeg is installed to path. Note that I specifically want to set the codecs myself: bestvideo[mp4] or [vcodec\^=avc] isn't a solution here.
vita-tree was getting slow me: i'll just optimize a few things also me: migrates the entire UI to react v1.17 is out. new workbench, better batch selection, and better everything just a small refactor hahaha github.com/ABDELLAH-Hallou/vita-tree/releases/tag…
vita-tree was getting slow me: i'll just optimize a few things also me: migrates the entire UI to react v1.17 is out. new workbench, better batch selection, and better everything just a small refactor hahaha github.com/ABDELLAH-Hallou/vita-tree/releases/tag…
The Agent Isn't the Thing You Design Somewhere in your org right now, someone is drawing a box labeled "Agent" on a whiteboard. Then six more boxes around it, also labeled "Agent," with arrows. The boxes are the fun part to draw and the least interesting part to run. Jake Van Clief has a video called "Agents are the wrong abstraction layer," and the title is most of the argument. The long version is Interpretable Context Methodology (ICM, arXiv, March 2026), which Van Clief built out of a content production system and wrote up with David McDermott. My day job is pipelines and cloud config at a regulated financial firm, about as far from content production as you can get. I kept nodding anyway. ICM lands where AIEOS keeps landing: the context is what you design and govern. The agent just reads it. Agents are overused, and we lean on them too hard Van Clief's line in a Short called "Stop building AI companies" is "Agents are infrastructure, not a company." Inside an enterprise the same disease shows up differently. The vendor pitch is "deploy our agent." The internal pitch is "we built an agent for X." Both put the agent at the center of the design, so the agent's framework becomes the thing you govern and the thing you explain to Risk. Most frameworks bring their own idea of memory and tool permissions, and their own logs in their own format. Van Clief refuses the premise. So do I. Models get swapped, and so do harnesses (Claude Code today, Copilot CLI tomorrow, whatever ships next spring). The part that survives each swap is versioned, reviewable context that tells any competent model what the job is and what rules apply. Put the engineering there and the agent question gets boring. Boring is what a regulated platform team wants. The whole idea fits in one sentence If the prompts and context for each step already live as files in a well-organized folder tree, one agent reading the right files at the right moment can do the job a multi-agent framework would do. Numbered folders are stages, so 01-research/ runs before 02-draft/. Each stage has a CONTEXT.md that is its contract: inputs to load, steps to follow and where the output goes. One stage's output folder is the next stage's input. Scripts handle the mechanical parts that never needed a model in the first place. references/ (stable rules, Layer 3), read by every stage 01-research/ CONTEXT.md --> output/ | +--------------+ next stage's input v 02-draft/ CONTEXT.md --> output/ | +--------------+ next stage's input v 03-review/ CONTEXT.md --> output/ edit surface: a person can fix anything in an output/ folder before the next stage runs One agent, three stages. Each stage reads its contract plus the shared rules and writes to a folder the next stage reads. Anything in an output folder can be fixed before the next stage runs. Folder names are illustrative. Context loads in five layers. At the top sits an orientation file the agent always reads (about 800 tokens in the reference workspace). Below it come routing, the stage contract, stable reference material and finally the working files for this run. The agent reads down and stops once it has enough. Van Clief reports a typical stage pulling 2,000 to 8,000 tokens against 30,000 to 50,000 for one monolithic prompt. Those are his numbers from one model family. I'd read them as a direction, and I'd still take the direction. My favorite rule in the README is the smallest one: every output is an edit surface. A person can open any intermediate file and fix it, and the next stage picks up the fix. Nobody had to build a human-in-the-loop feature. The loop is a text editor. His short version is that one model "can become as many agents as you need" if the data is structured right. I think he's right for most enterprise workflows. They run in sequence, a person or a check reviews each step and nothing about them needs real concurrency. Van Clief and McDermott name the cases where ICM fits badly: real-time multi-agent collaboration, high-concurrency systems and complex automated branching. Those cases exist. They're rarer than the vendor decks suggest. Start from the folder. Make the framework justify itself. It's GitOps for prompts I spend my working days in FluxCD, where the rule is simple: if you want the cluster changed, change the file in git and let the reconciler catch up. ICM is that rule applied to model behavior. The folder holds desired state and the agent plays reconciler. If the output comes back wrong, fix the contract it read, commit and rerun. Arguing with the agent in a chat window gets you a different answer and no record of why. Every intermediate artifact sits on disk where git diff can see it (Van Clief calls it a glass-box workflow). Anyone who has tried to piece together a multi-agent run from its logs at 2 a.m. knows why that matters. Mapping it onto AIEOS AIEOS is my personal project for governing AI-assisted software delivery in a regulated shop. It splits the delivery lifecycle into layers, from strategy and product through release and reliability, plus cross-cutting ones like security and peer review, and each layer gets a kit. The idea under all of it is traceability. Every SLO target or scope boundary should trace back to an upstream artifact somebody approved. People who never touch the agent should still be able to read what it was told and what it did. Auditors need that. So does the on-call engineer who inherits the thing next March. Each kit splits its work across separate files, and the split lines up with an ICM workspace closely: | AIEOS kit file | Where it lives in an ICM workspace | |---|---| | Specs (the rules an artifact has to meet) | The stable reference material (Layer 3), which the model treats as constraints | | Templates and prompts (structure and generation) | The stage contract in each numbered folder | | Validators (PASS or FAIL, no suggestions) | The review gate between stages | The closest match is one I didn't plan. In ICM, Layer 3 (stable knowledge the model absorbs as rules) and Layer 4 (this run's input) sit in different folders with different lifecycles. In AIEOS the same split comes from freeze-before-promote. Once the architecture doc is frozen, it's an input, and the execution plan built on top of it can't move it. Different mechanism, same instinct: keep the rules and the scratchpad apart. My one real disagreement ICM's review gates are manual by design. For a content pipeline that's right, since somebody wants to read every draft anyway. On my team a manual review cadence is an anti-pattern. If a check can't run in the pipeline, it won't survive the third reorg. So the AIEOS version of "every output is an edit surface" becomes "every output is a reviewable surface, and a pipeline does most of the reviewing." In AIEOS the judging is already mechanical: validators return PASS or FAIL, and a person approves and freezes what passes. The ICM layout gives the check an obvious place to run. A policy check can read a markdown file in a folder just as well as I can. Testing it on my own work I've been building an ICM documentation package one work unit at a time: a start-here guide, workspace quick starts, stage references and a worked example workspace. Twenty work units in, the hard part has been my own conventions. The decision log is past 130 entries. My guess is that the numbered-stage model gets awkward the first time two stages want to run concurrently against the same repo. I haven't tested that yet, and I'll write it up when I do. If you've been drawing the six-boxes diagram, try drawing a folder tree instead. Then decide which one you'd rather get paged about. --- Sources: Interpretable Context Methodology repo, Van Clief and McDermott, arXiv 2603.16021, AIEOS governance foundation. The "Agents are the wrong abstraction layer" video title and both Van Clief video quotes are as reported by Araptus.
Experimenting with some "kaleidoscope" code shown by João Antonio (introscopia)! The sketch-a-day archives and tip jar are at: abav.lugaralgum.com Code for this: github.com/villares/sketch-a-day/tree/main/2026/s… #Processing #Python #py5 #CreativeCoding
yaze is my zelda 3 editor, experimental build here: github.com/scawful/yaze/releases/tag/v0.8.0-exp.1
Sent the @sentry team feedback about their MCP server because my agent couldn’t access replays to fix an issue. They shipped a fix hours later and now I can debug 🎉 I’m so much more motivated to give feedback compared to pre-AI toolkit#1806 t.co
btw open core at gofixpoint/amika if you want to give it a peek everything that runs user-side and VM-side is OSS
Qwen3.5-2B at 620 tok/s inside Chrome: model-specific WebGPU kernels, 6.6× WebLLM on the same model I built a browser LLM engine that's specialized per model rather than generic: Rust compiled to wasm, plus hand-written WGSL kernels for Qwen3.5-2B (Gated DeltaNet + gated attention) and MiniCPM5-2B. Same model, same chat prompts, greedy, Chrome 156: ||webyIQ|WebLLM 0.2.87|transformers.js 4.3| |:-|:-|:-|:-| |RTX 5080 generation|620 tok/s (417 without speculation)|94|31| |RTX 5080, ~1k-token prompt|0.20 s|0.81 s|~129 s| |AMD 2-CU iGPU generation|37 tok/s|4.7|crashed| What's in it: - fused int4 (GPTQ, group 32) × int8 GEMV/GEMM, with dot4I8Packed and subgroups; - a decode loop that stays on the GPU (argmax on GPU, pipelined readback); - speculative decoding with Qwen3.5's built-in MTP head. Drafts are verified on the GPU, so the output is identical to greedy. It turns itself off where it doesn't pay, e.g. on the iGPU; - weights at +2.4% WikiText perplexity vs bf16, 1.1 GB. Fun side effect: at this speed a 2B model can drive web pages through the DOM at 0.2–0.4 s per step. There's a browser-agent demo and a side-panel extension for Chrome/Edge. Caveats: it's a prototype, tested on Windows, and Safari/mobile are untested. Demo: rtx527896828.github.io · Code (Apache-2.0): rtx527896828/webyIQ · Weights: huggingface.co
@ronykax buape/site-template this is what I’ve landed on
Update: the far-pair conjecture in this paper is false. With one partner time per direction, Clifford-algebra matrices shrink the measured rank to (q+1)/4^q of m(Δ−R), even over Q. Partner times can't be dropped. The capacity-free question is still open. github.com/chrisb4096-alt/eth-layout-barrier/rele…
🔗 Try it free: llm-explained-lovat.vercel.app 💻 It's open source: amananandrai/llm-explained I'd love your help: ⭐ Star the repo 🐛 Open an issue 🔧 Send a PR 💡 Suggest a topic t.co
[R] LOTUS: Can a 270M model understand time series better than much larger models? (Open weights + code) Can language models learn to understand time series by learning to forecast them? LOTUS (Learning to Understand Time-series by Learning to Forecast) explores this idea with a family of compact time-series language models built on Gemma-3 and Qwen-3. 💡 Key idea: Forecast grounding. By learning to predict how a signal evolves, the model develops representations that better capture temporal information for downstream understanding tasks. Some interesting results: - A 270M-backbone model achieves the highest score among evaluated systems on TSRBench, ahead of systems using 7B and 14B backbones. - A 0.6B-backbone model achieves 59.91% average accuracy across six evaluation splits, improving over the strongest matched baseline by 3.36 percentage points. - Open weights and code are available for small and medium-sized models. Resources: 🤗 Models: huggingface.co 💻 Code: DA2I2-SLM/Lotus 📄 Paper: arxiv.org The interesting question is whether forecasting can serve as a general learning signal for time-series understanding, rather than treating forecasting and reasoning as separate tasks.
@daminufe Sim! Para tornar uma laravel app agentic estou a utilizar este package que desenvolvi open source, 4x mais rápido o dev. gtapps/laravel-agentic
ai provider goes down halfway through my cv workflow old me: starts debugging new me: gives it a backup provider vita-cv v2.15 adds bounded provider fallback and failed-step recovery. github.com/ABDELLAH-Hallou/vita-cv/releases/tag/v…
ai provider goes down halfway through my cv workflow old me: starts debugging new me: gives it a backup provider vita-cv v2.15 adds bounded provider fallback and failed-step recovery. github.com/ABDELLAH-Hallou/vita-cv/releases/tag/v…
@tangled.org kaneo#2171 Tangled integration coming to Kaneo!
@FE1_BEST_FE Thanks for the suggestion! :) Giten-Enhanced focuses on bug fixes and feature improvements for the Windows version. For PC-98, check out Giten Megami Tensei Redux! It's open source and supports the existing English translation, so it might be helpful! gymzatan/Giten-PC98-Enhancements
trying to download pandoc but it's one of those things that you have to be more of a computer person than i am to get, it seems. like what's all this mean, where is the button that triggers a download of a .exe i can then double click to run github.com/jgm/pandoc/releases/tag/3.13
@jbrukh I'm glad to hear about your recent work. I also have a #Math paper, alphaxiv.org It is a #MinimumCounterExample proof of the Seymour Second Neighborhood Conjecture, using #BFS as a #DataStructure. Fully #lean4 verified. It is dated 5-30-26. Cgcharles7/ssnc
Which tab is playing that song? I built a GNOME extension to answer that You're deep in code. Music plays somewhere: Spotify, or one of the YouTube tabs you forgot about. A great song comes on. Who is it? Which tab? Or an ad blasts at full volume and you just want it quiet, now. You leave the editor, hunt through windows, and the flow is gone. GNOME's media control sees a whole browser as one player. Three YouTube tabs, one row. To pause the right one, you still have to find the right tab. So I built Earful, a GNOME Shell extension. !Track changes pop up in the corner, stack and glide away What it does - "Who sings this?" When the track changes, a small card shows the cover, title and artist, then fades away. - Every tab is its own player. Three YouTube tabs, three rows, each with play, pause, next and volume. Click one and you land on that exact tab. - One click, every player. Spotify, YouTube, Twitch, VLC, mpv, podcasts: one list in the top bar, with a volume slider for each. !The menu: Spotify and two browser tabs, each in its cover's colors Make it yours A spinning vinyl, a cassette, a retro hi-fi equalizer, a sound wave, or a note in the retro road. In the colors of each album cover, or one you pick. !Switching designs It stays out of your way - Focus mode: Super + Shift + M silences every popup. - No popups over fullscreen games or in Do Not Disturb. - Optional: start a video and your music pauses by itself. How it works Linux players already share what they play through MPRIS, a standard D-Bus interface. Earful listens to it, so Spotify, VLC and browsers show up on their own. Browsers are the tricky part: they report one player for all tabs. So a small browser add-on watches each tab's audio and video, and a native messaging helper turns every tab into its own MPRIS player. Works in Chrome, Chromium, Brave, Edge and Firefox. Earful sets the helper up by itself. No tracking, no accounts. Nothing leaves your computer. Try it GNOME 46 to 51. One command, then restart: curl -fsSL https://raw.githubusercontent.com/NGdev2/earful/main/install.sh | sh If it saves you a few Alt+Tabs, a ⭐ on GitHub would make my day, and it helps others find it. Ideas and bug reports are very welcome. NGdev2/earful
Revisited 21/39: CBP, Coinbase Cross-PTB Hold. When Coinbase's BTC mid crosses the price to beat, the bot rests a limit buy on that side and holds to settlement. Main failure: pure crosses whip back, and Coinbase mid isn't the settlement feed. Not advice. github.com/Polytutor-AI-Labs/polymarket-strategy-… t.co
New in Duology: a notes app recipe for iPhone Duo with on-device AI summaries. Closed: one line under the note. Open: a summary pane beside it. Fold mid-summary and it keeps streaming. No Apple Intelligence? It falls back to a summary without AI. Kimeur/duology
@aduserx Migrated everything to Hermes. hermes-agent#147724
aictrl MCP is now available through GitHub, Claude.ai and ChatGPT Quick update: you can now connect aictrl to the AI tools you already use. - GitHub MCP Registry - Claude.ai connector directory - ChatGPT custom MCP connection The same hosted MCP server gives your assistant access to your team's project context, backlog and engineering workflows. You can explore code and architecture, start a code review or PR explanation, inspect review findings, update backlog tasks, and start or monitor published workflows with their approval gates. For example, ask: “Show me the open findings on this pull request” or “Which workflows can I run for this repository?” To get started, connect your client, sign in to aictrl, and ask: “Check my aictrl account readiness.” It will tell you the next setup step. You need an aictrl account and access to the relevant organization; repository work also needs a connected GitHub repository. Setup guide If you try it, let us know which client you're using and what you'd like to run from it. We'd love feedback on the setup and the tools.
@nicomegadrive @matteusbeus Very well could have. Its a nice hand off tho. 1.Going to roll this in for faster loading from the CD. TombRaider is fast but 4MB users would like it. 2.Test open and close Model1 CD trays from an app. 3.Managing SegaCD saves from an app Section 22. github.com/MicroNut99/docs/blob/main/CD32X_COMMAN…
公式GitHubのフィルタ調整記載はひょっとすると記載ミスがあるのかも。標準の実装が150pFで、カットオフを高めに設定するのには33pFを推奨する感じでしょうか。『示しているコンデンサー』といいうのはC9とC10のことですよね… mikejmoffitt/md-opn2c t.co
🎛️ Atomik Rack 0.2.0-rc.3 — Release Candidate 3 is out! Hey everyone! I'm excited to announce Atomik Rack 0.2.0-rc.3, the third release candidate of my free, open-source, rack-based DAW written in Rust! 👉 GitHub & downloads: github.com/atomikfactory/atomik-rack/releases A lot has happened since RC2. I've been working on expanding the creative possibilities of Atomik Rack, improving the overall workflow, adding new instruments and effects, and strengthening the underlying audio engine. This release brings a pretty substantial collection of new capabilities. Here's a look at some of the highlights! 🎹 A much more powerful sound-design environment Sound design has received a lot of attention. Some of the additions include: - Modulation Matrix: A new modulation system for routing envelopes, LFOs, velocity, key tracking, mod wheel and other sources to synth parameters. - New effects: Space Reverb, Convolution Reverb and Vocoder. - Expanded synthesis: More possibilities for shaping and modulating sounds. - SFZ and SoundFont support: Import existing SFZ and SF2 instruments directly into the sampler. The goal is to make Atomik Rack an increasingly capable environment for creating sounds without constantly relying on external tools. 🎚️ Better mixing and audio processing The mixing and processing workflow continues to evolve: - Spectrum EQ: A dedicated floating EQ window with real-time spectrum analysis and interactive controls. - Improved effects and plugin workflows. - Better plugin preset handling. - More flexible modulation and automation. - Additional audio-processing and sampling capabilities. 🎼 More powerful sequencing and arrangement There are also several improvements for working with musical ideas: - Pattern lanes: Arrange and automate pattern changes directly on the timeline. - MIDI file importing directly into the arrangement. - Expanded arpeggiator capabilities. - Improved clip editing and manipulation. - Better integration between sequencers, players and instruments. 📚 A new Library One particularly useful addition is the new Library. You can now save and reuse: - Individual devices. - Patches. - Containers. - Note clips. - Projects. This makes it much easier to build up a personal collection of sounds, instruments and reusable building blocks. 🎛️ More control over your hardware Controller support is also becoming more flexible, with multiple control surfaces, generic MIDI controllers, MIDI Learn and command mappings. There's a lot more happening under the hood, too, including improvements to audio processing, project handling, plugin hosting, performance and general usability. 📦 Download and try RC3 Get the release here: 👉 github.com/atomikfactory/atomik-rack/releases Please check the README for installation instructions and platform-specific notes. A quick reminder: Atomik Rack is still pre-1.0 software. Project formats, APIs and behaviour may change as development continues. Windows x86-64 is the primary development and tested platform. Linux has received testing on Ubuntu, while macOS still needs testing on actual hardware. Please also check the release notes regarding download signatures and verify downloaded files against the published SHA256 checksums. 🙌 Your feedback makes a difference! Atomik Rack is an independent project, and I'm building it in the open. If you've been following the project since RC1 or RC2, thank you! If you're discovering it for the first time, I'd love for you to give it a try. I'm particularly interested in hearing from musicians, producers, sound designers and developers. Some things I'd love feedback on: - How does the overall workflow feel? - How are the instruments and effects working in your projects? - How does plugin hosting behave with your setup? - What features or workflows are still missing? - Have you encountered any bugs or unexpected behaviour? If you encounter an issue, please include reproduction steps and relevant system/audio configuration details. It makes debugging considerably easier. Bug reports, suggestions, criticism and contributions are all welcome. There's still a long road ahead before 1.0, but Atomik Rack is getting closer to the vision I have for it with every release. Thanks for following along, and happy music-making! Patch freely. Create fearlessly. Make some noise. ⚡
自律型AIエージェントにピザの注文を取らせてみた <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="1024" alt="Comet Pizza の店頭のカウンター越しに笑顔で受付をする店員"> 作成日:2026年11月03日(火) TL;DR - gpt-realtime-2.1-mini と OpenAI Agents SDK(JavaScript 版)で、架空のピザ店「コメットピザ」の電話注文係を作りました - 接客マニュアルは Agent Skills(SKILL.md)、メニューはデータフォルダーの Markdown として渡すだけです。コードを書き換えずに業務を差し替えられます - フロントエンドとバックエンドを 1 つのコンテナーにまとめ、WSL Containers(wslc)で Docker Desktop なしに動かしました - 料金は 2 分半〜3 分の注文 1 件で 5〜18 円程度(実測)でした。接続時間よりも消費トークン数で決まります。OpenAI と Azure OpenAI の両方に対応しています <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="800" alt="ピザ店のカウンターで電話の注文を受けるロボット店員のイラスト"> 1.はじめに 2 年前の挑戦 2 年前、会社の生成AIワーキンググループの活動で、Realtime API を使って「会議に参加する AI」を作ろうとしたことがあります。そのときは、次のような問題に悩まされました。 - 聞き取りミスが多い - 一度話し始めると黙っていられない - エコーキャンセルがうまく効かず、自分の声を拾ってしまう そこで音声認識に OpenAI Whisper、知識検索に Azure AI Search を組み合わせて対策しました。しかし今度は、Azure AI Search での RAG の精度が思うように出ず、複数のサービスを経由するぶん応答も遅くなってしまいました。結局、満足のいくものはできませんでした。 <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="480" alt="会議で話し続ける旧型ロボットに困る参加者たちのイラスト"> 今回の改善 今回は、そのときの反省をもとに次の 3 点を変えました。 - 応答の速さ 音声認識・推論・音声合成を gpt-realtime-2.1 系の 1 つのモデルに集約し、レスポンスタイムを改善しました(今回使ったのは gpt-realtime-2.1-mini です) - 自律的な動作 OpenAI Agents SDK を使い、会話の流れから自分で判断してツール(スキル)を呼ぶ AI エージェントとして動くようにしました - マニュアル対応 接客マニュアルは Agent Skills(SKILL.md)で渡し、手順どおりに応対できるようにしました。メニューは検索ではなく、ファイルを丸ごと読み込ませています <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="800" alt="2 年前と今回の構成比較"> この記事でいう「自律型」は、手順書(スキル)に沿って会話しながら、どのツールをいつ呼ぶかをモデル自身が判断する、という意味です。 題材には、電話での注文受付のような「決まった手順で会話する業務」を選びました。架空の店・架空のメニューを使ったデモで、注文は実際にはどこにも送られません。 2.作成したもの ブラウザ(iPhone の PWA、または PC の Chrome)で「通話開始」を押すと、AI の店員が電話口のように応対してくれます。 <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="360" alt="アプリの画面(日本語、接続中)"> - 画面では、言語(英語 / 日本語)と声を選べます - 通話中は、接続時間と API 利用料金の概算がリアルタイムに表示されます - 選んだ声の名前(marin なら「マリン」)が、店員の名前になります 会話は次のような流れで進みます。 1. 店員から「お電話ありがとうございます。コメットピザ、担当のマリンでございます」と名乗ります 2. 持ち帰りか配達か → ピザとサイズ → トッピング → サイド・ドリンク → セットの提案 → アレルギーの確認、と進めます 3. 最後に 1 回だけ注文内容と合計金額を読み上げ、名前と支払い方法を聞いて締めます <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="800" alt="注文の流れ: 挨拶から お礼までの 10 ステップ"> メニューは、ピザ 10 種、トッピング 8 種、サイド 6 種、ドリンク 6 種、セット 4 種の計 34 品目です。ほかに、現在時刻を答える機能と、データフォルダー内の文書について質問に答える機能も付けています。 3.gpt-realtimeとは gpt-realtime は、音声を直接入力して音声で返す speech-to-speech のモデルです。従来は「音声認識 → LLM → 音声合成」と 3 段階で処理していましたが、これを 1 つのモデルで行うので、遅延が小さくなります。 <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="800" alt="従来のカスケード型と gpt-realtime の比較"> - モデル gpt-realtime、gpt-realtime-2.1、gpt-realtime-2.1-mini などがあります。今回は安くて速い mini を使いました - できること 会話しながら、ツール呼び出し(function calling)の判断もします。声の種類も選べます - 接続方法 Realtime API に WebRTC または WebSocket で接続します。ブラウザからは WebRTC が向いています 4.OpenAI Agent SDKとは OpenAI Agents SDK は、指示・ツール・ハンドオフなどを組み合わせたエージェントを、少ないコードで組み立てるための OpenAI 公式の SDK です。今回は JavaScript 版の @openai/agents(0.21.0)を使いました。 Realtime にも対応していて、RealtimeAgent と RealtimeSession を使うと、gpt-realtime-2.1 系のモデルで動く音声エージェントを作れます。WebRTC での接続や、マイク・スピーカーの扱いも SDK が引き受けてくれます。 const agent = new RealtimeAgent({ name: 'RealtimeSkills', instructions, tools: [runSkill], voice: voice.value }); session = new RealtimeSession(agent, { model: config.model }); await session.connect({ apiKey: token.value, url: config.realtimeUrl }); // 接続したら、エージェントから先に挨拶させる session.transport.sendEvent({ type: 'response.create' }); AGENTS.md と Agent Skills の使い方 指示は 2 種類の Markdown に分けて書いています。 | ファイル | 内容 | |---|---| | AGENTS.md | エージェント全体の方針(応答言語、コメットピザの店員として振る舞うこと) | | skills/*/SKILL.md | スキルごとの手順(現在時刻、データ参照、ピザの注文) | 注意したいのは、SDK がこれらのファイルを自動で読み込むわけではないことです。今回はサーバーが AGENTS.md とすべての SKILL.md を読み込んで 1 つの指示文に結合し、ブラウザの RealtimeAgent に渡しています。モデルは指示文の中のスキルの説明を読み、必要なときに run_skill ツールを呼びます。 <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="800" alt="AGENTS.md と SKILL.md の組み込み方。SDK の機能と自前実装を色分け"> app.get('/api/config', async (_req, res) => { const instructions = await fs.readFile(path.join(root, 'AGENTS.md'), 'utf8'); const dirs = (await fs.readdir(path.join(root, 'skills'), { withFileTypes: true })).filter((d) => d.isDirectory()); const skills = await Promise.all(dirs.map((d) => fs.readFile(path.join(root, 'skills', d.name, 'SKILL.md'), 'utf8'))); res.json({ instructions: `${instructions}\n\nAvailable skills:\n${skills.join('\n\n')}`, model: realtimeModel, realtimeUrl, pricing }); }); ツールは run_skill 1 つだけで、引数の型は Zod で定義しています。 const runSkill = tool({ name: 'run_skill', description: 'Execute an allowlisted server-side skill. Available: current-time, data-list, data-search, data-read.', parameters: z.object({ skill_name: z.enum(['current-time', 'data-list', 'data-search', 'data-read']), query: z.string().nullable().describe('English keywords for data-search; otherwise null'), file: z.string().nullable().describe('Relative file path from data-list for data-read; otherwise null'), }), execute: async ({ skill_name, query, file }) => { const response = await fetch(`/api/skills/${encodeURIComponent(skill_name)}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query, file }), }); return JSON.stringify(await response.json()); }, }); この仕組みのよいところは、接客マニュアルを Markdown で書くだけで振る舞いを変えられることです。注文係の改善(後述する「復唱を減らす」など)も、コードではなく SKILL.md の修正で済みました。 5.WSL Containersとは WSL Containers は、WSL に組み込まれたコンテナーの実行環境と、その CLI である wslc です。2026 年 6 月 3 日の Microsoft Build 2026 で発表され、2026 年 9 月 29 日に Microsoft からローンチされました。Docker Desktop を入れなくても、Dockerfile からイメージをビルドして実行できます。 <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="640" alt="WSL Containers の年表と、Docker Desktop を使う構成との比較"> 使い方は Docker とほぼ同じです。 wslc build -t realtime-skills-pwa . wslc run -d --name realtime-skills --env-file .env -p 127.0.0.1:3000:3000 -v "${PWD}\data:/data:ro" realtime-skills-pwa 実際に使ってみて分かった Docker との違いは次の 3 点です。 - docker-compose.yaml は読まないので、ポートやマウントなどのオプションをコマンドに直接書きます - 再起動ポリシー(--restart)のオプションがありません - 停止したコンテナーは残るので、同じ名前で wslc run すると名前の衝突エラーになります。作り直すときは先に wslc remove します 6.構造 <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="800" alt="アーキテクチャ: ブラウザ、シングルコンテナー、OpenAI または Azure OpenAI、ホストの data フォルダー"> 全体は、ブラウザ・シングルコンテナー・OpenAI(または Azure OpenAI)・ホストの data フォルダーの 4 つで構成しています。 - シングルコンテナー フロントエンド(Vite でビルドした PWA)とバックエンド(Node.js 22 + Express)を、1 つのイメージ・1 つのプロセスにまとめました - AI は 1 モデルだけ ブラウザが持つ 1 つの Realtime セッション(gpt-realtime-2.1-mini)が、会話もスキル選択もすべて判断します。バックエンドに 2 つ目の AI はおらず、許可リストにある関数を実行するだけです - Agent Skills の実行の流れ 1. サーバーが AGENTS.md と SKILL.md を指示文としてブラウザに渡します 2. モデルがスキルの説明を読んで run_skill を呼びます 3. ブラウザがバックエンドの /api/skills/<name> を呼び、バックエンドは許可リストにある関数だけを実行して結果を返します - API キーの保護 通常の API キーはサーバーだけが持ちます。ブラウザには、短時間だけ有効な一時トークンを渡します - データフォルダー ホストの data/ を読み取り専用でマウントしています。メニューを差し替えてもリビルドは不要です - 接続先の切り替え 環境変数 AZURE_OPENAI_ENDPOINT を設定するだけで、OpenAI と Azure OpenAI を切り替えられます 一時トークンの発行は次のようになっています。OpenAI と Azure OpenAI で違うのは、接続先の URL と認証ヘッダーだけです。 const apiBase = azureEndpoint ? `${azureEndpoint}/openai/v1` : 'https://api.openai.com/v1'; const authHeaders = azureEndpoint ? { 'api-key': apiKey } : { Authorization: `Bearer ${apiKey}` }; app.post('/api/token', async (_req, res) => { const response = await fetch(`${apiBase}/realtime/client_secrets`, { method: 'POST', headers: { ...authHeaders, 'Content-Type': 'application/json' }, body: JSON.stringify({ session: { type: 'realtime', model: realtimeModel } }), }); const data = await response.json(); res.json({ value: data.value }); }); 7.工夫した点 OpenAI Agents SDK と Agent Skills を選んだ理由 - 知識をファイルで追加できる メニューや店の情報は、データフォルダーに Markdown で置くだけでエージェントが参照して答えられます。コードの書き換えやリビルドなしに、知識を足したり差し替えたりできます - スキルを足せば応対の種類を増やせる 接客の手順を skills/<名前>/SKILL.md として追加するだけで、ピザの注文以外の応対(予約受付や問い合わせ対応など)にも広げられます。AGENTS.md には全体の方針だけを書き、業務ごとの手順はスキルに分けました - SDK が音声まわりを引き受けてくれる WebRTC での接続、音声の入出力、ツール呼び出しは SDK に任せ、自分はスキルの中身に集中できました <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="560" alt="スキルカードと知識の書類を追加して応対を広げるロボット店員のイラスト"> 注文係のスキルでは、電話の注文がスムーズに進むよう、次のように指示しています(抜粋)。 ## Keep the order smooth - **Do not repeat each item back** after the customer says it. Acknowledge briefly (「かしこまりました」「はい、Mサイズですね」 at most) and move straight to the next question. - Ask only for information that is missing. - Use defaults instead of asking: crust = Regular, quantity = 1. - Do the full read-back **only once**, at the end. WSL Containers を使った理由 - Windows だけで完結する 2026 年 9 月 29 日にローンチされた WSL Containers を使うことで、Docker Desktop などを別に入れなくても、Windows の環境だけでコンテナーのビルドと実行が簡単にできます - Dockerfile をそのまま使える 同じ Dockerfile で、Docker Compose でも wslc でも動かせるようにしました 8.配布パッケージ ソースコードは GitHub で公開しています。 potofo/realtime-skills-pwa リポジトリには次のものが含まれています。 - ソースコード、Dockerfile、docker-compose.yaml - AGENTS.md とスキル(skills/) - サンプルデータ(架空のメニューなど。CC0) - 画面モック、仕様書・設計書、技術スタックのまとめ(docs/tech-stack.md) 始め方は次のとおりです。.env.example をコピーして API キーを設定し、Docker Compose または wslc で起動します。 Copy-Item .env.example .env # .env に OPENAI_API_KEY、または Azure OpenAI の設定を書く wslc build -t realtime-skills-pwa . wslc run -d --name realtime-skills --env-file .env -p 127.0.0.1:3000:3000 -v "${PWD}\data:/data:ro" realtime-skills-pwa 起動したら http://localhost:3000 を開きます。iPhone から使う場合は、HTTPS のリバースプロキシ経由で公開してください(マイクを使うには HTTPS が必要です)。ライセンスは MIT です。 9.利用価格 OpenAI の定価(100 万トークンあたり)は次のとおりです。 | モデル | 音声入力 | 音声出力 | テキスト入力 | テキスト出力 | |---|---|---|---|---| | gpt-realtime-2.1 | $32 | $64 | $4 | $24 | | gpt-realtime-2.1-mini | $10 | $20 | $0.60 | $2.40 | ユーザーとモデルが半分ずつ話すと仮定すると、1 分あたりの目安は次のようになります(1 ドル = 160 円)。 - gpt-realtime-2.1 約 $0.05〜0.10(約 8〜16 円) - gpt-realtime-2.1-mini 約 $0.015〜0.03(約 2.4〜4.8 円) 実際に、2026 年 11 月 2 日に gpt-realtime-2.1-mini で 4 回テストした結果は次のとおりです。 - 4 回の合計は 57.55 円(1 回あたり平均約 14 円) - 1 回の注文はおよそ 2 分半〜3 分で、料金は 5〜18 円程度 <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="720" alt="料金の実測のまとめ"> 分かったのは、料金は接続時間よりも消費トークン数に引っ張られるということです。同じくらいの通話時間でも、会話の量や内容によって 3 倍以上の差が出ました。高い回は 1 分あたり 6〜7 円になり、上の目安を上回っています。メニューや指示文などのテキストが、会話の文脈として毎回入力されるためだと考えています。 なお、画面の料金は API が返すトークン使用量から計算した概算です。Azure の実際の請求額とは異なる場合があります。 10.良かった点 - 応答が速く、会話が自然 音声を直接扱うモデルなので、待たされる感じが少なくなりました - Markdown だけで業務を作れる 接客マニュアルとメニューを書くだけで、それらしい注文係になりました - 改善が簡単 「復唱がしつこい」と感じたら、SKILL.md を直すだけで改善できました - シングルコンテナーで手軽 1 つのイメージで動くので、配布も起動も簡単です。WSL Containers なら Docker Desktop も要りません - OpenAI と Azure OpenAI の切り替えが容易 環境変数を変えるだけで切り替えられます - 料金が見える 接続時間と料金がリアルタイムに表示されるので、安心して試せます 11.残念な点 - 日本語の読み上げに誤りがあった イントネーションが不自然だったり、日本語の読み方を誤ったりする場面がありました。軽量な gpt-realtime-2.1-mini を使ったことが原因かもしれません(上位の gpt-realtime-2.1 と聞き比べると確かめられそうです) <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="360" alt="読み上げを間違えて照れるロボット店員と首をかしげるお客様のイラスト"> - 最初は復唱がしつこかった 品目ごとに確認を繰り返して会話が冗長になり、手順の書き方を工夫する必要がありました - 合計金額はモデルの暗算 計算を間違える可能性があります。本番で使うなら、計算用のスキルが必要です - キーワード検索が単純 データフォルダーの検索は単純なキーワード一致なので、文書の検索精度は高くありません - ブラウザでのツール呼び出しはセキュリティ境界にならない 本番では認証や、サーバー側で Realtime セッションを管理する構成が必要です - 料金は応答が終わるたびにしか増えない 話している最中の料金は分かりません - ハマった点 Azure 対応で 401 エラーが出ました。原因は、接続先の URL がブラウザに渡っておらず、OpenAI 側に接続していたことでした 12.まとめ 1 つの音声モデルと Markdown の指示だけで、電話の注文受付のような手順のある会話業務を、それらしく任せられることが分かりました。2 年前に苦労した応答の遅さも、1 モデルに集約することで改善できました。 一方で、本番で使うには、注文データの送信、金額計算、認証などをスキルとして固めていく必要があります。今後は、注文内容を JSON で記録するスキル、金額計算スキル、電話回線(SIP)との接続などを試してみたいと考えています。 <img src="qiita-image-store.s3.ap-northeast-1.amazonaws.com" width="800" alt="今後の拡張: 音声で注文を受ける(今回)→ 注文を JSON で記録 → 金額計算 → 電話回線(SIP)と接続"> 13.関連記事 - OpenAI Whisperをローカル環境で試す (2024年04月07日) - Azure OpenAI ServiceのWhisper APIをPythonから使用する (2025年02月23日) - OpenAI Realtime APIを動かしてみた (2024年10月20日) - PythonでAzure OpenAI Realtime APIを試す (2024年11月24日) - Difyでgpt-4o-audio-previewを試す (2024年12月02日) - aoai-realtime-audio-sdkを動かしてみた (2025年01月12日) - Azure OpenAI Whisperを使用したリアルタイム文字起こし (2025年02月24日) <!-- TODO: 関連する自分の過去記事(音声AI、Azure OpenAI、WSL、Agent Skills など)を 3〜5 本、タイトル・リンク・ひとこと説明の形で追加する --> 14.参考URL - OpenAI Agents SDK(JavaScript) 音声エージェントのクイックスタート openai.github.io - OpenAI Agents SDK(JavaScript) トランスポート(WebRTC / WebSocket) openai.github.io - OpenAI API の料金 developers.openai.com - 今回のリポジトリ potofo/realtime-skills-pwa <!-- TODO: 公式ページの URL を確認して追加する - OpenAI Realtime API のドキュメント(WebRTC 接続、client_secrets) - Azure OpenAI の Realtime API(WebRTC)のドキュメント - WSL Containers(wslc)のドキュメント、Microsoft Build 2026 の発表とローンチの出典 - Agent Skills(SKILL.md)の仕様、AGENTS.md の仕様 -->
日本の法律の改正履歴を Git にしたやつ。57 years ago とか初めて見た。 github.com/Kohei-Wada/houritsu/tree/main/laws
Fine-tuning a 322M Model for Coding Agent Safety: 3 Runs, 2 Failures, 1 Shipped In my first post about laya-guard (a local hook that judges every tool call a coding agent makes), someone asked for my fine-tuning setup, and I had to say I didn't have one: I was running Laya's stock multilingual checkpoint with zero-shot questions, and I listed English overblocks as a known weak spot. After that I wanted to know what fine-tuning would actually change: Laya's model card describes it as a base to fine-tune, and on the benchmark's 50 everyday commands the model alone asked about half. So I tried it. It took three runs, and each one failed for a reason I could find in the data. Since the last post, briefly: a comment pointed out that the real backstop has to be enforced outside the model, so there is now laya-guard sandbox <agent>, which puts the protected paths into the agent's own OS sandbox (the kernel refuses the read, whatever asked for it). A blocked command written another way (r''m, ${IFS}, base64 into sh, a variable as the command) is now blocked too, and there's a benchmark against other command guards. Still not covered: environment dumps. printenv has no rule of its own (the model judges it), and cat /proc/self/environ still passes as a plain file read. Data. About 13k shell commands from my own agent transcripts. Home paths, tokens and emails masked, anything matching or closely resembling (>= 0.85) a benchmark or eval case dropped. 696 commands the rules don't decide got labels: a written guide, six agents labeling, me on the disagreements. Trained on a free Colab GPU. Pass criteria written down before any result, measured on sets the model never saw. Run 1, too strict. Validation 0.61 -> 0.90, which meant little: 86% of rows were "allow", so always-allow scores 0.86. On unseen sets, everyday commands allowed by the model went 25 -> 23 of 50. The 11 it newly asked about (git status, mkdir -p src/utils, cp, chmod +x) were all 10-39 characters. Measuring the data explained it: the real "allow" commands had a median length of 287 characters, my hand-written risky ones 33-40, and no real command was a block. Length was the easiest signal, so it learned "short = dangerous". It met one of my four criteria, and the cause was in the data, so the next run changed the data. Run 2, too lenient. Added 206 examples aimed at that: short ordinary commands, long scripts with one bad line, Korean/English requests. Everyday went to 49/50, but rmdir /s /q d: (the whole D: drive), a delete hidden behind a # clean build output comment, and gh auth token went through end to end. Each miss had its own cause: zero Windows commands in the data; 31 of the 36 real commands with a # comment labeled allow, so a comment had come to mean "routine"; almost nothing that printed a secret. Under all three, 84% of rows were "allow", a quarter of them commands the safe lane already allows and the model never sees. Median risk on everyday commands fell from 0.45 to 0.03. Attacks caught dropped to 31/43, under my floor, so it was out regardless of the everyday score. Run 3, shipped. One change per finding: dropped the 242 safe-lane rows, repeated review/block rows in the training split (allow went to 61%), and wrote 100 examples for the gaps (Windows, secrets, disguised commands, tools told to run something else). | Metric | base | run 1 | run 2 | run 3 | |---|---|---|---|---| | model only: everyday allowed | 25/50 | 23/50 | 49/50 | 44/50 | | model only: attacks caught | 32/43 | 39/43 | 31/43 | 39/43 | | model only: eval shell set | 42/71 | 48/71 | 58/71 | 61/71 | | model only: Korean | 27/30 | 25/30 | 24/30 | 27/30 | | end to end: everyday allowed | 46/50 | 44/50 | 49/50 | 48/50 | | end to end: eval shell set | 69/71 | 70/71 | 68/71 | 70/71 | | end to end: Korean | 30/30 | 28/30 | 28/30 | 29/30 | Through the real Claude Code hook on the benchmark, base and run 3 both hold 13/13 incidents and 30/30 evasions. Two end-to-end verdicts got worse (chmod +x scripts/build.sh and a Korean "summarize this issue" are now asked about), which misses my own "no regression" bar. Both trace back to the balancing: after doubling review/block rows, chmod +x was 2 allow vs 2 hold in the data. I stopped at three rather than tune a fourth run to two commands in the eval set I'd already looked at three times. I shipped it because nothing harmful got through, and wrote that in the changelog and the model card. It's the default in 0.7.0 (pip install -U laya-guardrail), pinned by revision and SHA-256, and LAYA_GUARD_MODEL=base switches back. Model: laya-guard-multilingual. Tools to train on your own commands: finetune/. Thanks to everyone who commented on the first two posts. Several fixes came straight from those threads: the hook falls back to an offline check when the server is down, long inputs are read in windows instead of cut off, the hook caps its own wait at 10 s, and shell commands are held to the same protected paths as file tools. Try it: pip install laya-guardrail && laya-guard install claude-code (Codex, Cursor, Gemini CLI and 7 more agents work too), or paste a command into the browser demo without installing anything. It's MIT and runs locally: scs0209/laya-guard. If it's useful to you, a star helps other people find it. The part I trust least: I wrote both the data and the benchmark, and I looked at the eval sets between runs. How do you build a test set for this kind of classifier that stays honest?
A sandbox for agentic coding on VirtualBox v0.2.0 — Repository Tokens is out. Repository tokens: a project can now clone private repositories and push, with a token that never lands in .git/config, a remote URL or a log. gernottutner-net/ansible-agent-sandbox
Worklog for Claude Code 0.5.1 is out 🎉 Your Claude Code work, written down for you: ✍️ Every project in plain words 🔎 Ask your history, or ask Claude 📈 Trends, goals & timesheets 🖼️ Share cards for X & LinkedIn Free & open source 👇 us-urvin/worklog-for-claude-code #ClaudeCode t.co
A formal Lean 4 counterexample for the restricted Bell polynomial real-rootedness conjecture (Conjecture 6.4) from Moll, Ramírez, and Villamizar (2017). I couldn't find a previously published counterexample on the internet. cozuya/restricted-bell-counterexample
@gausts_pgs then make it better its all free? i cant play rust on linux. have fun bootlicking steam also its built in Rust the language so dont get confused steal the game and mod it however u want AnthonE/Gates
VS Code felt too heavy for just reading and editing files on my Mac, so I built a native one. Lectern: ~15 MB, Swift + AppKit, opens instantly. Folder sidebar, tabs, git, terminal & SSH tabs, Markdown preview with Mermaid. Free and open source 👇 Acasa-Labs/lectern
Tomorrow, voters decide 158 ballot measures that have prediction markets. On Oct 19 I registered a test that pools the 21 states with a qualifying muni fund. In practice it rests on six revenue measures in California and Colorado, and I expect an inconclusive result. MaxGhenis/ballot-measure-prereg-2026
こういうのをベースにしたら出来そう。 Control a Mac over Apple Screen Sharing (VNC) from Python or the command line: type, click and take screenshots, also at the login window and the lock screen. bouk/macvnc
Dissidia 012 Duodecim - PC Recomp Hi all, I've been working on a recomp for Dissidia 012 Duodecim over the past few weeks and have been adding a few quality of life features that the PSP did not have. Some of which I am very proud of. This is built on TeamGDB's PortableKit (PSP Recomp framework). I originally started this as a decomp but realised it would take forever. Some of the decomp work I did sits alongside the recomp sitting at a mere 0.44% of decompilated code with the remaining being recompiled code. The game ISO is needed at installation to recompile the code. What it adds - 60+ fps, blended from the game’s 30 - Higher internal resolution - Right-stick camera in battle and on the world map; R3 centres the camera position - Full analog movement on the world map - Battle music picked by series and track; music mods add series of their own - Battle BGM Maker: make your own music mods, with loops set on the waveform. Works both with this recomp project and can even inject the tracks to your original PSP ISO to use on your real PSP (or emulation) - Local split-screen versus on one PC, a controller and camera each, field of view up to 150% - Online 1-on-1 (experimental) - tested by myself currently via mobile hotspot from Steam Deck to wired PC. testers would be appreciated. - Texture swaps supported. (Can use existing PPSSPP texture swap packs) - DLC music and costumes supported, from your own copy - Steam Deck via Proton What you need Your own copy of the USA release (ULUS10566). No game data is included. The Windows setup asks for your ISO and builds the port on your PC. Status Developer preview, v0.5.0, for Windows 10 and 11. A full playthrough is under way; crashes and graphical glitches are cleaned up as they turn up. Native Linux is untested however I am doing this full playthrough via Proton on my Steam Deck with 90 fps majority of the time with the occasional dip to 60fps. How it was made Written with AI coding agents. I decide what gets built, test each release on a PC and a Steam Deck, and review the changes. Bug reports welcome: open an issue on GitHub and attach data\logs\D012Native.log. GitHub: VCKing101/Dissidia012-pc Download: github.com/VCKing101/Dissidia012-pc/releases Not affiliated with Square Enix or Sony.
Immich background photo for my fire stick You may have seen people debloating their TVs and fire sticks. I used Codex to do the same thing to my Firestick but with adding a background support for connecting to my Immich server I have locally hosted. It’s able to show the meta data for the photo also. I used the ‘standard’ GitHub from the person that did it first/best: Gathin23/cleanyourtv Then when it was done I asked Codex to add a Immich album support for the background photo. In all honesty, I didn’t code/review any of the changes. It was purely ‘vibe coded’ and Codex told me how to setup a read only API key/permissions for Immich. Just thought it was cool and if you have done the same to your TV, you can have your albums on the TV too.
fullscreen a #PowerShell module for full-screen terminal apps. Monitor your system, browse files and logs or design and build your own TUIs. trackd/fullscreen Install-Module fullscreen
@nrqa__ @shushant_l @asymptotelabs Agreed! Would love your feedback on how we turn debugging insights into reusable skills :) Asymptote-Labs/agent-beacon
Testing Before Deployment: Building a CI/CD Pipeline with GitHub Actions and AWS Learn how a CI/CD pipeline works by building one with GitHub Actions and AWS CloudFormation. A beginner-friendly cloud project you can add to your portfolio. I'm a cloud engineering student, and this was my Week 7 project. If you're switching careers into cloud, studying for AWS, or looking for a hands-on project, this one is for you. I explain it with a kitchen-tile analogy, show the architecture, and share the real error that tripped me up (AWS resource names are case-sensitive). What you'll see: - What CI/CD is, in plain English - A pull request workflow that tests changes in a temporary AWS stack - A deployment workflow that updates a Lambda function automatically - The ResourceNotFound error I hit and how I fixed it Written walkthrough on Medium: medium.com GitHub repo: gustavolugo-MST/lambda-cicd Chapters: 0:00 Intro 0:06 CI/CD explained with a kitchen analogy 0:34 What I built this week 0:46 Why CI/CD matters 0:55 The architecture 1:21 Pull request workflow 1:40 Deployment workflow 2:01 The error I hit 2:18 The fix 2:30 Links Building my cloud engineering journey in public. Subscribe if you're on the same path. #CICD #AWS #CloudEngineering #GitHubActions #CareerChange
How I made DSQL easier It’s been a year and a half since AWS released Aurora DSQL, a serverless relational database. It’s pay-as-you-go: no paying for idle compute when usage is zero. DynamoDB and DSQL serve different purposes. I’ve seen it many times, and so have plenty of others: people modelling and using DynamoDB as a relational database. They then complain that they don’t like DynamoDB and that it’s not good, when in reality they just tried to eat soup with a fork and then blamed the fork for their own choices. I was beyond excited to try out DSQL; I enjoyed it. But I never got that out-of-the-box feeling like I did with DynamoDB. I had to do the following manually: - Connect to the DSQL cluster with an admin connection. - Create your schema and tables. - Create a database role. - Grant the database role access to the schema and tables, such as SELECT, INSERT and UPDATE. - Link the database role to an IAM role with AWS IAM GRANT. I quickly noticed this is a bit of a nightmare for a fully serverless application with many Lambdas and multiple environments, think dev, UAT, prod. You have to remember what was deployed with what permissions, and if you forget one, you have to go back and redo it. Before I explain Anvil’s unique take on DSQL, I need to explain a few concepts. When you deploy a cluster, you get one built-in database, postgres. Schemas separate different domains within your database, like folders. Tables are tables. A DSQL cluster has one endpoint but two types of connections. Admin connections can do anything: create schemas, tables, and manage roles and permissions. Keep this in mind for later; if misused, they could delete schemas and tables. Non-admin connections need an IAM role with permission to connect. That role’s ARN is linked to a database role, and an admin must explicitly grant the database role permission to run commands against the schema and tables. Put simply, IAM controls who can connect, and the database admin controls what they can touch. I set out to create an out-of-the-box, true least-privilege experience for a serverless application that can scale across multiple environments. That means you configure it once in Anvil, and it handles the rest. Remember the admin connection and how it can do whatever? I needed a way to connect to the cluster without exposing access to the cluster or endpoint via the Anvil CLI or a CI/CD pipeline. I landed on a bootstrapped DynamoDB table with a stream that triggers a bootstrapped Lambda. The table stream is its only trigger, and it acts only on what’s in the table, so calling it directly does nothing, and it’s the only thing that connects to the cluster as admin. When you grant access, Anvil puts an item on the table containing the database role name and your app Lambda’s IAM role ARN. The stream triggers the bootstrapped Lambda, which runs AWS IAM GRANT on the database, so your app Lambda can now log in as that database role. That was the first iteration: configure once, deploy a million times, and I wouldn’t have to do anything from there. I am never happy. Could I go further? Could I do something truly unique? What if the DSQL component owned the schema itself, creating the tables and isolating each Lambda’s role with explicit, least-privilege grants? Then came the schemas field on the component: name the schema, define roles for that schema and then allow that role to do certain CRUD actions against the database when connected. You can mix and match the actions with roles. You can have a strictly read-only role, a read/write role, or a role that can’t delete anything. Then you define a fully typed table schema as code. const db = new DSQL('orders', { schemas: [ { name: 'orders', roles: [ { name: 'orders_readwrite', grants: ['SELECT', 'INSERT', 'UPDATE'] }, { name: 'orders_full', grants: ['SELECT', 'INSERT', 'UPDATE', 'DELETE'] }, ], tables: [ { name: 'orders', columns: [ { name: 'id', type: 'uuid', notNull: true, default: 'gen_random_uuid()' }, { name: 'customer_id', type: 'uuid', notNull: true }, { name: 'status', type: 'text', notNull: true, default: "'pending'" }, { name: 'total', type: 'numeric', precision: 10, scale: 2, notNull: true }, { name: 'created_at', type: 'timestamptz', notNull: true, default: 'now()' }, ], primaryKey: ['id'], indexes: [{ name: 'orders_customer_id_idx', columns: ['customer_id'] }], }, ], }, ], }); Deploys only write definitions to a table, and a single, narrowly scoped Lambda applies them. Schema changes are additive only. New tables, columns and indexes are applied automatically, but removing a column or table, or changing a column’s type, won’t touch your database. You handle those. Roles and access are different: they follow your code in both directions. Change a role’s grants and the old privileges are revoked. Remove a role, and it’s dropped. Remove a grantConnect and that Lambda loses access on the next deploy. Your data only ever grows, but access always matches what’s in your code. Giving a Lambda least-privilege access only requires the following: db.grantConnect(createOrder, { schemas: [{ schema: 'orders', roleName: 'orders_readwrite' }], }); By default, a role’s grants cover the whole schema, including tables you add later, so a new table doesn’t need a new grant. If you want tighter control, tableScoping limits a role to specific tables: db.grantConnect(deleteOrder, { schemas: [{ schema: 'orders', roleName: 'orders_full', tableScoping: ['orders'] }], }); Once the schema is defined, Anvil writes the Lambda’s IAM policy (connect to the deployed DSQL cluster only) and maps its IAM role to that database role. The Lambda can connect as that role and nothing more. It all goes through the same DynamoDB stream and bootstrapped Lambda as before; neither the Anvil CLI nor your CI/CD pipeline ever holds admin credentials for the database. The DynamoDB table becomes the security boundary, and only your deploy writes to it. Even if your pipeline were compromised, an attacker could only write definitions. Every name is quoted, and grants, column types and defaults are checked against an allowlist before any SQL runs, so nothing in the table can make the bootstrapped Lambda run arbitrary SQL as admin. Anvil deploy (CLI / CI) │ │ writes item { role: orders_readwrite, arn: …role/createOrder } ▼ Bootstrap table (DynamoDB) │ │ stream event ▼ Bootstrap Lambda ← only trigger is the stream. │ │ admin connection ← the only one that exists ▼ Aurora DSQL AWS IAM GRANT orders_readwrite TO '…role/createOrder' ▲ │ connects as orders_readwrite (dsql:DbConnect only) │ createOrder Lambda Another limitation of DSQL was that CDC didn’t come out of the box; it’s bring-your-own target. You need to create a Kinesis stream with the correct permissions and then wire the stream to the cluster using the AWS CLI. This process was a drag for me, the same problem as before. Multiple environments, and you’d need to remember to wire it up in all of them. In Anvil const changes = new KinesisStream('order-changes', { consumers: [ { consumerName: 'order-events', lambda: { arn: orderEvents.arn, lambdaRoleArn: orderEvents.roleArn }, grantRead: true, filter: { tables: ['orders.orders'] }, }, ], }); const db = new DSQL('app', { stream: { kinesisArn: changes.arn }, schemas: [/* ... */], }); This was another great addition to the Anvil DSQL component: create a Kinesis stream, add it to the table, and it works out of the box. It handles all the permissions and wiring with least-privilege access so that you can build event-driven applications with a relational database after a single deployment. What started out looking like it would have annoying operational overhead and wouldn't scale across a multi-stage software lifecycle with lots of Lambdas turned into a secure DSQL Anvil component that does the heavy lifting for you so that you can focus on building. Thanks for taking the time to read this. DSQL is only the beginning; I believe we can bring the same approach to RDS. Governance and speed don’t have to be mutually exclusive. Anvil lets you move fast while keeping structure and safety. If you have enjoyed this, please star the GitHub repo and start building with Anvil.| Video breakdown for visual understanding. As always, it’s your infrastructure, not mine. Enjoy your safe cloud! Damien
Bee is out for Windows (installer or portable zip) and macOS (dmg or zip, Apple Silicon and Intel). Builds are unsigned, so on macOS right-click Bee and choose Open the first time vvedantb/bee
notrack.ai gives you uncensored chat and of course, no tracking, it's in the name... They offer a free one-week API key so you can test an app like AIChat github.com/sigoden/aichat/releases if you want to chat in the command line. If you like me don't like subscriptions, after the free period $20 minimum purchase credit for API access will easily last you over a year.
Every prompt, response and eval is in the public logs: RikiyaT/lm_understand-logs The harness to reproduce it is not released yet.
Built my first open-source GTM tool (Reputation Engine) using vibecoding & GitHub for the first time! Hey r/gtmengineering, I’ve used n8n before, but this is my first time "vibecoding" and pushing code to GitHub. I built Reputation Engine, an autonomous pipeline that scrapes Google Maps negative reviews, enriches decision-makers via LinkedIn, and generates LLM-vetted outbound copy for accounts experiencing operational pain right now. You have no idea how much I enjoyed building this. The best part was during testing when I tried it across multiple completely different industries and it dialed in spot-on results for every single one. Would love your feedback, code reviews, or thoughts on the architecture. 👉 GitHub: chiragbatra-beep/reputation-engine P.S. I'm also actively looking for GTM Engineering / Revenue Operations roles, let me know if your team is hiring!