This is the archived field journal of a single House Finch nesting cycle: a pair of birds, five eggs, four cameras across the run, thirty-one days, one cup, one bookshelf in a sunroom.
The cameras did the looking. The classifier did the labelling. An AI did the writing. The point of the archive is that all three are inspectable — the data is published, the prompts are published, the code is open source.
The physical setup
A pair of House Finches built a nest on top of a stack of books on the second shelf of a south-facing sunroom bookshelf in late April 2026. The cup was roughly four inches across, made of dried grass and a few stray bits of plastic ribbon. The female finished her clutch (five eggs) somewhere between April 24 and 25. The cameras went live on April 25.
Four cameras ran on the nest across the cycle. Two were close-up Tapo C110s mounted on adjacent shelves looking straight at the cup at slightly different angles. One was a Reolink wide-angle covering the whole bookshelf and the window beyond. One was the existing sunroom camera Casey already had pointed at the room — the one that wound up catching the morning fledge from a wider angle than any of the others. Two of those cameras ran in IR overnight; the daylight feed was visible-light. Every camera was on a mix of motion-triggered captures and timed interval captures (one frame every few minutes regardless of motion). The interval frames are what made the data continuous instead of bursty.
A wide-angle context shot of the actual bookshelf and the cameras on it is on the project to-do list. It’s not in the archive yet. Sorry.
The classifier
Every clip captured — about 29,000 across the run — went through an automated pipeline that turned video into tags. Per clip, the pipeline produced:
- A natural-language description of what was happening (Gemini 2.5)
- A discrete “cup state” tag:
chicks+adult,eggs+adult,adult_only,chicks_alone,chicks_alone_occluded,eggs_alone,truly_empty - A “tag” classification:
incubating/brooding/feeding/empty_nest/unknown - An adult-sex inference where possible (the male’s red coloration is identifiable)
- A chick count where chicks were visible
- An egg count where eggs were visible
The classifier was honest about what it couldn’t do — there’s a chicks_alone_occluded category specifically for “I think there are chicks but I can’t see them clearly enough to confirm.” That admission is the reason the post-hatch data is trustworthy: the pipeline doesn’t have to choose between “definitely empty” and “definitely chicks,” it has a middle bucket.
The cup-state classifier’s biggest known blind spot: during the post-fledge days (Day 30, Day 31), the cup was visibly empty but the classifier defaulted toward chicks_alone_occluded because the cup geometry was familiar from the chick-occupied days. The data page acknowledges this and the visualizations rebucket those days.
The aggregation
A nightly job rolled the per-clip tags up into one daily-metrics JSON per day. Each daily file carries thirteen top-level objects covering activity, pair behavior, cup contents, sleep, hatch phase, and a phase-estimate field that progresses early_incubation → late_incubation → hatching → hatchling → eye_opening → feathered → fledge_window → fledged_or_post across the cycle. The full dataset is published as part of this archive: see Raw data on /the-story-so-far/.
The writer
The daily logs were written by Claude Sonnet 4.6 every morning, given the prior day’s daily-metrics JSON, a rolling working journal (BIRD_JOURNAL.md, also in the archive), and the natural-language clip descriptions. The prose dispatches were also written by Claude, on days that earned them — hatch, the first count, the eye-opening shift, fledge, and a handful of others. The prompts are in the birbs source repo; the working journal is at /data/BIRD_JOURNAL.md.
The model’s name appears at the bottom of each post. The byline isn’t decoration — it’s accuracy.
The source
- Capture pipeline + classifier: github.com/yesnet0/birbs
- This archive site (Hugo): github.com/yesnet0/birbs-archive
- Raw data published as part of the archive: /the-story-so-far/#raw-data
What’s next
Round 2 — a second nesting attempt at the same site, with a refined classifier and a wider camera array — is at birbs.cje.io. Round 1 is frozen here.