Skip to content

Latest commit

 

History

History
110 lines (78 loc) · 3.11 KB

File metadata and controls

110 lines (78 loc) · 3.11 KB

Custom Patterns

Patterns are .toml files — one per command. They are loaded from two locations in order, with the first regex match winning:

  1. Project: <git-root>/.oo/patterns/ — repo-specific, checked in with the project
  2. User: ~/.config/oo/patterns/ — personal patterns across all projects

Both layers are checked before built-in patterns, so custom patterns always override.

TOML format

# Regex matched against the full command string (e.g. "make -j4 all")
command_match = "^make\\b"

[success]
# Regex with named captures run against stdout+stderr
pattern = '(?P<target>\S+) is up to date'
# Template: {name} is replaced with the capture of the same name
summary = "{target} up to date"

[failure]
# Strategy: tail | head | grep | between
strategy = "grep"
# For grep: lines matching this regex are kept
grep = "Error:|error\\["

[success] section

Field Type Description
pattern regex Named captures become template variables
summary string Template; {capture_name} replaced at runtime

An empty summary = "" suppresses output on success (quiet pass).

[failure] section

strategy is optional and defaults to "tail".

strategy Extra fields Behaviour
tail lines (default 30) Last N lines of output
head lines (default 20) First N lines of output
grep grep (regex, required) Lines matching regex
between start, end (strings, required) Lines from first start match to first end match (inclusive)

Omit [failure] to show all output on failure.

Examples

docker build

command_match = "\\bdocker\\s+build\\b"

[success]
pattern = 'Successfully built (?P<id>[0-9a-f]+)'
summary = "built {id}"

[failure]
strategy = "tail"
lines = 20

terraform plan

command_match = "\\bterraform\\s+plan\\b"

[success]
pattern = 'Plan: (?P<add>\d+) to add, (?P<change>\d+) to change, (?P<destroy>\d+) to destroy'
summary = "+{add} ~{change} -{destroy}"

[failure]
strategy = "grep"
grep = "Error:|error:"

make

command_match = "^make\\b"

[success]
pattern = '(?s).*'   # always matches; empty summary = quiet
summary = ""

[failure]
strategy = "between"
start = "make["
end = "Makefile:"

Note: start and end are plain substring matches, not regexes.

Command Categories

oo categorizes commands to determine default behavior when no pattern matches:

Category Examples Default Behavior
Status cargo test, pytest, eslint, cargo build Quiet success (empty summary) if output > 4 KB
Content git show, git diff, cat, bat Always pass through, never index
Data git log, git status, gh api, ls, find Index for recall if output > 4 KB and unpatterned
Unknown Anything else (curl, docker, etc.) Pass through (safe default)

Important: Patterns always take priority over category defaults. If a pattern matches, it determines the output classification regardless of category.