hlog

recipes: log from anywhere

small ways to log without opening hlog. most of them call the command line, so do install it and run hlog login once.

browser: save what you're reading

drag this link to your bookmarks bar: hlog this

on any page, select a sentence (or nothing) and click it. hlog opens with LEARN — “the quote” https://the-page ready, and the cursor after LEARN, so you write the takeaway in your own words. nothing is saved until you press enter. the quote and link go to hlog in the page address's #fragment, which never reaches the server; if you're logged out, the draft waits in your browser for 30 minutes while you log in.

log by voice

on your phone: open hlog.dev, tap the input and use the microphone on your keyboard (iOS and Android both have one). say the level first: "LEARN advisory locks are session-scoped". check the text, fix anything misheard, then press enter. lines can't be edited later, so the check matters. the transcription happens on your phone; hlog only receives the text.

with an assistant: if Claude or another assistant is connected to hlog, use its voice mode: "log that as a LEARN: advisory locks are session-scoped". it writes the line, marked via:claude (or the app's name). ask it to read the line back first if you want to check the wording.

hlog has no recorder of its own and never receives audio.

terminal

# bash / zsh: "til advisory locks are session-scoped"
til() { hlog learn "$*"; }

# PowerShell ($PROFILE)
function til { hlog learn ($args -join ' ') }

# log a release you just shipped
hlog win "shipped $(gh release view --json tagName -q .tagName)"

VS Code: a keyboard shortcut

add a task to .vscode/tasks.json (or your user tasks), then bind it in keybindings.json:

// tasks.json
{
  "version": "2.0.0",
  "inputs": [{ "id": "line", "type": "promptString", "description": "hlog (prefix LEARN, WIN, …)" }],
  "tasks": [{
    "label": "hlog",
    "type": "process",
    "command": "hlog",
    "args": ["${input:line}"],
    "presentation": { "reveal": "silent" }
  }]
}

// keybindings.json
{ "key": "ctrl+alt+l", "command": "workbench.action.tasks.runTask", "args": "hlog" }

JetBrains: settings → tools → external tools, program hlog, arguments $Prompt$, then give it a shortcut in keymap.

Raycast and Alfred

#!/bin/bash
# Raycast script command: save as hlog.sh in your script commands folder
# @raycast.schemaVersion 1
# @raycast.title hlog
# @raycast.mode silent
# @raycast.argument1 { "type": "text", "placeholder": "LEARN …" }
hlog "$1" && echo "logged"

Alfred: a workflow with a keyword (say hl, argument required) connected to a run script action: hlog "$1". to search, a second keyword running hlog grep "$1" into large type works well.

Obsidian, Logseq: copy into daily notes

make a token with read at settings → tokens, then append each line to the daily note for its date (dates are UTC):

curl -s "https://hlog.dev/api/export?format=jsonl" -H "Authorization: Bearer $HLOG_TOKEN" \
  | jq -r 'select(.level != "SYSTEM") | [.ts[0:10], "- \(.ts[11:16]) \(.level) \(.text)"] | @tsv' \
  | while IFS=$'\t' read -r day line; do echo "$line" >> "$VAULT/daily/$day.md"; done

this copies; hlog stays the original. run it on a fresh folder, or it appends the same lines again.

have a recipe that works for you? send it through feedback and it may end up here.

← all docs