andyreagan.com

Tools for thought

Guide that includes some of the following tools: https://nesslabs.com/how-to-choose-the-right-note-taking-app

Lots of amazing tools. EOD I believe in the File over app and am choosing Org mode as my go-to solution. Open question on how to best integrate this with academic sources.

Roam research

Backlinks: Tana

An "OG" tool for thought. Proprietary database. A lot of clones!

Logseq

Backlinks: Tana

Open source version of Roam, basically.

Tana

Backlinks: 2024-12-07

Closed format, all online. Feels a lot like Roam, but with AI integration.

tana.png

It imports from roam, logseq, and workflowy.

tana-import.png

Tried the free trial briefly on 2024-12-07.

Academic / bibtex tools

Backlinks: Productivity

Many tools exist more focused on managing references for academic writing. I've personally had a lot of good use of BibDesk. It's pretty basic but gets the job done for managing a .bib file.

Some other popular tools include zotero, jabref, etc. Love for bibdesk on the zettlekasten forum (web).

If we are taking notes and making links between academic articles, integrating that with LaTeX so these references can be pulled into a document/paper is something I'd like to be able to do; one of my core goals.

ObservableHQ

Inspired by File over app.

We use this extensively for the Berkeley iSchool MIDS course.

Notion

Backlinks: 2022-08-21

This seems like a pretty neat tool: databases + pages. Can link between the two. Is it possible to write JS? Maybe not plain, but you can really tie things together. Like the visual basic of our day…people can build nice look apps in it!

Obsidian

MCP servers for Obsidian

There's an "official" one and some dude's server that has more functions:

  • Unofficial: https://github.com/MarkusPfundstein/mcp-obsidian. Many tools:
    • listfilesinvault: Lists all files and directories in the root directory of your Obsidian vault
    • listfilesindir: Lists all files and directories in a specific Obsidian directory
    • getfilecontents: Return the content of a single file in your vault.
    • search: Search for documents matching a specified text query across all files in the vault
    • patchcontent: Insert content into an existing note relative to a heading, block reference, or frontmatter field.
    • appendcontent: Append content to a new or existing file in the vault.
    • deletefile: Delete a file or directory from your vault.
  • Official: https://github.com/smithery-ai/mcp-obsidian. Just two tools, read and search.

Org mode

Backlinks: 2022-08-21 | 2024-07-05 | Instuctions

Emacs, the OG.

  • Headings (and navigation)
  • Tasks (heading with special keywords like TODO)
  • Time tracking (via timestamp entries in the "drawer" of tasks)
  • Linking
  • Tagging
  • Tables
  • Exporting
  • Open/close section: TAB

Links are case-sensitive (easy to try and check, just link to this heading Org mode).

Backlink to <2024-07-05 Fri> when I started coming back to org mode. From the docs on tables/todos/tags:

  • 3. Table editor
    • Create a table from region: C-c |
    • Format row C-c C-c
    • New Hline: C-c - or C-c RET from end of previous
    • Sum a column: C-c +
  • 5. TODO basics
    • Cycle status: C-c C-t
    • Show all todos in current document: C-c / t
  • 6. Tags
    • Format is :tag:
    • How to show a sparse tree?

Linking

  • Switch link display: C-c L (refresh/switch buffer to see result)
  • Follow link: C-c C-o (or ENTER)
  • New link: C-c C-l

Linking: all links us [[][]] syntax. The docs (4. Linking) describe it.

To link between files, we can either use an automatically generated ID, a custom ID, or link to the heading directly (within-file or cross-file). With ID-based links, emacs will read all of our local, matching, files (.org files) and build an index. Using file name in the link is more brittle.

Example links using ID and CUSTOM_ID:

A SO post talks about using CUSTOM_ID instead of ID but I'm not sure that org-id itself will use the custom IDs in it's index. I tested this breifly and it didn't work (put the above custom id link into a different file and tried to follow it - didn't resolve). I like the human readability of the custom id, but doesn't seem like it's as well supported (maybe a flag in org-id could fix?).

  • Exploring super links / back linking

    It seems possible to auto back link with super-links, but it's either broken or not behaving how I'd expect it to.

    The steps I want are

    • Convert a heading to linkable (create id - ideally this is a nice slug), heading A
    • Don't need to relate it to itself, or backlink it to itself (though, don't care so much if it does)
    • Insert a link to that on another heading B
    • Automatically have insert the backlink on heading A from heading B

    Is this all parent-child? No - you can webs or things linking to each other, or being related.

    Publish some subset of things as a personal wiki. Some subset of those are blog entries.

    Two spaces: (1) blog and (2) wiki. They can link back and forth.

    Super links is close.

    So manually, my steps are:

    1. On heading A: org-id-get-create
    2. On heading A: org-id-store-link
    3. In heading B: org-insert-link
    4. On heading A: org-super-link-store-link
    5. On heading B: org-super-link-link

    Note that step 5 actually put the link from 3 in the related section of B.

    Let's try just doing 4 + 5. Maybe we can then snag it out of the related?

    Step 5 didn't work, having only done step 4. Let's try doing the get-create first. It's like it didn't store it?

    It worked with 1, 4, and org-super-link-insert-link. It worked with just 4 + org-super-link-insert-link. I think for 5, needs to be in the buffer.

    See also How to publish Org mode blog to HTML.

    You cannot continue headings after subheadings: https://stackoverflow.com/questions/30997099/in-org-mode-how-to-break-current-section-and-escape-to-upper-level

  • How to link in Org mode with automatic backlinks using org-super-links

    Backlinks: 2022-08-21 | 2024-07-05

    1. On the target copy the link "C-c s l".
    2. Where you want the link: "C-c s C-l".

    This creates the backlink as well in the drawer of the target.

    This uses org-super-links like

      (require 'org-id)
      (setq org-id-link-to-org-use-id 'create-if-interactive-and-no-custom-id)
    
      (use-package org-super-links
        :straight (org-super-links :type git :host github :repo "toshism/org-super-links" :branch "develop")
        :bind (("C-c s s" . org-super-links-link)
           ("C-c s l" . org-super-links-store-link)
           ("C-c s C-l" . org-super-links-insert-link))
        :config
        (setq org-super-links-related-into-drawer nil
          org-super-links-link-prefix nil))
    
    ;; Set markdown style for links
    (setq org-link-make-description-function 'org-link-make-string)
    ;; Toggle link display
    (global-set-key (kbd "C-c L") 'org-toggle-link-display)  
    

Online versions of org mode

iOS versions:

  • Plain org iOS app did not work well for me.
  • Beorg
  • A few more in the app store, I haven't tried
  • Org mode files on iOS

    If using Git - Working Copy is really nice. The files are copied fully onto the iOS device, so they work with Plain Org.

    Could just use iCloud to sync.

    I put my files on my Synology NAS, and turned on WebDAV. This works well with beorg, but only within the network… beorg doesn't go through tailscale.

    Using the SMB connection in the iOS Files app, then connect beorg to that. Seems to work! I'm editing these files right now via emacs on mac, through synology drive (with pinned files, this is faster than SMB or WebDAV).

Timestamps in org mode

https://emacs.stackexchange.com/questions/10504/understanding-scheduled-in-org-mode

there are three ways to attach a date to an Org entry:

A plain timestamp, C-c .: This is used for things like appointments where the entry occurs at a specific date/time. Such an entry will show up in the agenda on the specified day, and will not show up after that day has passed. Note that an appointment in the past won't keep showing up on your agenda regardless of whether you mark it DONE: if you didn't go to your doctor's appointment yesterday, that doesn't mean you still have one today!

A SCHEDULED timestamp, C-c C-s: This is used to indicate when you intend to do the task. It will show up on the agenda on the scheduled day. If you don't complete the task at that time, it will continue to show up on the agenda on the following days to show you that you have not completed something that you planned to do.

A DEADLINE timestamp, C-c C-d: This is used to indicate when something must be completed. Typically you want to see deadlines ahead of time, so that you can do whatever it is that must be done to meet them. Like a scheduled entry, if you miss a deadline it will continue to appear on the agenda as past due.

(Strictly speaking there is a fourth option: an inactive timestamp, C-c !. This is when you want to attach a date to an entry but do not want it to show up in the agenda at all. Inactive timestamps have no special behavior.)

Org-roam

Org-roam, while a cool idea, introduces a sqlite database to work! While I also like sqlite, this makes org-roam an app, not just a file (File over app): it would be a lot of work to properly process this db to rebuild the "app". We can use Datasette to take a look at some testing, where we got 3 files with 2 nodes, populating 5 rows in 2/7 tables:

Screenshot-2024-07-08-01-53-31-PM.png
Figure 1: We populate 5 rows in the org-roam database with our testing.
Screenshot 2024-07-08 at 1.54.56 PM.png
Figure 2: The nodes table has the two reference we created.
Screenshot 2024-07-08 at 1.54.39 PM.png
Figure 3: And the files contains all three files we've been using as well.

The structure in 13 isn't crazy, but it's more than we need.

Drawers

Store things like properties, todo state (metadata, broadly).

Apparently they can be in the middle of an entry:

:EXISTS: true

With stuff after them.

Code

Added python to org-babel in org startup.

print("hello")

But this doesn't work because I don't have plain "python" as a global on my system. The above results are empty because there was an error. Need to invoke a venv for it to work.

Org attach

See file list by executing:

(org-attach-file-list (org-attach-dir))

Automatically include a list of attached files with

(defun org-attach-save-file-list-to-property (dir) "Save list of attachments to ORGATTACHFILES property." (when-let* ((files (org-attach-file-list dir))) (org-set-property "ORGATTACHFILES" (mapconcat #'identity files ", ")))) (add-hook 'org-attach-after-change-hook #'org-attach-save-file-list-to-property)

See correspondence: https://list.orgmode.org/87sg70vsvy.fsf@localhost/

Example of using it here: How to Be a Happy 85-Year-Old (Like Me).

Cahier

https://getcahier.com/

Cahier is a desktop application that enables advanced note-taking and bibliography management in the same tool.

Citation management

See thoughts on Archiving solutions.

Archivebox could be interesting as a local complement to archive.org.

I'm using the Chrome singlepage plugin to download copies of sources, along with org-attach to create directories to host things.

Things

Backlinks: Daily <2024-12-30 Mon>

<2024-12-30 Mon>

Very polished apple todo thing.

Docs

<2025-04-14 Mon>

Not Google docs, another one.

See Docs – Open source alternative to Notion or Outline.

Znote

<2024-07-02 Tue>

Docmost, open source Notion

<2024-07-03 Wed>

Johnny Decimal

Backlinks: Johnny Decimal

<2025-04-14 Mon>

More of an organization system than a tool for thought.

DIY Your PKMS

Blog post Ditching Obsidian and building my own.

Nice write up of the history and context of PKMS. Basically a markdown editor and a database, which is cool.

https://amberwilliams.io/blogs/building-my-own-pkms

HN: https://news.ycombinator.com/item?id=44022448

Dataview in Obsidian is a lot like the agenda of org mode: https://obsidian.rocks/dataview-in-obsidian-a-beginners-guide/

Writing as thinking

File over app

Backlinks: 2022-08-21 | 2024-07-05 | ObservableHQ | Some Love For Interoperable Apps

See the article (web).

> File over app is a philosophy: > if you want to create digital artifacts that last, > they must be files you can control, > in formats that are easy to retrieve and read. > Use tools that give you this freedom. > > File over app is an appeal to tool makers: > accept that all software is ephemeral, > and give people ownership over their data.

He's working on Obsidian, but this applies to Org mode.

This even applies to ObservableHQ's static site builder, and Mike Bostock says as much on their HN launch.

Last modified: May 21, 2025