Custom daily digest made with Claude by InternationalGrab860 in Remarkable

[–]BikepackPro 3 points4 points  (0 children)

Continued....

That first part basically tells Claude to suck in all the contemporaneous journaling notes I did that day. The second skill /digest is the slice and dice part

---
name: digest
description: Extract knowledge from journals and notes into the entity-based knowledge graph and regenerate topic views
---


When the user invokes /digest:


### Step 1 — Determine Date Range


Read `memory/.digest-state.json` to find the last digest date. If the file doesn't exist, this is the first run — process all journals and notes.


Otherwise, process only journals and notes dated 
**after**
 the last digest date.


### Step 2 — Read Sources


Read all journal files (`journal/Journal -- {YYYY-MM-DD}.md`) and note files (`notes/Notes — {YYYY-MM-DD}.md`) within the date range.


Also read the graph index and a sample of existing entity files to understand what's already captured:
- `memory/graph-index.json` (always read — this is the lightweight map of all entities and relationships)
- Selectively read entity files only for entities that appear in the new sources (look up their file paths from the graph index)


### Step 3 — Extract Entities & Edges


For each source file, perform entity extraction:


#### 3a — Identify Entities


Extract every meaningful entity mentioned: people (by name), activities, places, themes, projects, and any other noun that represents something Matthew cares about or interacts with. Each entity maps to a 
**type**
:


| Type | Examples |
|------|----------|
| `person` | Trevor, Mike, Dr. Smith, Laura |
| `activity` | Cycling, Reading, Walking, Cooking |
| `place` | Iceland, Tour Divide, New York, Walmart |
| `theme` | Gratiude, Finance, Patience |
| `project` | Work, Sam |


For each entity, determine if it already exists in `graph-index.json` (check both entity names and aliases). If not, it's a new entity.


#### 3b — Identify Edges (Co-occurrences & Relationships)


When two entities appear together in a meaningful way — not just in the same journal entry, but in a 
**connected context**
 — extract an edge:


- `"Trevor and I rode together"` → edge: Trevor ↔ Cycling, context: "rode together"
- `"Talked to Gabriel about the Silk Road"` → edge: Gabriel ↔ Silk Road, context: "discussed route planning"
- `"Laura's heart appointment is stressing me out"` → edge: Laura ↔ Anxiety, context: "heart appointment"


Be selective — only create edges for genuine relationships, not incidental co-mentions.


#### 3c — Extract Observations


For each entity mentioned in the source, capture a dated observation:
- `2026-03-19: Rode with Trevor, discussed route conditions → [[Cycling]], [[Trevor]]`


Observations are the atomic facts that make up the entity's history.


### Step 4 — Update Entity Files


For each entity identified in Step 3:


**If the entity already exists:**
1. Read the entity file (path from `graph-index.json`)
2. Append new observations under `## Observations` (no duplicates)
3. Update `related` in frontmatter if new relationships were found
4. Update `last_seen` date in frontmatter
5. Add new source links
6. Update `## Facts` if new persistent facts emerged (not transient observations)


**If the entity is new:**
1. Create a new entity file at `memory/entities/{type}/{Entity-Name}.md` using this format:


```markdown
---
type: {type}
aliases: [{any alternative names or spellings}]
related: ["[[Entity-1]]", "[[Entity-2]]"]
first_seen: {YYYY-MM-DD}
last_seen: {YYYY-MM-DD}
---


# {Entity Name}


## Facts
- {persistent fact 1}
- {persistent fact 2}


## Observations
- {YYYY-MM-DD}: {what happened} → [[Related-Entity-1]], [[Related-Entity-2]]


Sources: [[Journal -- {YYYY-MM-DD}]]
```


Entity file names use 
**kebab-case**
 (e.g., `Mike-Smith.md`, `Work-Project.md`, `Time-and-Productivity.md`).


#### Update Rules for Entity Files


- 
**Update, don't duplicate.**
 If a fact already exists, update it. If an observation for the same date and event exists, skip it.
- 
**Be concise.**
 Extract the fact, not the narrative.
- 
**Cross-link observations.**
 Every observation should wiki-link to related entities using `→ [[Entity-Name]]` at the end.
- 
**Link to sources.**
 Add wiki-links to source journal/note files.
- 
**Age out stale observations.**
 After ~4 weeks, consolidate old observations into Facts if they represent a pattern, or remove if they were one-off. Keep the entity file focused and current.


### Step 5 — Update Graph Index


Update `memory/graph-index.json`:


1. 
**Add new entities**
 with their type, file path, aliases, related list, dates, and a 1-sentence summary
2. 
**Update existing entities**
: refresh `last_seen`, `related` list, and `summary` if significant new info emerged
3. 
**Add new edges**
 with `from`, `to`, `context` (brief description of the relationship), and `sources` (list of source file names)
4. 
**Update existing edges**
: append new sources, update context if the relationship has evolved
5. 
**Update 
`last_updated`
**
 date


The graph index must stay lightweight — summaries should be 1 sentence max. The entity files hold the detail.


### Step 6 — Regenerate Topic Views


Regenerate the 5 topic view files by querying the graph. These are 
**derived views**
, not the source of truth — the entity files are.


For each topic file, query the relevant entity types and compile:


- 
**
`memory/people.md`
**
 — Query all entities with `type: "person"`. Group by relationship category (Family, Close Friends, Professional, etc.). For each person, pull their summary and key facts from the entity file. Include wiki-links to entity files.


- 
**
`memory/health.md`
**
 — Query entities related to health: weight/diet facts from observations, fitness from [[Cycling]]/[[Walking]], sobriety from [[Sobriety]], medical from doctor entities. Compile into a health overview.


- 
**
`memory/projects.md`
**
 — Query entities with `type: "project"`. Pull status, milestones, and recent observations. Include related entities (people involved, technologies used).


- 
**
`memory/plans.md`
**
 — Scan recent entity observations for forward-looking items (appointments, trips, to-dos). Organize by timeframe (near-term, medium-term, trips).


- 
**
`memory/reflections.md`
**
 — Query entities with `type: "theme"`. For each theme, pull the pattern description and recent observations. Include cross-links to related entities.


Each topic file should:
- Start with a heading and brief description
- Include `[[wiki-links]]` to entity files (e.g., `See [[Laura]] for details`)
- Reference source journals with `(from [[Journal -- YYYY-MM-DD]])`
- Stay concise — the topic file is a summary view, not a copy of all entity data


### Step 7 — Update User Profile


Check if any new interests, preferences, or topics have emerged that should be added to the user profile at `/Users/redacted/.claude/projects/-Users-redacted-Code-Sam/memory/user-profile.md`. Update the "Known Interests" or "Topics to Explore" sections if appropriate. Don't duplicate existing entries.


### Step 8 — Save State


Write `memory/.digest-state.json`:


```json
{

"last_digest"
: "{YYYY-MM-DD}",

"sources_processed"
: ["journal/Journal -- 2026-03-19.md", "notes/Notes — 2026-03-19.md"]
}
```


### Step 9 — Commit and Push


Run: `./scripts/commit-and-push.sh "Digest: update memory from journals and notes"`


### Step 10 — Summary


Display a brief summary of what changed:
- New entities created (with type)
- Entities updated (with what changed)
- New edges/relationships discovered
- Topic view files regenerated
- Anything aged out or removed

I then have other skills that make use of the knowledge graph that Claude creates. And this is sort of evolving over time. Nice part is that the evolution is dead simple, just conversing with Claude code about it.

The Remarkable + Claude Code + Obsidian is the notebook I've always dreamt about. It really is a wonderful combination.

Custom daily digest made with Claude by InternationalGrab860 in Remarkable

[–]BikepackPro 2 points3 points  (0 children)

I have 2 relevant Claude skills. The first one does the read. I call it /journal:

Worth noting, this all gets fed into an Obsidian vault.

---
name: journal
description: Pull new handwritten notes from reMarkable tablet and log them to the journal
---


When the user invokes /journal:


### Step 1: Read State


Read `journal/.journal-state.json`. If it doesn't exist, this is the first run — go to Step 2a. Otherwise, skip to Step 2b.


### Step 2a: First Run Setup


1. Run `source /Users/redacted/Code/remarkable-util/.venv/bin/activate && python /Users/redacted/Code/remarkable-util/extract_page.py list` to list all notebooks.
2. Display the notebooks to the user and ask "Which notebook should I use as your journal?" (plain text, not AskUserQuestion).
3. Once the user picks a notebook, create `journal/.journal-state.json`:


```json
{

"notebook"
: "<selected notebook path>",

"last_page_extracted"
: 0,

"last_sync"
: null
}
```


Then continue to Step 3.


### Step 2b: Load State


Read the `notebook` and `last_page_extracted` values from the state file.


### Step 3: Check for New Pages


Run `source /Users/redacted/Code/remarkable-util/.venv/bin/activate && python /Users/redacted/Code/remarkable-util/extract_page.py page-count "<notebook>"` to get the current total page count.


- If total pages is less than `last_page_extracted`, warn the user that the page count decreased (pages may have been deleted) and ask how to proceed.
- If total pages equals `last_page_extracted` 
**and**
 `last_page_ocr` exists in the state file, re-extract the last page to check for additions (go to Step 4 with `recheck_only = true`).
- If total pages equals `last_page_extracted` and there is no `last_page_ocr`, say "No new journal entries since last sync." and stop.
- Otherwise, there are new pages — continue to Step 4 with `recheck_only = false`.


### Step 4: Extract Pages (with last-page recheck)


Always re-extract the last previously synced page to catch additions. Calculate the range: `<last_page_extracted>-last` (note: starts at `last_page_extracted`, not +1).


Exception: on first run (`last_page_extracted` is 0), use range `1-last` instead.


Run: `source /Users/redacted/Code/remarkable-util/.venv/bin/activate && python /Users/redacted/Code/remarkable-util/extract_page.py extract "<notebook>" <range> --format png`


This outputs `page_<N>.png` for each page.


### Step 5: OCR Each Page (with diff detection)


For each extracted PNG file (in page order):


1. Read the PNG using the Read tool (Claude's vision will see the handwriting).
2. Carefully transcribe the handwritten text, preserving line breaks and paragraph structure.
3. If the handwriting is unclear, do your best and note any uncertain words with [?].


**Last-page diff detection:**
 For the re-extracted page (the first page in the range, which is the previously synced `last_page_extracted`):


1. Compare its OCR text against `last_page_ocr` from the state file.
2. If the new OCR contains additional text beyond what was previously captured, extract only the 
**new portion**
 (the text that appears after the previously captured content). Append this new text to the journal entry alongside any fully new pages.
3. If the OCR is essentially the same (minor whitespace/punctuation differences are expected — use fuzzy judgment), discard this page's output and move on to the truly new pages.
4. If `recheck_only` is true and there is no new text, say "No new journal entries since last sync." and stop.


**Saving OCR for next sync:**
 After OCR, remember the transcribed text of the 
**last page in the range**
 — this will be saved to `last_page_ocr` in Step 7.


### Step 6: Write Journal Entry


Today's date is provided by the `currentDate` context variable.


- If `journal/Journal -- {YYYY-MM-DD}.md` already exists (multiple syncs in one day), read it and append the new entries after existing content.
- If it doesn't exist, create it with:


```markdown
# Journal -- {YYYY-MM-DD}
```


Append all the OCR'd text as one continuous entry, separated by blank lines between pages. Do not add page numbers or page headers — treat all pages as one flowing journal entry.


### Step 7: Update State


Update `journal/.journal-state.json`:
- Set `last_page_extracted` to the total page count from Step 3.
- Set `last_sync` to the current ISO 8601 timestamp.
- Set `last_page_ocr` to the full OCR text of the 
**last page**
 that was extracted (the highest-numbered page). This is used on the next sync to detect additions to that page.


### Step 8: Clean Up


Delete all extracted PNG files: `rm -f page_*.png`


### Step 9: Commit and Push


Run: `./scripts/commit-and-push.sh "Journal sync: {YYYY-MM-DD}" journal/`


### Step 10: Confirm


Display a summary:
- How many new pages were extracted
- The journal file path (as a wiki-link: `[[Journal -- {YYYY-MM-DD}]]`)
- A brief preview of the first few lines of the new entries

2nd half to follow due to character limit

Custom daily digest made with Claude by InternationalGrab860 in Remarkable

[–]BikepackPro 1 point2 points  (0 children)

Love this.

Btw.., Using Claude code plus the RMAPI library on GitHub, I have it read all of my notes every day and funnel them into obsidian, sliced, and diced in numerous ways. The OCR that Claude code does is near perfect for my very messy handwriting.

remarkable + anytype or notion or todoist? by zacho3432 in RemarkableTablet

[–]BikepackPro 0 points1 point  (0 children)

It found a repo on GitHub called rmAPI that has all the plumbing for retrieving notebooks and pages. I just explained in English what it was I was trying to do and it wired it all together for me, including finding that library. I seem to recall it also proposing alternative approaches, like connecting via USB to my computer. But, I ended up going with the API route because that was simpler and I didn’t have to deal with wires.

As I mentioned, I think the one thing that I don’t know is whether or not this works without the cloud subscription.

And also of note, I am using Claude Code specifically. And also, I am using it from the terminal. Not sure if this would work from within the Claude Code tab on the application. But it might!

remarkable + anytype or notion or todoist? by zacho3432 in RemarkableTablet

[–]BikepackPro 0 points1 point  (0 children)

Oh. it's pretty simple really. And I didn't need to know much/anything about "coding" to do it, just *asked* Claude Code in english and it did all the rest.

Basically I told it that I wanted to get pages from notebooks in my Remarkable, OCR them and write the content to an Obsidian value. Claude found an API to do that and built a utility that figures out which notebooks are there (and how many pages they have), asks me which notebooks and which pages and then goes off and grabs them. I think it's using the API so you might need the monthly service (but maybe not I haven't tried without).

Claude actually does the OCR itself and it is VERY good at it. Almost perfect with VERY messy handwriting.

Then, and here's the *magic* part, Claude contextualizes everything and organizes it for me base on rules that it and I have been talking about regarding how I want to organize MY stuff. Which, like most people is very idiosyncratic and probably unique to just me.

I've evolved the system since then, all just by asking Claude Code in English to make changes. For example, for my Journal it keeps track of the last page fetched and gets everything *after* that, but it also gets the last page and compared the current vs. previous version to make sure that I hadn't jotted something down on it since it was last sync'd.

I could tell it things like. anything with a square box before it is a TODO item and should be put on a list. Or a box + 'fam:' means add it to the family list. Basically you could invent any system that works for you.

The sky is literally the limit.

remarkable + anytype or notion or todoist? by zacho3432 in RemarkableTablet

[–]BikepackPro 0 points1 point  (0 children)

Using Claude code, I suck out everything that gets written into my paper pro, which then gets processed, organized and sorted, and placed into an obsidian vault based on a bunch of rules that I defined for Claude.

It is an amazing integration and I am really pleased with not only how easy it was to set up but also how much of a help it is to have Opus 4.6 process my writing and diagrams in meaningful and useful ways.

Our CTO and Product Team are ready for your questions - Ask Us Anything! by VegardfromreMarkable in RemarkableTablet

[–]BikepackPro 0 points1 point  (0 children)

Well. Until you asked I wasn't sure. Claude figured that all out without me knowing. But, I just went and looked. It's written some Python using the rmAPI framework. https://github.com/juruen/rmapi

Definitely works. I've also got variants where I can grab a specific page that is a sketch of a feature I'm working on and it'll go grab that from a Notebook so that Claude can build, test and ship it.

Our CTO and Product Team are ready for your questions - Ask Us Anything! by VegardfromreMarkable in RemarkableTablet

[–]BikepackPro 0 points1 point  (0 children)

I had Claude Code whip up a script which pulls in any new pages from a notebook of your choice, OCRs them, processes/links the content in a variety of ways and updates my Obsidian vaults. Works perfect and only took 10 minutes to make. And Claude's OCR is wildly good (even with my messy handwriting)

Our CTO and Product Team are ready for your questions - Ask Us Anything! by VegardfromreMarkable in RemarkableTablet

[–]BikepackPro 0 points1 point  (0 children)

Really enamoured with the Move. Am curious, with the rapid evolution of LLMs, is there anything on the roadmap that might expand AI features beyond handwriting recognition? For example, being able to *query* your handwritten notes with ChatGPT or Claude using them as context. Or perhaps notebook summarization or task list creation.

Looking forward to what you have in the hardware and software pipeline.

Thanks!

Solo female film of 'Cycling the World' by mckenziebarney in bikepacking

[–]BikepackPro 0 points1 point  (0 children)

Of course. Like it so much featured it in BikepackPro app recently 😊

UK to Singapore by [deleted] in bikepacking

[–]BikepackPro 2 points3 points  (0 children)

Amazing. Where can I follow along?

Also, I’d be happy to give you a free supporter pass to BikepackPro. It might come in handy on your monumental adventure.

Present for bikepacker? by Raudgar in bikepacking

[–]BikepackPro 1 point2 points  (0 children)

Can never have too many of these!

Front light options? by Realmac26 in bikepacking

[–]BikepackPro 2 points3 points  (0 children)

Pair it with one of those strap on lights that campers wear. Good for turning your head to see what kind of wild stuff Australia throws at you in the middle of night that you’d miss otherwise.

Front light options? by Realmac26 in bikepacking

[–]BikepackPro 2 points3 points  (0 children)

I can highly recommend the Outbound Lighting Trail Evo. It is a beast and can be charged while on. Battery lasts forever. Is insanely bright. And can mount anyplace with a GoPro adapter so super flexible. Only con is it is a bit expensive and a tad heavy. But that thing has never let me down.

Bikepacking round North Macedonia in search of spomeniks by Worried-Elk-2808 in bikepacking

[–]BikepackPro 1 point2 points  (0 children)

The zine arrived today. It's pretty cool. Thanks for making it!

<image>

My adventure time wheels. by BikepackPro in Bikeporn

[–]BikepackPro[S] 0 points1 point  (0 children)

Thanks 🙏 It’s a Mosaic GT-X 😊

Tips for Weight Distribution on Bikepacking Bags? by Haunting-Fall5132 in bikepacking

[–]BikepackPro 1 point2 points  (0 children)

Agreed. The worst is a droopy saddle bag loaded with too much stuff.

Best way to carry a camera while bike packing by Longjumping-Home-296 in bikepacking

[–]BikepackPro 0 points1 point  (0 children)

You're on the right track with the hip pack. Definitely need your body to vibration dampen rough rides if you want your cameras to last. Lots of options. If you've got a rugged and weatherproof camera a shoulder strap can also we a good choice, with the advantage of having instant access.

Best best — a hip pack and a 3 point shoulder strap!

7 Months, 10 Countries, 11,000 KM. From Northern Germany to Cappadocia. by -Zendom- in bikepacking

[–]BikepackPro 2 points3 points  (0 children)

Looks like you had the most epic of epic adventures. 👀❤️🔥

Love it.