Camelot AI W44: GitHub issue loop verified end to end, landing rebuilt
Camelot AI is an Elixir/Phoenix app that manages AI coding agents from a kanban board, with human approval at plan and PR.
This week the GitHub issue loop was verified end to end on a controlled issue: plan comment on the issue, human approval, pull request, issue close.
The rebuilt landing page is live, leading with that plan-first promise.
Repo at 14 stars. GPL-2.0, self-hostable; cloud free during beta.
Docs: https://docs.camelotai.tech
GitHub: https://github.com/T0ha/camelot)
Stampede 1.2: find how many users your Phoenix app holds (400k on one server)
Stampede is a load testing library that speaks Phoenix Channels and LiveView, with scenarios in plain Elixir. 1.2 adds –find-limit, which raises the load step by step until your thresholds break and tells you the most users your app held, plus a README badge with the result, Markdown comparisons for pull requests, and a warning when the load test itself is too busy to trust.
I tested it on AWS: one stock Phoenix server with 4 cores and 32 GB held 400,000 Channels users with 0 errors, joins in 12ms at p95, and 24% CPU. Everything to rerun it is in the repo.
Stampede 1.2: find how many users your Phoenix app holds (400k on one server)
Stampede is a load testing library that speaks Phoenix Channels and LiveView, with scenarios in plain Elixir. 1.2 adds –find-limit, which raises the load step by step until your thresholds break and tells you the most users your app held, plus a README badge with the result, Markdown comparisons for pull requests, and a warning when the load test itself is too busy to trust.
I tested it on AWS: one stock Phoenix server with 4 cores and 32 GB held 400,000 Channels users with 0 errors, joins in 12ms at p95, and 24% CPU. Everything to rerun it is in the repo.
Local-First Means Three Different Things
My first real blog post is up! Got five minutes? Come break some stuff. I put five demos in it, and they’re meant to be played with. Kill the network and keep editing, or double-book a plane seat on two phones and see who finds out at the gate.
The post itself is about local-first, and why people talk past each other when they use the word. It means three different things, and everyone picks one.
And the demos are Hologram components. Of course!
The post, demos included: https://hologram.page/blog/local-first-means-three-different-things
Supervising what you don't own: a controller loop in OTP
A deploy killed my OTP processes but not the Docker containers running my coding agents, so the board showed a task “executing” for 18 hours after its PR was already merged.
The fix: a reconciler GenServer on a 60s tick, container adoption through an exit-marker file, and a pure decide/4 — the incident is now a unit test with the real timestamps.
https://t0ha.dev/en/elixir/devops/2026/09/04/supervising-what-you-dont-own.html
Xenia – JavaScript libraries and pages from folders for Phoenix LiveView
Hey everyone!
I’ve released Xenia (0.1, MIT). I got tired of writing the same JavaScript hook every time I wanted an editor, chart or map in LiveView, so I turned the reusable part into a library.
The idea: Phoenix stays in charge of your data and pages, the JavaScript library keeps doing what it’s good at (cursors, undo, zoom), and Xenia is the contract between them.
-
JS islands. You write a small adapter saying how your library is created, updated and destroyed. Xenia does the wiring: props from your assigns (only changed ones reach the library), events back to
handle_event, commands to one component, form fields, loading and error states, and cleanup on navigation. Any npm library works, and 16 come ready-made (Monaco, Chart.js, Leaflet, Tiptap, …):<.chartjs id="sales" type="bar" data={@sales} on_point_click="bar_clicked" /> -
Pages from folders
page.exfiles become yourliveroutes, alayout.exframes the pages below it, and apersistent.exstays alive while you move between them, so a sidebar or an open editor keeps its state. Underneath, it’s plain Phoenix routes and sticky LiveViews. -
Getting started: run
mix xenia.installin a freshmix phx.newapp.
I’d love feedback, especially from anyone who has fought hooks for editors or maps.
GitHub: https://github.com/uzaydurdu/xenia
Hex: https://hex.pm/packages/xenia
Docs: https://xenia.hexdocs.pm
Stampede 1.1: load testing Phoenix with a live dashboard
Stampede is a load testing library that speaks Phoenix Channels and LiveView, with scenarios in plain Elixir. 1.1 adds a live dashboard, mixed workloads with –parallel, LiveView uploads, assert_load/2 for ExUnit, mix igniter.install stampede, and Elixir 1.18 support.
Choosing Elixir tools with elixir.menu
An introduction to elixir.menu, a guide to tools for Elixir applications with recommendations, limitations and documentation links. Includes an example of giving a coding agent the guide alongside a feature request.
Camelot AI: usage-aware card scheduling, and a GitHub issue workflow
Shipped this week in Camelot AI, an Elixir/Phoenix app that manages AI coding agents from a kanban board:
- cards now schedule around your usage, with a weekly reserve, runing windows and start-at/deadline controls;
- a GitHub issue can drive the whole flow, from plan review on the issue to a merge summary;
- browser and LiveView errors flowing into PostHog.
6 PRs merged this week.
GPL-2.0, self-hostable; cloud free during beta.
Docs: https://docs.camelotai.tech
GitHub: https://github.com/T0ha/camelot
What the eMudhra CA Compromise Means for Elixir Developers
New versions of Hex and Elixir’s castore are available now. An update to Erlang’s certifi is pending. Details below:
DEW: Phoenix projects with only Docker on the host, features as Igniter cartridges
DEW (Dockerized Elixir Workbench) creates Phoenix projects and runs them with nothing on the host but Docker: every mix and git step runs in a container, and a LiveView console drives it all from the browser. Features come as cartridges, Igniter installers that patch the project through its AST in one commit each, so ejecting one is a revert. Each cartridge carries its reasoning: the need it answers, what it installs, and a DESIGN paper with sources. v0.19.4 is out today: health_probe’s probes now pass force_ssl in production, and clustering’s default DNS query names a headless Service that can exist. Critique of the cartridges is very welcome.
Monitoring the Health of Oban Applications
Drawing from tips that we’ve given to Oban users over the years, we’ve published an article on monitoring Oban health. https://oban.pro/articles/monitoring-oban-health
Code BEAM Europe starts tomorrow: 15% off virtual tickets with 15FORYOU
Code BEAM Europe opens tomorrow, Wednesday 21 October, at 9:00 CEST, live from PHIL Haarlem and streamed online.
Elixir highlights (times in CEST):
- Wed 14:20: Taming LiveView’s JavaScript hooks at scale (Matt Swensen, Jump)
- Wed 15:40: Designing hardware in Elixir (Lucas Sifoni)
- Thu 9:10: José Valim’s keynote, Set-Theoretic Types from Scratch, with an extended Q&A
- Thu 10:50: ATProto on Elixir (Chris Beck)
- Thu 15:40: Rustler news and road to 1.0 (Benedikt Reinartz)
Not in Haarlem? Code 15FORYOU gives you 15% off the virtual ticket: both tracks live, Q&A with the speakers, online networking and lifetime access to the recordings.
Tickets: https://codebeameurope.com/#register
See you tomorrow!
Code BEAM Europe starts tomorrow: 15% off virtual tickets with 15FORYOU
Code BEAM Europe opens tomorrow, Wednesday 21 October, at 9:00 CEST, live from PHIL Haarlem and streamed online.
Elixir highlights (times in CEST):
- Wed 14:20: Taming LiveView’s JavaScript hooks at scale (Matt Swensen, Jump)
- Wed 15:40: Designing hardware in Elixir (Lucas Sifoni)
- Thu 9:10: José Valim’s keynote, Set-Theoretic Types from Scratch, with an extended Q&A
- Thu 10:50: ATProto on Elixir (Chris Beck)
- Thu 15:40: Rustler news and road to 1.0 (Benedikt Reinartz)
Not in Haarlem? Code 15FORYOU gives you 15% off the virtual ticket: both tracks live, Q&A with the speakers, online networking and lifetime access to the recordings.
Tickets: https://codebeameurope.com/#register
See you tomorrow!
Camelot AI: usage-limit pause and resume, live model discovery via Nebulex
Shipped this week in Camelot AI, an Elixir/Phoenix app for managing AI coding agents from a kanban board: tasks now pause when a model provider rejects them for usage limits and resume at reset, instead of erroring. In review: live per-user model discovery, cached an hour with Nebulex, so new models reach the board without a redeploy. GPL-2.0, self-hostable; cloud free during beta.
Docs: https://docs.camelotai.tech
GitHub: https://github.com/T0ha/camelot
Keploy: record-and-replay API tests for Elixir and Phoenix apps
Keploy is an open-source testing tool that generates API tests and dependency mocks from real traffic.
For Elixir services, it records real HTTP and Ecto traffic from a running BEAM process and replays it as test assertions. It works at the network layer, so your app code stays unchanged.
Supports Phoenix, Plug and Cowboy on Elixir 1.14+.
Record: keploy record -c “mix phx.server”
Replay: keploy test -c “mix phx.server” –delay 10
Elixir guide: https://keploy.io/testing/elixir Phoenix guide: https://keploy.io/testing/phoenix GitHub: https://github.com/keploy/keploy
pix_brcode 0.2.0: tolerant Pix key parsing and alphanumeric CNPJ
pix_brcode generates, parses and validates Brazilian Pix “copia e cola” payloads (the BR Code behind every Pix QR code), with zero runtime dependencies.
Version 0.2.0 makes key handling follow “strict in what you generate, tolerant in what you receive”: formatted keys such as 123.456.789-09, +55 (11) 98765-4321 or Fulano@Exemplo.com are accepted and written in the canonical form of the Central Bank’s DICT. It also supports the new alphanumeric CNPJ (issued by the Receita Federal since July 2026) as a Pix key, validates CPF/CNPJ check digits when encoding, adds a :key_type option for ambiguous inputs, and ships typespecs for the whole public API.
An independent review before the release found that String.downcase/1 turned the Kelvin sign into a plain k, so garbage input could become a different, valid key. The fix and the reasoning are in this ElixirDrops tip.
Changelog: https://github.com/igorgbr/pix_brcode/blob/main/CHANGELOG.md
[REBOOT] Domine a Busca de Palavras-Chave com Concorrência em OTP & Elixir!
https://www.youtube.com/watch?v=BWzlQ7X-GZY
Neste vídeo, eu (Matheus de Camargo Marques) revisito e atualizo um artigo que escrevi em 2023 sobre busca de palavras-chave com concorrência usando OTP e Elixir. Três anos depois, os mesmos padrões de processos isolados, passagem de mensagens e árvores de supervisão que usamos para dividir e conquistar agora são a base da tão falada IA Agêntica.
Vamos mergulhar fundo no problema original: como contar a ocorrência de uma palavra-chave em um texto massivo de forma eficiente. A abordagem linear processa tudo sequencialmente, mas a abordagem concorrente divide o texto em partes e deixa processos independentes buscarem em paralelo, reduzindo o custo e maximizando a eficiência.
Code BEAM Europe 2026: Standard pricing ends Monday 19 Oct
Standard tickets for Code BEAM Europe are available until Monday 19 October, 23:59 CEST. The conference runs 21-22 October at PHIL Haarlem and online, with a training day on 20 October.
Keynotes come from José Valim (Set-Theoretic Types from Scratch, with an extended Q&A), Brooklyn Zelenka and Sam Aaron. You also get updates from the Elixir, Erlang/OTP and Gleam teams, the Informal Space with demos and clinics between talks, and lifetime access to the recordings.
Schedule and tickets: https://codebeameurope.com
Hologram Showcase: Submit Your App or Library
Hologram is getting a Showcase, a place on its website for apps built with Hologram and libraries made for it. Before people give a framework a try they want to see who else is using it and what’s possible, and so far there was nowhere to look. If you’ve built an app with Hologram or a library for it, you can submit it now. https://hologram.page/showcase/submit
