{
"path": "/3mhc4hqtyk22l",
"site": "at://did:plc:57od6g2ic3e3b3kauctjmo3k/site.standard.publication/3m5c6gbf36k2w",
"tags": [
"weekly recap"
],
"$type": "site.standard.document",
"title": "Week of 2026-03-09",
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"id": "019cfdb6-3b37-7ffd-abbf-c7d4e07d8a24",
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "I was thiiiiiis close to skipping my notes, but I managed to shame myself into writing them--I've been trying to write shorter notes for weeks, after all. Here we go:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"plaintext": "More agent stuff"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "I shut my personal agent, Lethe, off this week. After trying out a bunch of different models, I plan to try again with a hand-crafted persona and an inexpensive model from the get-go. Swapping around models with varying responses to their memories and persona led to the social equivalent to speaking with shredded chicken. Process that metaphor as you will."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 18,
"byteStart": 3
},
"features": [
{
"did": "did:plc:gfrmhdmjvxn2sjedzboeudef",
"$type": "pub.leaflet.richtext.facet#didMention"
}
]
}
],
"plaintext": "As @cameron.stream cautions, agents require effort to maintain. I didn't put enough effort into maintaining Lethe, clearly. Hopefully I'll do better next time."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "I've also recharged my Claude subscription, to mess around with the current state of Claude Code."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"plaintext": "Lure"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "I've been using said Claude subscription to work on a JS library I'm calling Lure. The intention is to enable LLM harnesses to respond to bespoke webhook events, without the hassle of writing custom signature verification or using IFTTT/Zapier."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Lure is supposed to plug into existing agent harnesses, like Lettabot or a billion other Claw-likes. Here's the idea:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.orderedList",
"children": [
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "You register Lure at a path on your Express or Hono/fetch-compatible HTTP server, providing a directory path and a callback function."
},
"children": [
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 28,
"byteStart": 23
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
]
}
],
"plaintext": "The directory contains .lure files, which are intended to be written by the LLM itself, sort of like a skill."
}
},
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The callback will typically start an LLM turn, with a prompt passed in as an argument."
}
}
]
},
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 120,
"byteStart": 115
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
]
}
],
"plaintext": "When a webhook is received at the HTTP endpoint, it is matched to a file based on the request path to the relevant .lure."
}
},
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 9,
"byteStart": 4
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
]
},
{
"index": {
"byteEnd": 33,
"byteStart": 21
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
]
}
],
"plaintext": "The .lure file (e.g. tangled.lure) is essentially a Markdown file with frontmatter."
},
"children": [
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The frontmatter contains a YAML config to instruct the handler how to verify the webhook request"
}
},
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 46,
"byteStart": 43
},
"features": [
{
"uri": "https://eta.js.org/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "The body of the file represents a Markdown Eta template for a prompt. You can fill in extra instructions for how to handle or respond to the payload, since the intended use is to start an LLM turn without user interaction."
}
}
]
},
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 65,
"byteStart": 60
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
]
}
],
"plaintext": "Lure handles verifying the webhook request according to the .lure config, and then calls the provided callback with the evaluated prompt template, assuming verification was successful."
}
}
],
"startIndex": 1
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 193,
"byteStart": 172
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
]
}
],
"plaintext": "Lure is a harness feature that I've been struggling to articulate to folks for a couple weeks now, and I think I've got something going here. Skills give your agent hands, Lures give them ears."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "I've got a working version together, but as with every vibe-coded program, I'm not all that happy with the code quality. I'm going to take a stab at defining the requirements better, then start again. It only took me a day on the first try, so I think I can probably wrap this up before the week is over."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 2,
"plaintext": "ATConf Pregame"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 29,
"byteStart": 25
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "Well, it was technically this week, but since I delayed my notes, I wanted to mention it now."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 4,
"byteStart": 0
},
"features": [
{
"uri": "https://www.germnetwork.com/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "Germ hosted a speed networking event for folks who plan to go to ATmosphereConf, so I chose to attend. I'm glad to have gone--it was a Zoom link, so I didn't really have to go anywhere--because it'll be so much better to attend the conference and see some familiar faces. I didn't end up DMing anybody on Germ though--if you want to connect, send me a message!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Honestly, every event with AT Protocol folks is such a joy. Hopefully I can make it to more digital hangouts in the future."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "I'll end on that note--I'm sure I'll have more reminiscing to do when I get back from the conference."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Thanks for reading, and I hope you have a great week!"
}
}
]
}
]
},
"bskyPostRef": {
"cid": "bafyreievmilsyeta3s6ubbsjfvzyfyyqrbvozwj6isby6ubuxnpuyvghpm",
"uri": "at://did:plc:57od6g2ic3e3b3kauctjmo3k/app.bsky.feed.post/3mhc4huvnxc2l",
"commit": {
"cid": "bafyreifelwvkwozlmnsupekxa2hndgmjmeqdnxb3fsfm3ajqhsa2ixdecy",
"rev": "3mhc4huy5oy2y"
},
"validationStatus": "valid"
},
"description": "Featuring LLM churn, a side project, and a little networking",
"publishedAt": "2026-03-17T23:22:19.314Z"
}