Obsidian Rolodex ("obrol") is a small CLI written in Go to manage a contact database stored as Markdown files, designed to be browsed in Obsidian. Each contact is a Markdown file with a YAML frontmatter block containing fields like email, last contact date, and location.
- Reads configuration from a TOML file, pointing to your contacts directory.
- Lists contacts in a tabular view (Name, Last Contact, Email, Location).
- Adds new contacts with frontmatter keys present even when values are omitted.
- Updates existing contacts by case-insensitive, partial name match.
- Quickly marks a contact as contacted today via
touch.
- Go 1.24+
- With Make:
make build(binary atbin/obrol) - With Go:
go build -o bin/obrol ./cmd/obrol.go
brew tap dce/taps
brew install obrol
- Upgrade:
brew upgrade obrol
- Tags drive releases: create a tag like
v1.2.3and push. - GitHub Actions runs GoReleaser on tags to build macOS (arm64) tarballs, publish checksums, and push a Formula update to
vigetlabs/homebrew-taps/Formula/obrol.rb. - Version info is baked into the binary via ldflags and defaults to
devfor non-release builds.
Obrol expects a TOML config file specifying the directory that contains your contact Markdown files.
- Default path:
~/.config/obrol/config.toml - Override with:
-c /path/to/config.toml
Config file format:
# ~/.config/obrol/config.toml
basedir = "/absolute/or/relative/path/to/contacts"
Notes:
basedirmust exist and be a directory.- Relative paths are resolved relative to the current working directory.
~is expanded to your home directory.
Each contact is a Markdown file named by the contact's name, for example: Firstname Lastname.md.
Frontmatter (always present keys):
---
email: someone@example.com
phone: 555-1234
last contact: 2025-09-30
location: City/Region
---
Optional freeform notes below the frontmatter.
- The tool treats
email,phone,last contact(YYYY-MM-DD), andlocationas optional when reading; missing values display as blank in the list. - When adding contacts, these keys are written even if values are blank.
General form:
obrol [-c /path/to/config.toml] <subcommand> [args]
Scan basedir for *.md (and *.markdown) files and print a table.
obrol list
Example output:
Name Last Contact Email Phone Location
Ada Lovelace 2025-09-28 ada@example.com London
Create a new contact file named Name.md in basedir. The YAML frontmatter always includes email, last contact, and location keys (blank when not provided).
obrol add [--email EMAIL] [--phone PHONE] [--location LOCATION] [--last-contact YYYY-MM-DD] Firstname Lastname
Examples:
obrol add "Grace Hopper"
obrol add --email grace@example.com --phone 555-1234 --location "Arlington, VA" --last-contact 2025-09-01 "Grace Hopper"
If the file already exists, the command errors without overwriting.
Update frontmatter fields of an existing contact. Matching uses case-insensitive substring against the contact name (from the filename). If multiple matches are found, the command errors and lists them.
obrol update [--email EMAIL] [--phone PHONE] [--location LOCATION] [--last-contact YYYY-MM-DD] NameQuery
Examples:
obrol update --email new@example.com "ada"
obrol update --location "UK" Ada
After a successful update, a confirmation message is printed indicating which fields were changed.
Append or prepend a dated note section to a contact’s Markdown file. The date heading is inserted as ## YYYY-MM-DD followed by your note text.
obrol note [--prepend] [--touch] [--date YYYY-MM-DD] \
[-m TEXT ... | --file PATH | --stdin | --edit] NameQuery
Input modes (choose one; if none are given and stdin isn’t piped, $EDITOR opens):
-m, --message TEXT: Repeatable; each becomes a new line.-f, --file PATH: Read note content from a file.--stdin: Read note content from standard input (useful with pipes or here-docs).-e, --edit: Open$EDITORto compose the note.--touch: After inserting the note, also set "last contact" to today (same as runningobrol touch).
Examples:
obrol note -m "Met at lunch." -m "Follow up next week." Ada
obrol note --stdin Ada <<'EOF'
Met at the conference.
Discussed a pilot next quarter.
EOF
obrol note --file notes/today.txt "Scofield"
obrol note --edit --prepend --date 2025-09-30 "Dana"
obrol note --touch -m "Quick check-in call." "Grace Hopper"
Update a contact’s "last contact" date to today (YYYY-MM-DD). Matching uses the same case-insensitive substring behavior as update and note.
obrol touch NameQuery
Examples:
obrol touch Ada
obrol touch "Grace Hopper"
Fish completion script is included at completions/obrol.fish.
- Install:
make install-fish(copies to~/.config/fish/completions/obrol.fish). - Activate: start a new Fish session, or run
source ~/.config/fish/completions/obrol.fish. - Name suggestions: the completer queries
obrol listand extracts the Name column.- If your config is not at the default path, add
-c /path/to/config.tomlto the current command line so completions can find it.
- If your config is not at the default path, add
This project was developed with the assistance of ChatGPT for code generation.
MIT License -- see LICENSE for details.