Nicholas Clooney

Timeline

#documentation

4 entries following this thread through the timeline.

Nicholas Clooney

blog: AgentOS: The Agent Environment That Gets Smarter As You Build

Published AgentOS: The Agent Environment That Gets Smarter As You Build, a post about the project environment I am building around AI agents so a fresh session does not have to rediscover the same context every time.

It uses ProjectSpire as the working example: instructions as project memory, plans for intent, Captain Logs for collaboration taste, devlogs for technical history, and skills or workflows for repeated mechanical steps.

The useful idea is that the repo should accumulate context as it is used, so the human still supplies the judgment, but the surrounding system gets better at carrying that judgment forward.

Nicholas Clooney

feature: Neow's Cafe Gets a Real Card Catalog

Neow's Cafe card catalog screen showing a two-column grid of Slay the Spire 2 cards Neow's Cafe card catalog screen with card filters open above the card grid Neow's Cafe card catalog screen showing filtered Slay the Spire 2 cards
Neow's Cafe browsing catalog-backed card data instead of bundled mock cards.

I spent today turning ProjectSpire's iOS app "Neow's Cafe" from a mock-card browser into something much closer to a real Slay the Spire 2 card catalog.

The main decision was to keep the first version boring in the best way: a static, versioned catalog generated from the game data, served locally, and loaded directly by the app instead of inventing a REST API too early.

This is what the folder structure looks like now:

		
  1. ## Catalog layout
  2. Generate a static catalog under a versioned root:
  3. ```text
  4. v0.103.2/
  5. manifest.json
  6. cards.index.json
  7. cards/<card-slug>.json
  8. images/card_portraits/...
  9. ```

That structure gave the app one small index for browsing and filtering, while keeping full per-card files and portrait assets nearby for detail/debug views later. The important bit is that the card grid does not need to fetch hundreds of separate files just to show the collection.

		
  1. `cards.index.json` is the grid, search, and filter payload. It contains all card summaries needed by the app:
  2. - id
  3. - slug
  4. - title
  5. - description
  6. - energy cost
  7. - type
  8. - rarity
  9. - pool
  10. - portrait path
  11. - optional detail path
  12. Keep individual card JSON files for detail and debug views, not for the main grid.

On the Swift side, CardCatalogService.swift now loads manifest.json, follows it to cards.index.json, and decodes the catalog into app cards. I also removed the old bundled sample portraits, so the app is now much more dependent on the generated catalog behaving like the source of truth.

The Cards screen got some polish too: the catalog can be refreshed from the view, the grid is now a two-column layout that preserves the card aspect ratio in CardsView.swift, and I cleaned up the filter model so "no filter" is represented by optional UI state instead of fake .all enum cases (filter cleanup commit).

The other nice bit from today is process-oriented: ProjectSpire now has Captain Logs for collaboration notes and a reusable workflow for turning a day's commits and documentation changes into these timeline summaries. That should make it easier to keep writing about the work without having to rediscover the shape of the day from raw git history every time.

Nicholas Clooney

wip: ProjectSpire card data resolution note

I added a ProjectSpire design note in 399f74d that pushes the card pipeline toward a two-pass model: keep the parser output source-faithful, then resolve localization and rendered text separately for the app.

I created that work with GPT-5.5 in plan mode, and it asked a few genuinely useful clarification questions before I let it draft anything substantial, which made the whole process feel a lot more controlled than a blind codegen pass. I also pushed back on several of its first suggestions and made a lot of the consequential decisions myself, especially around keeping canonical variable names intact and separating raw data from resolved display data. That feels like a strong pattern for future ProjectSpire work: use the AI models to widen the search space, but keep the architecture decisions and edits grounded in my own judgment.