finds.dev

public digest · 5 picks

Agent state that survives reboots, first PRs, and ADS-B on a Pi

A theme kept surfacing in this week's picks: the gap between a thing working once and a thing working reliably over time. LoopX exists because AI agents lose context between sessions. book-to-skill exists because burning tokens re-navigating the same PDF on every invocation is wasteful. docker-adsb-ultrafeeder exists because running five separate SDR containers and wiring them together is a mess. Each of these is a solution to a real annoyance, which is the best kind of project to feature.

The other two picks land in different territory — first-contributions and awesome-for-beginners are infrastructure for the people who are still figuring out how any of this works. Both have real limitations worth knowing before you recommend them to someone, and we get into those honestly below.

// pick 1 of 5

huangruiteng/loopx

LoopX is a local-first state kernel for managing long-running AI agent work across multiple sessions and runtimes (Codex, Claude Code, Cursor, etc.). It handles goal persistence, todo ownership/leasing, quota-aware scheduling, human gate management, and evidence logging so multi-day agent tasks don't lose context between runs. It's aimed at developers running agents on real engineering tasks who've hit the wall of agents losing state between sessions.

The core problem LoopX solves is real and underserved: when you run an AI agent on a multi-hour engineering task, close your laptop, and come back, the agent has no memory of what it was doing, what it already tried, or what it promised to do next. LoopX gives you a local file-based state kernel — goals, todos, heartbeats, quota budgets — that persists across sessions and is readable by any agent runtime that can exec a subprocess. The quota scheduler alone (`loopx quota should-run`) is worth borrowing: it returns a yes/no plus a wait hint, which is a clean primitive for any cron-driven automation that needs rate limiting without reimplementing it.

The agent-agnostic design holds up in practice. The tick cycle (check quota, claim a todo, update progress, refresh heartbeat, spend budget) is all shell commands, so Codex, Claude Code, Cursor, or a raw API loop can all integrate without pulling in an SDK. The incident archive in docs/archive/ is also worth noting — dated post-mortems on a v0.4 project suggest the author is actually running this on real work and being honest about failures.

What to know going in: state lives in local files with no built-in sync or conflict resolution. Multi-machine or parallel-agent scenarios require coordination the docs don't fully address. The '200+ hour loops' in the marketing copy refer to elapsed wall-clock time across many bounded turns, not continuous operation — a meaningful distinction buried in fine print. The CLI surface is also large (30+ subcommands) and the getting-started guide doesn't give you a minimal working path quickly enough.

Installation is currently curl-to-bash from GitHub Pages with no PyPI package, and it requires Python 3.11+. Neither is a dealbreaker, but both are friction in managed or security-conscious environments.

View on GitHub → Our full take →

// pick 2 of 5

MunGell/awesome-for-beginners

A curated list of open-source projects that label beginner-friendly issues, organized by programming language. It's aimed at new contributors looking for their first PR opportunity, and maintainers who want to advertise their welcoming projects.

The architecture here is more thoughtful than most 'awesome list' repos: data lives in data.json and the README is generated via a Jinja2 template, which keeps direct-edit conflicts out of the contribution flow and makes validation scriptable. There's also a CI link checker, which is exactly the right automated check for a list whose primary failure mode is link rot. At 88k stars, this is genuinely where beginners look — being listed here has real discoverability value for open source maintainers who want new contributors.

The limitations are structural and worth being clear about. There's no staleness detection: a project gets listed once and stays forever even if it stops maintaining beginner-friendly issues or goes unmaintained entirely. The data.json schema has no last-verified date, activity status, or issue count, so the list can't be filtered or sorted in any useful way. Some listed projects will have zero open beginner issues on any given day — a beginner who clicks through and finds nothing is worse off than if they'd never found the list.

Duplicate entries in the rendered README also suggest the generation and validation scripts have gaps. These are solvable problems, and the architecture supports solving them, but they haven't been solved yet. Treat this as a starting point for finding projects, not a current index of active opportunities.

View on GitHub → Our full take →

// pick 3 of 5

firstcontributions/first-contributions

A practice repository where beginners make their first open source contribution by adding their name to a Contributors.md file via a fork-and-PR workflow. It's aimed at people who have never submitted a pull request before and need a zero-stakes environment to practice the mechanics. Available in 70+ languages.

The multilingual coverage is the genuine standout here — 70+ language translations of the main tutorial means this actually reaches people who would bounce off an English-only guide. That's not trivial to maintain and it's the right call for an audience that includes a lot of people for whom English is a second language. The auto-merge workflow for incoming PRs is also smart: beginners get a merged PR to point at without maintainers drowning in manual reviews.

The supplementary docs deserve credit too — tutorials for rebasing, squashing, merge conflict resolution, and stashing go beyond the hello-world PR and give people somewhere to go next. The GUI tool coverage (GitHub Desktop, VS Code, IntelliJ, GitKraken) is appropriate for an audience that shouldn't be assumed to live in the terminal.

The honest limitation is that the contribution itself — adding your name to a file — teaches git mechanics but nothing about reading unfamiliar code, understanding a project's conventions, or writing a change that someone else actually wants merged. The gap between 'I did this' and 'I can contribute to a real project' is large and mostly unaddressed by the supplementary material. It's a practice ramp, not a bridge.

Translation quality is also uneven — some language versions have full coverage of supplementary guides, others haven't been touched in years. There's no signal to readers about which translations are current, so someone following an outdated tutorial may hit instructions that no longer match the UI.

View on GitHub → Our full take →

// pick 4 of 5

sdr-enthusiasts/docker-adsb-ultrafeeder

A Docker container that bundles readsb, tar1090, graphs1090, mlat-client, and an mlat-hub into a single deployable unit for ADS-B aircraft tracking. Targets hobbyists running RTL-SDR dongles on Raspberry Pi or x86 hardware who want to receive, display, and feed aircraft position data to aggregators like FlightAware, ADSBExchange, or adsb.lol. Actively maintained with multi-arch support (amd64, armv7, arm64).

The ULTRAFEEDER_CONFIG design is the most interesting engineering decision in this project: a single semicolon-delimited environment variable configures all your ADS-B feeds and MLAT clients, replacing what would otherwise be a sprawl of per-aggregator variables. It's opinionated but it's the right opinion — adding a new aggregator is one line, not a block of new config. The multi-arch image (amd64/arm64/armv7) handles USB dongles via device_cgroup_rules instead of hardcoded device paths, which is the correct approach and something a lot of hobby containers get wrong.

The built-in mlat-hub is also worth highlighting for anyone who's dealt with duplicate MLAT positions. Feeding multiple aggregators naively means getting back multiple MLAT feeds with overlapping data; the hub consolidates them, which is a real problem solved rather than a checkbox feature. CI includes hadolint and markdownlint, and Renovate handles dependency updates — this isn't an abandoned hobby project.

What to know going in: all configuration logic is bash that parses the ULTRAFEEDER_CONFIG string by splitting, with no schema validation. A misplaced comma or edge-case character gives you silent failures rather than a clear error. There's no health check in the Dockerfile by default, so Docker will report the container as 'Up' even if readsb has crashed internally — external monitoring is your problem.

The documentation is thorough but organized as one enormous README. There's no quick-start path that gets you from zero to working without reading deeply. If you're new to ADS-B feeding, budget time for the setup even if you're comfortable with Docker.

View on GitHub → Our full take →

// pick 5 of 5

virgiliojr94/book-to-skill

Converts books and documents (PDF, EPUB, DOCX, etc.) into structured markdown 'skill' files that AI coding agents like Claude Code and GitHub Copilot CLI can load on demand. The core idea is to pay the structuring cost once at conversion time rather than burning tokens navigating raw PDFs repeatedly. Aimed at developers who want their reference books queryable inside their agent workflow without context-stuffing.

The token efficiency argument is the interesting one here, and unusually for a project making performance claims, there's a documented measurement methodology in docs/performance.md rather than a bare marketing number. The 'discovery loop tax' concept — the cost of an agent navigating raw PDF structure on every query versus querying pre-structured skill files — is a real phenomenon anyone who's tried to use PDF books in agent workflows has encountered. The extraction layer is also practically solid: it probes for available tools, degrades gracefully when they're missing, and `extract.py --check` gives you an instant diagnostic.

The test suite is notably thorough for a utility tool — edge cases like CJK supplementary planes, BiDi control characters, unbalanced code fences, and scanned PDF detection suggest the tests were driven by actual breakage. That's a good sign for a tool handling the long tail of real-world document formats.

The significant caveat is architectural: the 'skill generation' step — the part that turns extracted text into a structured SKILL.md — is delegated to the agent itself, not done deterministically by the Python code. Output quality is entirely dependent on your LLM and prompt quality, which the README underplays. Quality Rule #7 ('never copy raw passages') is enforced only by prompt instruction — a weaker model or a drifting conversation could generate near-verbatim reproductions of copyrighted text with no technical guardrail.

MOBI/AZW support requires Calibre, which is a 200MB desktop application — the wrong dependency shape for a CLI tool that people will want to run headlessly. The 22k stars also have the shape of a viral moment rather than sustained adoption; the forks-to-stars ratio is low for a tool people are actively building workflows around.

View on GitHub → Our full take →

That's the week. If you want these picks in your inbox every Friday before they hit the site, there's an email signup at the bottom of the page — no other mail, just the digest.

Get this in your inbox →