Memos
Usage

Shortcuts

Save frequently used filters so you can switch views quickly.

Shortcuts save filter expressions for quick reuse. They are useful when you repeatedly open the same slice of your memos, such as work items, incomplete tasks, or recent public posts.

Create a shortcut

Shortcuts are created and managed on the dedicated Shortcuts page, which you open from the shortcuts section of the home sidebar.

  1. open the Shortcuts page and choose Create shortcut
  2. give the shortcut a clear title
  3. enter a filter expression
  4. choose Validate to dry-run the expression — this checks the filter without saving, so you catch typos before committing
  5. Save the shortcut

Title and filter are both required, and an invalid expression is rejected on save.

Saved shortcuts appear in the shortcuts section of the home sidebar. Select one to apply its filter to your memo list; the active filter also syncs to the URL, so you can bookmark or share the resulting view. You can also start a new shortcut straight from an active filter — the form opens prefilled with the current expression.

Edit and delete shortcuts

The Shortcuts page lists every saved shortcut with its title and filter. Each row has a menu to:

  • Edit — load the shortcut back into the form to change its title or filter
  • Delete — remove a shortcut you no longer use, after a confirmation step

Filter expression syntax

Shortcuts use CEL (Common Expression Language) filter expressions. A shortcut filter must evaluate to true for memos you want included.

Supported fields

FieldTypeExample
contentstringcontent.contains("meeting")
creatorstringcreator == "users/john"
creator_idintegercreator_id == 42
created_tsintegercreated_ts >= now() - 86400
updated_tsintegerupdated_ts >= now() - 3600
visibilitystringvisibility == "PUBLIC"
pinnedbooleanpinned
tagsstring list"project/backend" in tags
tagstring list aliastag in ["work"]
has_task_listbooleanhas_task_list
has_linkbooleanhas_link
has_codebooleanhas_code
has_incomplete_tasksbooleanhas_incomplete_tasks

Operators and functions

  • comparisons: ==, !=, <, <=, >, >=
  • logic: &&, ||, !, and parentheses ()
  • membership: tag in ["work", "team"], "project/backend" in tags, visibility in ["PUBLIC", "PROTECTED"]
  • functions: content.contains("text"), size(tags), now()

Boolean fields can be used directly without == true:

pinned && has_incomplete_tasks

Tag matching

Use tag in [...] when you want to match one or more tag trees:

tag in ["work"]
tag in ["project", "team"]

tag in ["project"] also matches nested tags such as project/backend.

Use tags.exists() for more specific tag patterns:

tags.exists(t, t.startsWith("archive"))
tags.exists(t, t.endsWith("/bug"))
tags.exists(t, t.contains("todo"))

Time-based filters

Timestamps use Unix seconds. You can compare against fixed values or now() arithmetic:

created_ts >= now() - 3600
created_ts >= now() - 7 * 86400
updated_ts >= now() - 60

Example shortcuts

NameFilter
Work TODOstag in ["work"] && has_incomplete_tasks
Public postsvisibility == "PUBLIC"
Posts with linkshas_link
Recent notescreated_ts >= now() - 7 * 86400
Team updatestag in ["team"] && visibility == "PROTECTED"
Unfinished taskshas_task_list && has_incomplete_tasks
Pinned references`pinned && (has_link
Active projectstags.exists(t, t.startsWith("project")) && !tags.exists(t, t.startsWith("archive"))

Good shortcut patterns

  • incomplete tasks for one project
  • pinned or high-signal memos
  • public notes you review before sharing
  • recent memos from a time window
  • resource collections with links or attachments

Management tips

  • keep names short and obvious
  • delete stale shortcuts you no longer use
  • update filters when your tag vocabulary changes
  • prefer a few durable shortcuts over dozens of narrow one-off views

Limits to remember

Shortcuts are personal workflow tools. They are most useful on the home view and should reflect how you naturally revisit content rather than every theoretical filter you could build.

Unsupported patterns include regular expressions, all(), filter(), map(), and date string parsing. Use Unix timestamps or now() arithmetic instead.

On this page