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:
- Intelligence as a primitive
- 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#doneto not process it again.[CUSTOM THINGS THAT I CAN'T PREDICT]