{
"path": "/3mhrbl7mthk2u",
"site": "at://did:plc:57od6g2ic3e3b3kauctjmo3k/site.standard.publication/3m5c6gbf36k2w",
"tags": [
"weekly recap"
],
"$type": "site.standard.document",
"title": "Week of 2026-03-16",
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"id": "019d1ce1-8651-7aae-bd45-a6c6bac31f98",
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Hi there! I'm low energy at the moment because I spent 4 hours writing today's other blogpost, which you should read, announcing atp.pics:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"src": "https://graham.leaflet.pub/3mhr36lsmo222",
"$type": "pub.leaflet.blocks.website",
"title": "Fetch a picture; it’ll make the moment last longer - graham.systems",
"description": "Put faces to names with atp.pics",
"previewImage": {
"$type": "blob",
"ref": {
"$link": "bafkreihdgoelwyi6qmhtryidbizeq3dcc5ek5hr4glguria4rmzkdqkgh4"
},
"mimeType": "image/png",
"size": 27718
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Let's crush these notes."
}
},
{
"$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": "atp.pics"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "I'm glad I got this service out, I wanted to have it announced before ATmosphereConf so I had something to talk about there."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 35,
"byteStart": 27
},
"features": [
{
"uri": "https://atp.pics",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "I'm not gonna explain what atp.pics is--that's covered in the linked post. However, since my weekly notes have recently been a saga of trying different agentic coding styles, I figured I'd cover that aspect."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 30,
"byteStart": 7
},
"features": [
{
"uri": "https://tangled.org/graham.systems/atp.pics",
"$type": "pub.leaflet.richtext.facet#link"
}
]
},
{
"index": {
"byteEnd": 58,
"byteStart": 50
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
]
}
],
"plaintext": "If you take a look at the repo, you'll notice the openspec directory, because I took a stab at spec-driven development for this project. I really liked it!"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "OpenSpec provides a CLI and the relevant skills for your agent to perform their idealized development loop, which roughly goes:"
}
},
{
"$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": "Propose your ideas/constraints to the agent"
}
},
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The agent generates a spec document"
}
},
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The agent generates a design doc/implementation plan from the spec, detailing changes and how to verify the changes"
}
},
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The agent derives tasks from the design doc"
}
},
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "The agent implements the tasks as specified"
}
},
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 15,
"byteStart": 8
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
}
],
"plaintext": "You and another agent verify that the spec is satisfied"
}
},
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "All the artifacts are archived"
}
},
{
"$type": "pub.leaflet.blocks.orderedList#listItem",
"content": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Repeat"
}
}
],
"startIndex": 1
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "It's an interesting approach, because it treats the limited context window of the agent as a feature rather than a limitation. Practically, each step can be accomplished in a separate agent session, with each conversation acting as a set of fresh eyes. I found this very useful, particularly for the verification step."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Instead of the Letta approach where the agent owns the text files that comprise the agent \"memory\", the spec-driven approach makes those memories artifacts of the project, and then takes advantage of the fact that any individual agent is not present for long."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Would I want this for a personal agent? Absolutely not. For coding, however, I enjoyed it a lot. I suspect it will make collaboration difficult, and I'm curious to see how the method holds up over time."
}
},
{
"$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": "Ooof... I don't have all that much more in me. Too much writing for one day."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "Don't expect notes for next week, since I'll be up in Vancouver still and trying to spend a little time as vacation."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "If you read all of my words today, thank you so much--it means a lot. I hope you have a great week!"
}
}
]
}
]
},
"bskyPostRef": {
"cid": "bafyreibursoxeowwodml7pd4pu6oejl6vngy6ibk7pr2gsf55ti2nl666u",
"uri": "at://did:plc:57od6g2ic3e3b3kauctjmo3k/app.bsky.feed.post/3mhrble4mzk2u",
"commit": {
"cid": "bafyreid6mfbvni6qd4zhjozprtg7cgknp4uqmhtxtqiucuedinaeo2brke",
"rev": "3mhrble6phn2x"
},
"validationStatus": "valid"
},
"description": "Featuring developing atp.pics",
"publishedAt": "2026-03-24T00:03:39.320Z"
}