Index

Scriba

Scriba is an average, kind of boring “secretary automation” LLM flavor of project. In my eternal laziness, I’ve setup a flow where I can quickly jot a note on my phone, have it sync to my laptop, then have Claude Code deal with whether it should go in my groceries, question list, reminders, or calendar. But if you’d like to setup a version of this yourself or are a little bored, here are some more assorted thoughts about this simple little app.

Where’s the code?

Well, there is no code. Or there is, but I won’t be uploading it to Github, but instead, I’ve provided a prompt at the bottom of the page which you can fill in the blanks to get your own version of this. Hopefully, if I’ve written the specs well enough, Claude Code will be able to 1 or 2 shot a custom version of this project for you. For humans’ sake, I’ll write out some general ideas about how I set up Scriba along with some interesting tidbits you might want to steal.

Scriba for humans

I’ve named my little guy “Scriba”, but it doesn’t really matter what you call him. The idea of “Scriba” is to have a daily running job which calls Claude Code each day to process snippets. So for a general flow, I quickly jot notes on my phone which gets synced to a folder using iCloud (you could use Google Drive, Dropbox, or your favorite cloud syncing service). Then I have a recurring service (cron/launchd/<YOUR THING>) which loops through all the snippets, checks if they’ve been processed, then if they haven’t, passes them through Claude Code which uses a command to either add events to my calendar, grocery list, or reminders.

Now if you’re a sane person, then you’re probably wondering, “hey, can’t you, warm blooded Ivy, just open the app yourself and add things?” And you’re right, except you forget that all programmers are obsessed with automating everything, so if I can reduce my phone time to clicking a single button on my lock screen, that’s what I’m going to do. If you’d like to replicate my setup exactly, I’m using an iOS app called “Funnel” which I can highly recommend! Does what it says on the tin and lets me go from thought in brain to quick jot in <1 second.

The core idea of something like this has been done thousands of times, but I think there are two magical things about Scriba:

  1. Intelligence as a primitive
  2. Recursive self improvement (!?!?)

The same way you can call print() to show something on a screen, now you can do llm() to get some intelligent service. For Scriba, that’s ingesting natural language and spitting out JSON commands which I can parse, and this pattern is extensible to any text -> anything pipeline. But even these are kind of limited in their scope. LLMs are a prototype Santa Claus Machine, and our engineering mindsets have not yet caught up to this. Even though LLMs are trained for text -> text, they’re truly anything -> anything machines which need some care and thought to keep them on the rails.

The other neat thing I did is that in addition to adding to my calendar and reminders, I have a special command called /update which lets the LLM update the initial prompt itself. Sometimes I like to jot blog ideas down and do them on the weekends, now with an update, that snippet becomes an enduring piece of knowledge about me that makes all future snippets better processed. Do you say “oh beans” in your notes because you’re British but don’t mean that to be a grocery item? /update. Using a new Calendar to separate out your underground BeyBlade tournaments? /update. When intelligence is a core primitive, not only can it do the tasks you want, but you can point it at itself to improve itself. prompt -> llm(prompt) -> prompt is a magical loop.

Q: But wait, isn’t this just adding chatbot memory? A: Kind of?

If we pretend the LLM didn’t exist and this was just a normal program, you could imagine an analogy that every time you make a code change, you’re storing a memory of a problem the program might encounter along with a solution to that problem. /update is the LLM analogy of making it so that rather than coding up a solution manually, we can use the tool to ensure all future encounters with problem X get solved with tool Y but in a loosey-goosey natural language sort of way.

Scriba for LLMs

If you’d like to “code” something similar, here’s a prompt to copy and paste. You can edit to your wishes, and I’ve left [SPACE] that you should edit to be what you want.

I want a project which goes through a folder of Markdown snippets and processes them. Each snippet should go into [WHERE YOU WANT TO GO (ex. reminders/calendar)]. You should process each snippet into an array of actions where an action specifies the location, date, time, and any extra info you deem necessary. In addition to the locations, there is a special command of [YOUR MAGIC WORD HERE] (ex. /update) where you should instead add to a list of custom rules to check in addition to your overall prompt. When you’re done processing a snippet, add #done to not process it again. [CUSTOM THINGS THAT I CAN'T PREDICT]