There's also the cross conversation memory search, which uses a different conversation dataset (the Claude Web / Claude.AI conversations) than Claude Code does. I'm not even sure Claude Code does cross conversation search?
The Desktop interface also presents Markdown as formatted text and presents artifacts (especially interactive ones) better than the CLI can.
All that said - I actually use the CLI for nearly everything (even on Windows). Rather than use Claude Desktop for daily "routines" that are capped at 15 total cron-jobs and use extra usage credits, I think I'll continue building my own minimal harness and move my routines to models from other providers.
It (Claude Code) does, I discovered it by accident recently, having never used daily routines before. Haven't touched Claude Desktop at all, outside of playing with it for 30 mins or so months ago.
TLDR: I used Claude Code to build a command that scrapes job postings from a few employers I am interested in (it is a bit more complicated than that, but that's the gist). At the end CC asked me "do you want me to re-run it daily?" I said yes, and it generated a daily routine and gave me a URL to my anthropic account page where I can see all my daily routines.
There, it says that I am currently using up 1 out of 15 "free" daily routines that come with my personal subscription, and I would have to pay extra if I want to have more than 15 active at a time (I assume by switching to per-token pricing for anything beyond 15, but not sure).
I also haven't touched routines, but I use cc to write automation tasks that will integrate a model when I need an inference layer. Which I also did before routines..
Have people actually been using routines effectively?
This is one of the first things I “fixed” with skills and hooks. I index every conversation in SQLite and have a skill which knows what to do when I ask it to search the index. I had to avoid the word memory because it’s too tied up in other parts of the context. It even indexes across my different machines. I set this up because I have terrible context discipline. I’ll go off on a tangent in one context and start planning and sometimes implementing something based on that thread which really deserves its own context. Afterward I can create the new context and move relevant bits to it, but I’d lose that initial starting conversation which inherently has more data than the summary in the new context.
I also use a few different related contexts. One where I’m building a game engine in zig and another talking about game ideas. There’s a lot of back and forth going on there which needs some shared context. I solve this with a combination of Claude.md references and that searchable session index.
Everything I do with scheduled tasks are just wired up with systemd and simple scripts. No LLM in the critical execution path. Again a skill tells CC how I manage those scheduled things so I just have to say something like “run this every day at midnight” and CC has reliably taken care of the rest.
2. Scheduled tasks that run locally ( https://support.claude.com/en/articles/13854387-schedule-rec... ) importantly different from Claude Code routines
3. Multiple projects/isolated memories in the same folder
4. Better UI
I cannot stand this and do not know how to start a new project/session in a new folder. Even if I select a new folder in the UI when typing the first prompt of a new session, it keeps going back to the first folder I created. For this reason alone I am thinking of going to the CLI. But if anyone has any answers, I am all ears.
What do people do with these? I don't use Claude but when I did I couldn't think of anything useful to do with the routines. I'm probably not being imaginative enough.
Nothing I can't do myself (and generally I do keep an eye on that sort of thing), but it did catch a holiday for my foreign team members that seemed to have gone unnoticed, and remarked about a status mismatch between Jira and source control that made the dashboard misrepresent progress. It's not much, but it's an extra little check that works quite well.
Another trick I'm experimenting with is having Claude rebase my open PRs waiting for review every day, and auto-solving conflicts when they arise. I don't trust it enough to let it push code to the repository, but I think I have the prompt set up in such a way that I might soon start using it.
Things like "this is a holiday in country X but only for people living in province Y except for in town Z" are massive pain to script. Plus, if the issue tracker and source control automation were working correctly, I wouldn't need to read the status of both to get a good understanding of the situation. Any time scripting there should probably be spent (by someone else) on fixing the problem in the first place.
When Claude eventually doubles or triples the token cost to stop hemorrhaging money, I'm going to lose these scripts and I won't be upset about it in the least. But until then, my "somewhat understanding of context" script-but-not-really setup is proving quite useful.
0 8 * * 1-5 claude -p "Fetch my unread emails from the last 24 hours, identify urgent items, and provide a bulleted summary." >> ~/desktop/daily_email_summary.txt
(Courtesy of Gemini, not Claude code, as I'm on my phone).Now, obviously - you might want something a little more elegant; but my point was that if you already grant Claude tool access to your email, slack etc - then it should be trivial to wrap it in a script, and run that from Cron.
I wouldn't do that; I don't trust Claude code with access to my mail (nor would I trust Claude desktop - but I don't use it anyway).
But, if you do trust Claude to read your slack and email, I don't see why Claude code couldn't do this for you almost out of the box?
I've gotten good results using it at work for keeping track of expense receipts. I dump them into an "Inbox" folder and Claude will OCR them, convert any images to PDF, rename, and move them into year/month/date folders and classify them (cost centers, based on a mapping and examples I gave it). This runs daily, checking the Inbox directory for new items.
My next step is getting it to pull them from my email automatically for me as well, or from a specific alias so when I take a pic of a receipt on the go I can just email it and have Claude rename and organize it for me, then it all gets sent off to AP at the end of the month.
Non technical knowledge workers have all kinds of little admin tasks like that which Cowork can do for them, where previously they lacked the skills or will to just learn some python and script it themselves.
Haven’t set it up because I’m horrified by the thought of it reading my mail. Doubly so if it decides to do anything other than telling me if I missed something important.
They all have pros and cons. Pick the one that suits you best. Then you're also agent harness flexible (I use opencode).
> [1]: Was jai written by an AI coding agent? No. While this web site was obviously made by an LLM (ChatGPT read the man page, asked some follow-up questions, and produced a prompt from which claude code built a vitepress site), jai itself was hand implemented by a Stanford computer science professor with decades of C++ and Unix/linux experience. As an experiment, the author did previously try vibe-coding a container, but the results were disastrous and repeatedly put his machine in a state that required a reboot (e.g., recursively changing the attributes of all mounts in the wrong mount namespace). The author does use coding agents to look for bugs, get feedback, and develop tests. However, rest assured that a single human understands every line of C++ in jai.
Sandboxing a GUI is typically more operational overhead than sandboxing a cli (mounting compositor sockets, GPU access, etc).
Casual mode [3]: > Your home directory is mounted as a copy-on-write overlay. The jailed process sees your real files, but writes go to $HOME/.jai/default.changes instead of modifying originals, except in the directory where you ran jai. Your current working directory grants full read/write access to code in the jail (unless suppressed with -D). So files deleted there are really gone. /tmp and /var/tmp are private. The rest of the filesystem is read-only.
Strict mode [4]: > The process runs as the unprivileged jai system user, not as you. Home directory is an empty private directory at $HOME/.jai/<name>.home. Granted directories (via -d or cwd) are exposed with id-mapped mounts — files look like they are owned by jai inside the jail. Because the process has a different UID, it cannot read files outside your home directory that are only accessible to your user — this is where confidentiality comes from.
Bare mode [5]: > Home directory is an empty private directory, like strict mode. But the process runs as your user, not as jai. This means it cannot provide confidentiality — the process can still read any file accessible to your UID outside the home directory.
I've always ran my stuff in casual so far just so my whole computer doesn't get rimraffed :P. but I'm thinking of switching to just strict mode, but haven't really vibe coded in a while so I haven't tried it yet.
[1]: https://jai.scs.stanford.edu/
[2]: https://jai.scs.stanford.edu/modes.html
[3]: https://jai.scs.stanford.edu/modes.html#casual-mode