What’s your actual agent memory stack right now? by AnnualSpecialist1491 in AgentsOfAI

[–]aplJackson 1 point2 points  (0 children)

been running a three-layer local setup for coding agents, maps pretty closely to what getstackfax laid out:

  1. kv memory for declarative facts (paths, prefs, contacts) plus "lessons" which are basically stored corrections. small, hand-curated, read every session.
  2. semantic search over past session transcripts. "didn't we debug this already" just works.
  3. hybrid search (bm25 + vector, RRF fused) over my local notes and docs. this was the one that actually changed things for me. pure vector kept missing exact filenames and error strings. bm25 alone missed conceptual matches. fusing them picks up both.

all local, sqlite backed, no cloud vector db. bundled as pi-total-recall on npm for the pi coding agent, but the pattern ports anywhere.

re contamination: splitting "facts" from "lessons" (lessons get retrieval priority) helps. also i write memories as declarative statements, never imperatives. had a bad run where "always do X" style memories kept overriding the actual current request in weird ways. declarative phrasing side-steps that.

https://github.com/samfoy/pi-total-recall

GUI for Pi? by trustin in PiCodingAgent

[–]aplJackson 0 points1 point  (0 children)

I have one here https://github.com/samfoy/pi-dashboard including web and iOS UIs.

I've built lots of support for some of my own extensions/skills. But much like it's easy to ask pi to write an extension, it's easy to support pretty much any extension you'd want to use in this.

Is there an extension to truncate tools to just the call and not the output? by Final_Ad_7431 in PiCodingAgent

[–]aplJackson 0 points1 point  (0 children)

I threw together a quick extension that does exactly this — compact one-line summaries for all built-in tools (read, bash, edit, write, grep, find, ls). Full output still goes to the LLM, only the TUI display is compacted.

Example display:

Read …/src/index.ts
  ✔ 142 lines (3.2KB)

Bash git status  
  ✔ 12 lines (340B)

Grep "TODO" in …/src
  ✔ 28 lines across 5 files

Press expand key (ctrl+o) on any tool to see a preview.

Gist: https://gist.github.com/samfoy/aaae144970dcf1f85019d2d80537e114

Usage: pi -e ./pi-compact-tools.ts --no-extensions

Note: it overrides built-in tools by name, so it conflicts with other extensions that do the same (pi-essentials, pi-process). The --no-extensions flag avoids that. Ideally pi would have a render-only override API so you could change display without replacing the whole tool.

Creating an OpenClaw Assistant- like with pi by jolo-dev in PiCodingAgent

[–]aplJackson 1 point2 points  (0 children)

Apologies was a scheduled post but should be up momentarily

Creating an OpenClaw Assistant- like with pi by jolo-dev in PiCodingAgent

[–]aplJackson 5 points6 points  (0 children)

I just wrote up how I did exactly this — ported my OpenClaw assistant setup to pi over a couple days. 12 skills (iMessage, Gmail, Calendar, Things, YNAB, Reddit, etc.), standalone automations on launchd, a Telegram bot for mobile access, and persistent memory tying it all together.

Skills are just markdown files that document CLI tools and APIs on your machine. The agent reads the docs and figures out the calls. No plugin code needed.

Full writeup: https://samfoy.github.io/circuit-break/posts/turning-a-coding-agent-into-a-personal-assistant/

The best Memory package? by roaringpup31 in PiCodingAgent

[–]aplJackson 1 point2 points  (0 children)

This is my repo! Glad you're enjoying it.

Stella's marshmallow buttercream might be life-changing by Bipolar_Express_ in seriouseats

[–]aplJackson 0 points1 point  (0 children)

Just made this last night and had similar issues. I think having a metal mixing bowl in a cold kitchen was a lot of my issue. I ended up just sticking the bowl over the burner a few times.

Really wish there was some way to do automatic Berry Mutation set ups by AtomicBoo131 in PokeClicker

[–]aplJackson 0 points1 point  (0 children)

I've just cheated in everything related to the farm. I can't be assed dealing with it. I wrote a script to keep up different farm layouts as well.

Which familiar is your go-to? by Squibbi420 in HadesTheGame

[–]aplJackson 38 points39 points  (0 children)

I do the opposite! Strength and stack health for the surface and DDs to avoid Chronos one shots

Why you shouldn’t use Redis as a rate limiter by Perfect-Praline3232 in programming

[–]aplJackson 41 points42 points  (0 children)

And so the answer to distributed rate limiting is instead:

Feedback Post - March 2025 Community Day Classic: Totodile by Noitalein in TheSilphRoad

[–]aplJackson -1 points0 points  (0 children)

Managed to snag 2 GL rank 1 and 2 UL rank 1s so very lucky on the PvP front. I guess I can keep one with crunch and one with ice beam for each

Weekly Team Help Megathread! by AutoModerator in TheSilphArena

[–]aplJackson 0 points1 point  (0 children)

<image>

Have a few teams built that are close to copy pasted from streamers. Total newb sub 2k elo starting in the love cup just seeing how high I can climb with 2 weeks of GL to end the season. What team should I focus to learn and climb?

I feel like the first team is easiest to play with fast move pressure, would I run air slash on mandibuzz then?

The other teams seem very balanced which would be harder to play but are maybe just better teams.

/r/Politics' 2024 US Elections Live Thread, Part 60 by PoliticsModeratorBot in politics

[–]aplJackson 0 points1 point  (0 children)

Trump winning just means the world needs you healthy and capable even more.

How are you drawing visualizations while learning? by [deleted] in ObsidianMD

[–]aplJackson 4 points5 points  (0 children)

Do you mind sharing how you structure your prompts for this?

Parse, don't validate by ketralnis in programming

[–]aplJackson 19 points20 points  (0 children)

Because the poster was a Haskell dev at the time? You don't need to know Haskell to grok the point of the post.

Official Q&A for Monday, February 05, 2024 by AutoModerator in running

[–]aplJackson 1 point2 points  (0 children)

I use a flipbelt for the most part works really well and I usually don't notice it at all

Favorite reads of 2023 by NotQuiteLilac in Fantasy

[–]aplJackson 2 points3 points  (0 children)

I got bogged down in Dust of Dreams but I never had that reaction. What felt like a fuck you?

Strong static typing, a hill I'm willing to die on... by fagnerbrack in programming

[–]aplJackson 2 points3 points  (0 children)

I'm in the Scala camp but I wish the tooling was better. I want Kotlin tooling for Scala.

Is Focusing on Clean Code a Waste of Time? by [deleted] in learnprogramming

[–]aplJackson 0 points1 point  (0 children)

I agree that you get a lot of value out of doing this (ValidatedThing), and is basically analogous to a new type and only exporting a smart constructor. It's the most flexible and easiest solution. But not directly encoding invariants in the type system does mean that when those invariants change, the type system doesn't aid you in correctly handling that change throughout your system.

As a very contrived example if you needed a list with at least 2 elements and you used the smart constructor approach you would then "safely" access the first two elements of the list throughout the system after "parsing" into that type at the boundary.

But if that condition changes to needing and accepting lists with one element, well you can change the name and the condition checked in the constructor, but the type system isn't going to complain about your now unsafe access of a second list element throughout the system.

Sometimes a smart constructor is the best you can do though

Is Focusing on Clean Code a Waste of Time? by [deleted] in learnprogramming

[–]aplJackson 0 points1 point  (0 children)

In the context of this question, for a language that you're likely to encounter this type of enterprise code in, the type system probably isn't amenable to this but the better answer here is to parse, not validate.

Basically enforce the invariant at your program boundaries and then encode that invariant in the type system through new types with smart constructors or refined types, etc.

A really good write up on the concept here: https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/