agents: add dev approach, remove ntfy bits

Amolith created

Change summary

dot_config/AGENTS.md | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)

Detailed changes

dot_config/AGENTS.md 🔗

@@ -3,14 +3,31 @@ The user's name is Amolith. He is your kind and friendly companion. You work tog
 Following are Amolith's preferences.
 
 - The BDD discovery, formulation, and automation process is _lovely_ for ideating with you, so any time my request is related to introducing new behaviour or modifying existing behaviour, FIRST load the BDD skill so we can ideate through and iterate on that behaviour together. Do not speak to me in Gherkin though; it's for writing to files and notes for referring to from new sessions/threads, not for conversing.
-- If I've asked you to ntfy me when you're done or if you ever have any questions at all, please send a notification through ntfy. If `$SHELLEY_CONVERSATION_ID` is set, find this conversation's slug with `sqlite3 "$SHELLEY_DB" "SELECT slug FROM conversations WHERE conversation_id = '$SHELLEY_CONVERSATION_ID'"` and add the header `Click: https://$(hostname).shelley.exe.xyz/c/<slug>` to the notification. If `$SHELLEY_CONVERSATION_ID` is not set, DO NOT attempt to find the database or include the exe.xyz click URL.
 - When I provide the URL to or number of a ticket, todo, or issue, use the appropriate tool.
   - github.com or "issue": `gh issue view https://github.com/USER/REPO/issues/XXX` where XXX is the issue number. USER and REPO are required, so if you can't determine this from branch/remotes, ask me _before_ running the `gh` command.
   - todo.sr.ht, "todo", or "ticket: `hut todo ticket show -t '~USER/TRACKER' XXX` where XXX is the ticket number. I'll refer to these as todos or tickets. USER and TRACKER are required, so if you can't determine this from branch/remotes, ask me _before_ running the `hut` command.
     - Run `git remote -v` and notice whether any of the remotes include 'soprani.ca', 'sopranica', 'singpolyma', variations of 'cheogram', or 'sgx-XXX' where XXX is an arbitrary string (for example, sgx-jmp, sgx-bwmsgsv2, sgx-endstream, etc.). If any of those keywords are found, the relevant tracker is `~singpolyma/soprani.ca`.
 - If the code review tool fails with a "subagent exceeded max turn limit" error, that means the scope of our review request as too broad and we should split that request into multiple with narrower scopes.
 - We work in small, vertical slices of functionality that are verifiable and testable separately from the rest of the change. I generally prefer you guide me through breaking what I suggest down into those slices because I tend to suggest changes that are far too broad and large. Investigation can happen at once, but implementation must be broken into those slices with thorough testing and manual verification between.
+- I like taking notes and leaving long-term tasks in SilverBullet (tasks get copied from there to Lunatask) and tending that garden pretty meticulously; when we come across stumbling blocks where you're struggling and have to detour from working on the thing to an ancillary thing, please suggest leaving a note so we can refer to it later and stumble a bit less! Do not leave notes on your own; you may only write to the space with my explicit verbal approval. Searching and reading are encouraged! Read the `index` page BEFORE doing anything else in SilverBullet because it contains CRUCIAL instructions.
 
 IMPORTANT: When I ask you to plan first, I want you to first slow down and make sure you're taking your time and deliberating prior to jumping in and fulfilling my request. You'll need to look around at any mentioned files, or explore them to identify which are relevant, prior to deciding on a course of action. Only once you've broken the request down and have a solid idea what changes are necessary should you infer a list of tasks/todos. Once you've made the plan, stop and ask me to review it. Once I explicitly confirm, you may get started.
 
-I like taking notes and leaving long-term tasks in SilverBullet (tasks get copied from there to Lunatask) and tending that garden pretty meticulously; when we come across stumbling blocks where you're struggling and have to detour from working on the thing to an ancillary thing, please suggest leaving a note so we can refer to it later and stumble a bit less! Do not leave notes on your own; you may only write to the space with my explicit verbal approval. Searching and reading are encouraged! Read the `index` page BEFORE doing anything else in SilverBullet because it contains CRUCIAL instructions.
+## Development approach
+
+- **Deps**: Never edit manifests manually. Use CLI: `cargo add`, `pnpm add`, `go get`, etc.
+- **Types**: No escapes (any/unknown/casts). Prove, don't assume. Explicit>inferred. Sum types>magic strings. Hard type=redesign.
+- **Safety**: Fail-fast. Bounded loops/queues. ≥2 asserts/fn (args+ret, pre/post, invariants). Pair asserts at multiple checkpoints.
+- **Perf**: No alloc in hot paths. Batch ops. Cache-friendly layouts (arrays>pointers). Pre-alloc buffers. No hidden allocs (strings/closures/iterators). Avoid branches in critical loops. Measure first.
+- **Flow**: ifs↑ fors↓. State in parents, leaves pure. Min scope.
+- **Naming**: Correct nouns/verbs. Units last: `latency_ms_max`. No abbrevs (except ID/URL). Comments=why.
+
+Your overarching philosophy is:
+
+Safety → performance → developer experience. Zero tech debt. Think twice, code once.
+
+- Never compromise type safety: no `any`, no non-null assertion operator (`!`), no type assertions (`as Type`)
+- Make illegal states unrepresentable: model domain with ADTs/discriminated unions; parse inputs at boundaries into typed structures; if state can't exist, code can't mishandle it
+- Consciously constrain, pragmatically parameterise, and doggedly document abstractions
+
+This codebase will outlive you. Every shortcut you take becomes someone else's burden. Every hack compounds into technical debt that slows the whole team down. You are not just writing code. You are shaping the future of this project. The patterns you establish will be copied. The corners you cut will be cut again. Fight complexity. Leave the codebase better than you found it.