added .ssh
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
{"action":"prune","keep":10,"kept":[],"removed":[],"auditedAt":"2026-07-07T10:46:49.653Z"}
|
||||
{"action":"prune","keep":10,"kept":[],"removed":[],"auditedAt":"2026-07-07T10:48:10.038Z"}
|
||||
@@ -0,0 +1,4 @@
|
||||
{"exportedAt":"2026-07-07T10:47:49.531Z","snapshots":[{"type":"counter","name":"crew.run.count","description":"Total runs by status","values":[]},{"type":"counter","name":"crew.task.count","description":"Total tasks by status","values":[]},{"type":"counter","name":"crew.subagent.count","description":"Total subagent records by status","values":[]},{"type":"counter","name":"crew.mailbox.count","description":"Total mailbox messages by direction","values":[]},{"type":"counter","name":"crew.task.retry_attempt_total","description":"Retry attempts by run and task","values":[]},{"type":"counter","name":"crew.task.deadletter_total","description":"Deadletter triggers by reason","values":[]},{"type":"counter","name":"crew.task.overflow_phase_total","description":"Overflow recovery phase transitions","values":[]},{"type":"counter","name":"crew.task.supervisor_contact_total","description":"Supervisor contact requests by reason","values":[]},{"type":"gauge","name":"crew.heartbeat.staleness_ms","description":"Heartbeat elapsed since last seen, milliseconds","values":[]},{"type":"histogram","name":"crew.run.duration_ms","description":"Run end-to-end duration, milliseconds","values":[]},{"type":"histogram","name":"crew.task.duration_ms","description":"Task duration, milliseconds","values":[]},{"type":"histogram","name":"crew.task.retry_count","description":"Retries per task","values":[]},{"type":"histogram","name":"crew.task.tokens_total","description":"Token usage per task","values":[]}]}
|
||||
{"exportedAt":"2026-07-07T10:49:09.918Z","snapshots":[{"type":"counter","name":"crew.run.count","description":"Total runs by status","values":[]},{"type":"counter","name":"crew.task.count","description":"Total tasks by status","values":[]},{"type":"counter","name":"crew.subagent.count","description":"Total subagent records by status","values":[]},{"type":"counter","name":"crew.mailbox.count","description":"Total mailbox messages by direction","values":[]},{"type":"counter","name":"crew.task.retry_attempt_total","description":"Retry attempts by run and task","values":[]},{"type":"counter","name":"crew.task.deadletter_total","description":"Deadletter triggers by reason","values":[]},{"type":"counter","name":"crew.task.overflow_phase_total","description":"Overflow recovery phase transitions","values":[]},{"type":"counter","name":"crew.task.supervisor_contact_total","description":"Supervisor contact requests by reason","values":[]},{"type":"gauge","name":"crew.heartbeat.staleness_ms","description":"Heartbeat elapsed since last seen, milliseconds","values":[]},{"type":"histogram","name":"crew.run.duration_ms","description":"Run end-to-end duration, milliseconds","values":[]},{"type":"histogram","name":"crew.task.duration_ms","description":"Task duration, milliseconds","values":[]},{"type":"histogram","name":"crew.task.retry_count","description":"Retries per task","values":[]},{"type":"histogram","name":"crew.task.tokens_total","description":"Token usage per task","values":[]}]}
|
||||
{"exportedAt":"2026-07-07T10:50:09.918Z","snapshots":[{"type":"counter","name":"crew.run.count","description":"Total runs by status","values":[]},{"type":"counter","name":"crew.task.count","description":"Total tasks by status","values":[]},{"type":"counter","name":"crew.subagent.count","description":"Total subagent records by status","values":[]},{"type":"counter","name":"crew.mailbox.count","description":"Total mailbox messages by direction","values":[]},{"type":"counter","name":"crew.task.retry_attempt_total","description":"Retry attempts by run and task","values":[]},{"type":"counter","name":"crew.task.deadletter_total","description":"Deadletter triggers by reason","values":[]},{"type":"counter","name":"crew.task.overflow_phase_total","description":"Overflow recovery phase transitions","values":[]},{"type":"counter","name":"crew.task.supervisor_contact_total","description":"Supervisor contact requests by reason","values":[]},{"type":"gauge","name":"crew.heartbeat.staleness_ms","description":"Heartbeat elapsed since last seen, milliseconds","values":[]},{"type":"histogram","name":"crew.run.duration_ms","description":"Run end-to-end duration, milliseconds","values":[]},{"type":"histogram","name":"crew.task.duration_ms","description":"Task duration, milliseconds","values":[]},{"type":"histogram","name":"crew.task.retry_count","description":"Retries per task","values":[]},{"type":"histogram","name":"crew.task.tokens_total","description":"Token usage per task","values":[]}]}
|
||||
{"exportedAt":"2026-07-07T10:51:09.919Z","snapshots":[{"type":"counter","name":"crew.run.count","description":"Total runs by status","values":[]},{"type":"counter","name":"crew.task.count","description":"Total tasks by status","values":[]},{"type":"counter","name":"crew.subagent.count","description":"Total subagent records by status","values":[]},{"type":"counter","name":"crew.mailbox.count","description":"Total mailbox messages by direction","values":[]},{"type":"counter","name":"crew.task.retry_attempt_total","description":"Retry attempts by run and task","values":[]},{"type":"counter","name":"crew.task.deadletter_total","description":"Deadletter triggers by reason","values":[]},{"type":"counter","name":"crew.task.overflow_phase_total","description":"Overflow recovery phase transitions","values":[]},{"type":"counter","name":"crew.task.supervisor_contact_total","description":"Supervisor contact requests by reason","values":[]},{"type":"gauge","name":"crew.heartbeat.staleness_ms","description":"Heartbeat elapsed since last seen, milliseconds","values":[]},{"type":"histogram","name":"crew.run.duration_ms","description":"Run end-to-end duration, milliseconds","values":[]},{"type":"histogram","name":"crew.task.duration_ms","description":"Task duration, milliseconds","values":[]},{"type":"histogram","name":"crew.task.retry_count","description":"Retries per task","values":[]},{"type":"histogram","name":"crew.task.tokens_total","description":"Token usage per task","values":[]}]}
|
||||
@@ -93,7 +93,7 @@ index-columns=flags:4,name<35%,subject,date>=
|
||||
column-name={{if match .Folder "(?i)Sent|Gesendet"}}{{index (.To | persons) 0}}{{else}}{{index (.From | persons) 0}}{{end}}
|
||||
border-char-vertical="│"
|
||||
border-char-horizontal="─"
|
||||
styleset-name="rose-pine"
|
||||
styleset-name="rose-pine-moon"
|
||||
threading-enabled=true
|
||||
|
||||
#
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
# vim: filetype=dosini
|
||||
|
||||
# Rosé Pine Moon Theme for Aerc
|
||||
# All natural pine, faux fur and a bit of soho vibes for the classy minimalist
|
||||
# Save as ~/.config/aerc/stylesets/rose-pine-moon
|
||||
|
||||
# Base styling
|
||||
default.fg=#9ccfd8
|
||||
default.bg=#232136
|
||||
|
||||
success.fg=#3e8fb0
|
||||
error.fg=#eb6f92
|
||||
warning.fg=#f6c177
|
||||
|
||||
title.bg=#2a273f
|
||||
title.fg=#c4a7e7
|
||||
|
||||
header.fg=#c4a7e7
|
||||
|
||||
spinner.fg=#6e6a86
|
||||
|
||||
part_filename.fg=#f6c177
|
||||
part_mimetype.fg=#c4a7e7
|
||||
|
||||
# Global selection
|
||||
*.selected.fg=#232136
|
||||
*.selected.bg=#ea9a97
|
||||
*.selected.bold=true
|
||||
|
||||
# Message list
|
||||
msglist_default.fg=#9ccfd8
|
||||
msglist_default.bg=#2a273f
|
||||
msglist_unread.fg=#e0def4
|
||||
msglist_unread.bold=true
|
||||
msglist_read.fg=#6e6a86
|
||||
msglist_flagged.fg=#f6c177
|
||||
msglist_flagged.bold=true
|
||||
msglist_deleted.bg=#eb6f92
|
||||
msglist_deleted.fg=#232136
|
||||
msglist_deleted.bold=true
|
||||
msglist_marked.fg=#232136
|
||||
msglist_marked.bg=#3e8fb0
|
||||
msglist_marked.bold=true
|
||||
|
||||
# Status bar
|
||||
statusline_*.bold=true
|
||||
statusline_*.fg=#232136
|
||||
statusline_default.fg=#9ccfd8
|
||||
statusline_default.bg=#232136
|
||||
statusline_error.bg=#eb6f92
|
||||
statusline_success.bg=#3e8fb0
|
||||
|
||||
# Completion
|
||||
completion_default.fg=#9ccfd8
|
||||
completion_default.bg=#2a273f
|
||||
completion_gutter.bg=#2a273f
|
||||
completion_description.bg=#2a273f
|
||||
|
||||
# Scrollbars
|
||||
*_pill.fg=#232136
|
||||
*_pill.bg=#6e6a86
|
||||
|
||||
# Border
|
||||
border.fg=#232136
|
||||
border.bg=#232136
|
||||
|
||||
# Tab
|
||||
tab.bg=#232136
|
||||
tab.selected.fg=#ea9a97
|
||||
tab.selected.bg=#232136
|
||||
tab.selected.bold=true
|
||||
|
||||
[viewer]
|
||||
url.fg=#c4a7e7
|
||||
url.underline=true
|
||||
header.bold=true
|
||||
signature.dim=true
|
||||
diff_meta.bold=true
|
||||
diff_chunk.fg=#c4a7e7
|
||||
diff_chunk_func.fg=#c4a7e7
|
||||
diff_chunk_func.bold=true
|
||||
diff_add.fg=#44415a
|
||||
diff_del.fg=#eb6f92
|
||||
quote_*.fg=#908caa
|
||||
quote_1.fg=#2a283e
|
||||
@@ -0,0 +1,44 @@
|
||||
# Agent Guidelines: Aerc Configuration Repository
|
||||
|
||||
This repository contains the configuration and customization for `aerc`, a terminal-based email client. It is optimized for a workflow involving `notmuch` for indexing, `mbsync` for synchronization, `abook` for address management, `khal` for calendar, and `taskwarrior` for tasks.
|
||||
|
||||
## 1. Build, Lint, and Test Commands
|
||||
|
||||
### Sync and Maintenance
|
||||
- **Global Sync**: Run `mailsync` (bound to `u` in `aerc`) to perform:
|
||||
1. `mbsync -a` (Mail sync)
|
||||
2. `vdirsyncer sync` (Calendar sync)
|
||||
3. `caldawarrior sync` (Task sync)
|
||||
4. `notmuch new` for all account databases (Indexing)
|
||||
5. `notmuch-abook-sync` (Address book population)
|
||||
|
||||
### Linting
|
||||
- **Permissions**: `accounts.conf` must be `0600`.
|
||||
- **Dependencies**: `w3m`, `bat`, `yazi`, `notmuch`, `abook`, `pass`, `isync`, `khal`, `vdirsyncer`, `task`, `taskwarrior-tui`, `caldawarrior`.
|
||||
|
||||
### Testing
|
||||
- **Filters**: `cat email.html | w3m -T text/html -dump`
|
||||
- **Calendar**: `khal list`
|
||||
- **Tasks**: `task list`
|
||||
|
||||
## 2. Code Style Guidelines
|
||||
|
||||
### Aerc Configuration
|
||||
- **Notmuch URI**: Use absolute triple-slash format: `source = notmuch:///home/liph/Mail/account_name`.
|
||||
- **Credentials**: Use `pass` via `outgoing-cred-cmd = pass show mail/account_email`.
|
||||
- **Sidebar**: Use separate `notmuch` databases per account directory for isolation.
|
||||
|
||||
### Keybindings
|
||||
- **Leader**: `,` (comma).
|
||||
- **Tab switching**: `Alt+n` (next) and `Alt+p` (prev).
|
||||
- **Contacts**: `,ab` opens `abook`.
|
||||
- **Calendar**: `,ca` opens unified `khal`.
|
||||
- **Tasks**: `,ta` opens `taskwarrior-tui`.
|
||||
|
||||
### Terminal Tabs (Khal/Taskwarrior)
|
||||
- **Escape**: Press `Ctrl+x` to release terminal focus and use `aerc` commands.
|
||||
- **Tab Passthrough**: `Tab` and `Backtab` are passed to terminal apps for internal navigation.
|
||||
|
||||
### Neovim integration (`after/ftplugin/mail.lua`)
|
||||
- **Completion**: Triggered by `Tab` on header lines using `abook --mutt-query`.
|
||||
- **Fzf**: Triggered by `Ctrl+f` for interactive contact selection.
|
||||
@@ -0,0 +1,33 @@
|
||||
[phil]
|
||||
source = notmuch:///home/liph/Mail/phil
|
||||
query-map = ~/.config/aerc/phil.queries
|
||||
outgoing = smtp://phil%40liphlink.xyz@mail.liphlink.xyz:587
|
||||
outgoing-cred-cmd = pass show mail/phil@liphlink.xyz
|
||||
from = Phil <phil@liphlink.xyz>
|
||||
default = Inbox
|
||||
copy-to = Sent
|
||||
postpone = Drafts
|
||||
aliases = pw@liphlink.xyz,p.waibel@liphlink.xyz,philipp.waibel@liphlink.xyz
|
||||
|
||||
[spam]
|
||||
source = notmuch:///home/liph/Mail/spam
|
||||
query-map = ~/.config/aerc/notmuch-queries.conf
|
||||
outgoing = smtp://spam%40liphlink.xyz@mail.liphlink.xyz:587
|
||||
outgoing-cred-cmd = pass show mail/spam@liphlink.xyz
|
||||
from = Liph <spam@liphlink.xyz>
|
||||
copy-to = Sent
|
||||
default = Inbox
|
||||
aliases = blue@liphlink.xyz,red@liphlink.xyz
|
||||
|
||||
[proton]
|
||||
source = notmuch:///home/liph/Mail/proton
|
||||
query-map = ~/.config/aerc/notmuch-queries.conf
|
||||
outgoing = smtp+insecure://liiph%40protonmail.com@127.0.0.1:1025
|
||||
outgoing-cred-cmd = pass show mail/liiph@protonmail.com
|
||||
default = INBOX
|
||||
from = Liph <liiph@proton.me>
|
||||
copy-to = Sent
|
||||
archive = Archive
|
||||
default = Inbox
|
||||
postpone = Drafts
|
||||
aliases = liiph@proton.me,liiph@pm.me,ph.waibel@proton.me,ph.waibel@pm.me
|
||||
@@ -0,0 +1,886 @@
|
||||
#
|
||||
# aerc main configuration
|
||||
|
||||
[general]
|
||||
# Used as a default path for save operations if no other path is specified.
|
||||
# ~ is expanded to the current user home dir.
|
||||
#
|
||||
#default-save-path=
|
||||
|
||||
# If set to "gpg", aerc will use system gpg binary and keystore for all crypto
|
||||
# operations. If set to "internal", the internal openpgp keyring will be used.
|
||||
# If set to "auto", the system gpg will be preferred unless the internal
|
||||
# keyring already exists, in which case the latter will be used.
|
||||
#
|
||||
# Default: auto
|
||||
#pgp-provider=auto
|
||||
|
||||
# By default, the file permissions of accounts.conf must be restrictive and
|
||||
# only allow reading by the file owner (0600). Set this option to true to
|
||||
# ignore this permission check. Use this with care as it may expose your
|
||||
# credentials.
|
||||
#
|
||||
# Default: false
|
||||
unsafe-accounts-conf=false
|
||||
index-format=notmuch://~/.local/share/mail
|
||||
# Output log messages to specified file. A path starting with ~/ is expanded to
|
||||
# the user home dir. When redirecting aerc's output to a file using > shell
|
||||
# redirection, this setting is ignored and log messages are printed to stdout.
|
||||
#
|
||||
log-file=~/.local/share/aerc/aerc.log
|
||||
log-level=debug
|
||||
|
||||
|
||||
# Disable IPC entirely. Don't run commands (including mailto:... and mbox:...)
|
||||
# in an existing aerc instance, and don't start an IPC server to allow
|
||||
# subsequent aerc instances to run commands in the current one.
|
||||
#
|
||||
# Default: false
|
||||
#disable-ipc=false
|
||||
|
||||
# Don't run mailto:... commands over IPC; start a new aerc instance with the
|
||||
# composer instead.
|
||||
#
|
||||
# Default: false
|
||||
#disable-ipc-mailto=false
|
||||
#
|
||||
# Don't run mbox:... commands over IPC; start a new aerc instance with the mbox
|
||||
# file instead.
|
||||
#
|
||||
# Default: false
|
||||
#disable-ipc-mbox=false
|
||||
|
||||
# Set the $TERM environment variable used for the embedded terminal.
|
||||
#
|
||||
# Default: xterm-256color
|
||||
#term=xterm-256color
|
||||
|
||||
# Display OSC8 strings in the embedded terminal
|
||||
#
|
||||
# Default: false
|
||||
#enable-osc8=false
|
||||
|
||||
# Default shell command to use for :menu. This will be executed with sh -c and
|
||||
# will run in an popover dialog.
|
||||
#
|
||||
# Any occurrence of %f will be replaced by a temporary file path where the
|
||||
# command is expected to write output lines to be consumed by :menu. Otherwise,
|
||||
# the lines will be read from the command's standard output.
|
||||
#
|
||||
# Examples:
|
||||
# default-menu-cmd=fzf
|
||||
# default-menu-cmd=fzf --multi
|
||||
# default-menu-cmd=dmenu -l 20
|
||||
# default-menu-cmd=ranger --choosefiles=%f
|
||||
#
|
||||
#default-menu-cmd=
|
||||
|
||||
[ui]
|
||||
#
|
||||
# Describes the format for each row in a mailbox view. This is a comma
|
||||
# separated list of column names with an optional align and width suffix. After
|
||||
# the column name, one of the '<' (left), ':' (center) or '>' (right) alignment
|
||||
# characters can be added (by default, left) followed by an optional width
|
||||
# specifier. The width is either an integer representing a fixed number of
|
||||
# characters, or a percentage between 1% and 99% representing a fraction of the
|
||||
# terminal width. It can also be one of the '*' (auto) or '=' (fit) special
|
||||
# width specifiers. Auto width columns will be equally attributed the remaining
|
||||
# terminal width. Fit width columns take the width of their contents. If no
|
||||
# width specifier is set, '*' is used by default.
|
||||
#
|
||||
# Default: flags:4,name<20%,subject,date>=
|
||||
index-columns=flags:4,name<35%,subject,date>=
|
||||
column-name={{if match .Folder "(?i)Sent|Gesendet"}}{{index (.To | persons) 0}}{{else}}{{index (.From | persons) 0}}{{end}}
|
||||
border-char-vertical="│"
|
||||
border-char-horizontal="─"
|
||||
styleset-name="rose-pine"
|
||||
threading-enabled=true
|
||||
|
||||
#
|
||||
# Each name in index-columns must have a corresponding column-$name setting.
|
||||
# All column-$name settings accept golang text/template syntax. See
|
||||
# aerc-templates(7) for available template attributes and functions.
|
||||
#
|
||||
# Here are some examples to show the To field instead of the From field for
|
||||
# an email (modifying column-name):
|
||||
#
|
||||
# 1. a generic one
|
||||
# column-name={{ .Peer | names | join ", " }}
|
||||
# 2. based upon the selected folder
|
||||
# column-name={{if match .Folder "^(Gesendet|Sent)$"}}{{index (.To | names) 0}}{{else}}{{index (.From | names) 0}}{{end}}
|
||||
#
|
||||
# Default settings
|
||||
#column-flags={{.Flags | join ""}}
|
||||
#column-name={{index (.From | names) 0}}
|
||||
#column-subject={{.ThreadPrefix}}{{.Subject}}
|
||||
#column-date={{.DateAutoFormat .Date.Local}}
|
||||
|
||||
#
|
||||
# String separator inserted between columns. When the column width specifier is
|
||||
# an exact number of characters, the separator is added to it (i.e. the exact
|
||||
# width will be fully available for the column contents).
|
||||
#
|
||||
# Default: " "
|
||||
#column-separator=" "
|
||||
|
||||
#
|
||||
# See time.Time#Format at https://godoc.org/time#Time.Format
|
||||
#
|
||||
# Default: 2006 Jan 02
|
||||
#timestamp-format=2006 Jan 02
|
||||
|
||||
#
|
||||
# Index-only time format for messages that were received/sent today.
|
||||
# If this is empty, timestamp-format is used instead.
|
||||
#
|
||||
# Default: 15:04
|
||||
#this-day-time-format=15:04
|
||||
|
||||
#
|
||||
# Index-only time format for messages that were received/sent within the last
|
||||
# 7 days. If this is empty, timestamp-format is used instead.
|
||||
#
|
||||
# Default: Jan 02
|
||||
#this-week-time-format=Jan 02
|
||||
|
||||
#
|
||||
# Index-only time format for messages that were received/sent this year.
|
||||
# If this is empty, timestamp-format is used instead.
|
||||
#
|
||||
#Default: Jan 02
|
||||
#this-year-time-format=Jan 02
|
||||
|
||||
#
|
||||
# Overrides timestamp-format for the message view.
|
||||
#
|
||||
# Default: 2006 Jan 02, 15:04 GMT-0700
|
||||
#message-view-timestamp-format=2006 Jan 02, 15:04 GMT-0700
|
||||
|
||||
#
|
||||
# If set, overrides timestamp-format in the message view for messages
|
||||
# that were received/sent today.
|
||||
#
|
||||
#message-view-this-day-time-format=
|
||||
|
||||
# If set, overrides timestamp-format in the message view for messages
|
||||
# that were received/sent within the last 7 days.
|
||||
#
|
||||
#message-view-this-week-time-format=
|
||||
|
||||
#
|
||||
# If set, overrides *timestamp-format* in the message view for messages
|
||||
# that were received/sent this year.
|
||||
#
|
||||
#message-view-this-year-time-format=
|
||||
|
||||
#
|
||||
# Width of the sidebar, including the border.
|
||||
#
|
||||
# Default: 22
|
||||
sidebar-width=34
|
||||
|
||||
#
|
||||
# Default split layout for message list tabs. The syntax is:
|
||||
#
|
||||
# [<direction>] <size>
|
||||
#
|
||||
# <direction> is optional and defaults to horizontal. It can take one
|
||||
# of the following values: h, horiz, horizontal, v, vert, vertical.
|
||||
#
|
||||
# <size> is a positive integer representing the size (in terminal cells)
|
||||
# of the message list window.
|
||||
#
|
||||
#message-list-split=
|
||||
|
||||
#
|
||||
# Message to display when viewing an empty folder.
|
||||
#
|
||||
# Default: (no messages)
|
||||
#empty-message=(no messages)
|
||||
|
||||
# Message to display when no folders exists or are all filtered
|
||||
#
|
||||
# Default: (no folders)
|
||||
#empty-dirlist=(no folders)
|
||||
#
|
||||
# Value to set {{.Subject}} template to when subject is empty.
|
||||
#
|
||||
# Default: (no subject)
|
||||
#empty-subject=(no subject)
|
||||
|
||||
# Enable mouse events in the ui, e.g. clicking and scrolling with the mousewheel
|
||||
#
|
||||
# Default: false
|
||||
mouse-enabled=false
|
||||
|
||||
#
|
||||
# Ring the bell when new messages are received
|
||||
#
|
||||
# Default: true
|
||||
#new-message-bell=true
|
||||
|
||||
#
|
||||
# Template to use for Account tab titles
|
||||
#
|
||||
# Default: {{.Account}}
|
||||
#tab-title-account={{.Account}}
|
||||
|
||||
#
|
||||
# Template to use for Composer tab titles
|
||||
#
|
||||
# Default: {{if .To}}to:{{index (.To | shortmboxes) 0}} {{end}}{{.SubjectBase}}
|
||||
#tab-title-composer={{if .To}}to:{{index (.To | shortmboxes) 0}} {{end}}{{.SubjectBase}}
|
||||
|
||||
#
|
||||
# Template to use for Message Viewer tab titles
|
||||
#
|
||||
# Default: {{.Subject}}
|
||||
#tab-title-viewer={{.Subject}}
|
||||
|
||||
|
||||
# Marker to show before a pinned tab's name.
|
||||
#
|
||||
# Default: `
|
||||
#pinned-tab-marker='`'
|
||||
|
||||
# Template for the left side of the directory list.
|
||||
# See aerc-templates(7) for all available fields and functions.
|
||||
#
|
||||
# Default: {{.Folder}}
|
||||
dirlist-left={{if match .Folder "/"}}{{.Style (index (.Folder | split "/" | tail 1) 0) "folder_sub"}}{{else}}{{.Folder}}{{end}}
|
||||
|
||||
# Template for the right side of the directory list.
|
||||
# See aerc-templates(7) for all available fields and functions.
|
||||
#
|
||||
# Default: {{if .Unread}}{{humanReadable .Unread}}{{end}}
|
||||
dirlist-right={{if .Unread}}{{humanReadable .Unread}} / {{end}}{{humanReadable .Exists}}
|
||||
|
||||
# Delay after which the messages are actually listed when entering a directory.
|
||||
# This avoids loading messages when skipping over folders and makes the UI more
|
||||
# responsive. If you do not want that, set it to 0s.
|
||||
#
|
||||
# Default: 200ms
|
||||
#dirlist-delay=200ms
|
||||
|
||||
# Display the directory list as a foldable tree that allows to collapse and
|
||||
# expand the folders.
|
||||
#
|
||||
# Default: false
|
||||
dirlist-tree=true
|
||||
|
||||
# If dirlist-tree is enabled, set level at which folders are collapsed by
|
||||
# default. Set to 0 to disable.
|
||||
#
|
||||
# Default: 0
|
||||
dirlist-collapse=1
|
||||
|
||||
# List of space-separated criteria to sort the messages by, see *sort*
|
||||
# command in *aerc*(1) for reference. Prefixing a criterion with "-r "
|
||||
# reverses that criterion.
|
||||
#
|
||||
# Example: "from -r date"
|
||||
#
|
||||
sort = -r date
|
||||
|
||||
# Moves to next message when the current message is deleted
|
||||
#
|
||||
# Default: true
|
||||
#next-message-on-delete=true
|
||||
|
||||
# Automatically set the "seen" flag when a message is opened in the message
|
||||
# viewer.
|
||||
#
|
||||
# Default: true
|
||||
#auto-mark-read=true
|
||||
|
||||
# The directories where the stylesets are stored. It takes a colon-separated
|
||||
# list of directories. If this is unset or if a styleset cannot be found, the
|
||||
# following paths will be used as a fallback in that order:
|
||||
#
|
||||
# ${XDG_CONFIG_HOME:-~/.config}/aerc/stylesets
|
||||
# ${XDG_DATA_HOME:-~/.local/share}/aerc/stylesets
|
||||
# /usr/local/share/aerc/stylesets
|
||||
# /usr/share/aerc/stylesets
|
||||
#
|
||||
#stylesets-dirs=
|
||||
|
||||
# Uncomment to use box-drawing characters for vertical and horizontal borders.
|
||||
#
|
||||
# Default: "│" and "─"
|
||||
#border-char-vertical="│"
|
||||
#border-char-horizontal="─"
|
||||
|
||||
# Sets the styleset to use for the aerc ui elements.
|
||||
#
|
||||
# Default: default
|
||||
#styleset-name=default
|
||||
|
||||
# Activates fuzzy search in commands and their arguments: the typed string is
|
||||
# searched in the command or option in any position, and need not be
|
||||
# consecutive characters in the command or option.
|
||||
#
|
||||
# Default: false
|
||||
#fuzzy-complete=false
|
||||
|
||||
# How long to wait after the last input before auto-completion is triggered.
|
||||
#
|
||||
# Default: 250ms
|
||||
#completion-delay=250ms
|
||||
|
||||
# The minimum required characters to allow auto-completion to be triggered after
|
||||
# completion-delay.
|
||||
#
|
||||
# Setting this to "manual" disables automatic completion, leaving only the
|
||||
# manually triggered completion with the $complete key (see aerc-binds(5) for
|
||||
# more details).
|
||||
#
|
||||
# Default: 1
|
||||
#completion-min-chars=1
|
||||
|
||||
#
|
||||
# Global switch for completion popovers
|
||||
#
|
||||
# Default: true
|
||||
#completion-popovers=true
|
||||
|
||||
# Uncomment to use UTF-8 symbols to indicate PGP status of messages
|
||||
#
|
||||
# Default: ASCII
|
||||
#icon-unencrypted=
|
||||
#icon-encrypted=✔
|
||||
#icon-signed=✔
|
||||
#icon-signed-encrypted=✔
|
||||
#icon-unknown=✘
|
||||
#icon-invalid=⚠
|
||||
|
||||
# Reverses the order of the message list. By default, the message list is
|
||||
# ordered with the newest (highest UID) message on top. Reversing the order
|
||||
# will put the oldest (lowest UID) message on top. This can be useful in cases
|
||||
# where the backend does not support sorting.
|
||||
#
|
||||
# Default: false
|
||||
#reverse-msglist-order = false
|
||||
|
||||
# Reverse display of the message threads. Default order is the initial
|
||||
# message is on the top with all the replies being displayed below. The
|
||||
# reverse option will put the initial message at the bottom with the
|
||||
# replies on top.
|
||||
#
|
||||
# Default: false
|
||||
#reverse-thread-order=false
|
||||
|
||||
# Positions the cursor on the last message in the message list (at the
|
||||
# bottom of the view) when opening a new folder.
|
||||
#
|
||||
# Default: false
|
||||
#select-last-message=false
|
||||
|
||||
# Sort the thread siblings according to the sort criteria for the messages. If
|
||||
# sort-thread-siblings is false, the thread siblings will be sorted based on
|
||||
# the message UID in ascending order. This option is only applicable for
|
||||
# client-side threading with a backend that enables sorting. Note that there's
|
||||
# a performance impact when sorting is activated.
|
||||
#
|
||||
# Default: false
|
||||
#sort-thread-siblings=false
|
||||
|
||||
# Set the scroll offset in number of lines from the top and bottom of the
|
||||
# message list.
|
||||
#
|
||||
# Default: 0
|
||||
#msglist-scroll-offset = 0
|
||||
|
||||
#
|
||||
# Enable a threaded view of messages. If this is not supported by the backend
|
||||
# (IMAP server or notmuch), threads will be built by the client.
|
||||
#
|
||||
# Default: false
|
||||
#threading-enabled=false
|
||||
|
||||
# Force client-side thread building
|
||||
#
|
||||
# Default: false
|
||||
#force-client-threads=false
|
||||
|
||||
# If no References nor In-Reply-To headers can be matched to build client side
|
||||
# threads, fallback to similar subjects.
|
||||
#
|
||||
# Default: false
|
||||
#threading-by-subject=false
|
||||
|
||||
# Show thread context enables messages which do not match the current query (or
|
||||
# belong to the current mailbox) to be shown for context. These messages can be
|
||||
# styled separately using "msglist_thread_context" in a styleset. This feature
|
||||
# is not supported by all backends
|
||||
#
|
||||
# Default: false
|
||||
#show-thread-context=false
|
||||
|
||||
# Debounce client-side thread building
|
||||
#
|
||||
# Default: 50ms
|
||||
#client-threads-delay=50ms
|
||||
|
||||
#
|
||||
# Thread prefix customization:
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the arrow head.
|
||||
#
|
||||
# Default: ">"
|
||||
#thread-prefix-tip = ">"
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the arrow indentation.
|
||||
#
|
||||
# Default: " "
|
||||
#thread-prefix-indent = " "
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the vertical extension of
|
||||
# the arrow.
|
||||
#
|
||||
# Default: "│"
|
||||
#thread-prefix-stem = "│"
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the horizontal extension
|
||||
# of the arrow.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-limb = ""
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the folded thread
|
||||
# indicator.
|
||||
#
|
||||
# Default: "+"
|
||||
#thread-prefix-folded = "+"
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the unfolded thread
|
||||
# indicator.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-unfolded = ""
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the first child connector.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-first-child = ""
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the connector used if
|
||||
# the message has siblings.
|
||||
#
|
||||
# Default: "├─"
|
||||
#thread-prefix-has-siblings = "├─"
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the connector used if the
|
||||
# message has no parents and no children.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-lone = ""
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the connector used if the
|
||||
# message has no parents and has children.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-orphan = ""
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the connector for the last
|
||||
# sibling.
|
||||
#
|
||||
# Default: "└─"
|
||||
#thread-prefix-last-sibling = "└─"
|
||||
|
||||
#
|
||||
# Customize the reversed thread prefix appearance by selecting the connector for
|
||||
# the last sibling.
|
||||
#
|
||||
# Default: "┌─"
|
||||
#thread-prefix-last-sibling-reverse = "┌─"
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the connector for dummy
|
||||
# thread.
|
||||
#
|
||||
# Default: "┬─"
|
||||
#thread-prefix-dummy = "┬─"
|
||||
|
||||
#
|
||||
# Customize the reversed thread prefix appearance by selecting the connector for
|
||||
# dummy thread.
|
||||
#
|
||||
# Default: "┴─"
|
||||
#thread-prefix-dummy-reverse = "┴─"
|
||||
|
||||
#
|
||||
# Customize the reversed thread prefix appearance by selecting the first child
|
||||
# connector.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-first-child-reverse = ""
|
||||
|
||||
#
|
||||
# Customize the reversed thread prefix appearance by selecting the connector
|
||||
# used if the message has no parents and has children.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-orphan-reverse = ""
|
||||
|
||||
[statusline]
|
||||
#
|
||||
# Describes the format for the status line. This is a comma separated list of
|
||||
# column names with an optional align and width suffix. See [ui].index-columns
|
||||
# for more details. To completely mute the status line except for push
|
||||
# notifications, explicitly set status-columns to an empty string.
|
||||
#
|
||||
# Default: left<*,center:=,right>*
|
||||
#status-columns=left<*,center:=,right>*
|
||||
|
||||
#
|
||||
# Each name in status-columns must have a corresponding column-$name setting.
|
||||
# All column-$name settings accept golang text/template syntax. See
|
||||
# aerc-templates(7) for available template attributes and functions.
|
||||
#
|
||||
# Default settings
|
||||
#column-left=[{{.Account}}] {{.StatusInfo}}
|
||||
#column-center={{.PendingKeys}}
|
||||
#column-right={{.TrayInfo}} | {{cwd}}
|
||||
|
||||
#
|
||||
# String separator inserted between columns.
|
||||
# See [ui].column-separator for more details.
|
||||
#
|
||||
#column-separator=" "
|
||||
|
||||
# Specifies the separator between grouped statusline elements.
|
||||
#
|
||||
# Default: " | "
|
||||
#separator=" | "
|
||||
|
||||
# Defines the mode for displaying the status elements.
|
||||
# Options: text, icon
|
||||
#
|
||||
# Default: text
|
||||
#display-mode=text
|
||||
|
||||
[viewer]
|
||||
# pager=less -Rc
|
||||
pager= bat --style=plain --paging=always
|
||||
# html-unsafe-images=false
|
||||
# html-filter=dante
|
||||
image/*=chafa -f kitty -s ${width}x${height}
|
||||
text/html=w3m -T text/html -dump -o display_link_number=1
|
||||
application/pdf=zathura
|
||||
video/*=mpv
|
||||
header-layout=From,To,Subject,Date
|
||||
|
||||
|
||||
#w3m -dump -T text/html -o display_link_number=1
|
||||
#
|
||||
# Specifies the pager to use when displaying emails. Note that some filters
|
||||
# may add ANSI codes to add color to rendered emails, so you may want to use a
|
||||
# pager which supports ANSI codes.
|
||||
#
|
||||
# Default: less -Rc
|
||||
|
||||
#
|
||||
# If an email offers several versions (multipart), you can configure which
|
||||
# mimetype to prefer. For example, this can be used to prefer plaintext over
|
||||
# html emails.
|
||||
#
|
||||
# Default: text/plain,text/html
|
||||
#alternatives=text/plain,text/html
|
||||
|
||||
#
|
||||
# Default setting to determine whether to show full headers or only parsed
|
||||
# ones in message viewer.
|
||||
#
|
||||
# Default: false
|
||||
#show-headers=false
|
||||
|
||||
#
|
||||
# Layout of headers when viewing a message. To display multiple headers in the
|
||||
# same row, separate them with a pipe, e.g. "From|To". Rows will be hidden if
|
||||
# none of their specified headers are present in the message.
|
||||
#
|
||||
# Default: From|To,Cc|Bcc,Date,Subject
|
||||
#header-layout=From|To,Cc|Bcc,Date,Subject
|
||||
|
||||
# Whether to always show the mimetype of an email, even when it is just a single part
|
||||
#
|
||||
# Default: false
|
||||
#always-show-mime=false
|
||||
|
||||
# Define the maximum height of the mimetype switcher before a scrollbar is used.
|
||||
# The height of the mimetype switcher is restricted to half of the display
|
||||
# height. If the provided value for the height is zero, the number of parts will
|
||||
# be used as the height of the type switcher.
|
||||
#
|
||||
# Default: 0
|
||||
#max-mime-height = 0
|
||||
|
||||
# Parses and extracts http links when viewing a message. Links can then be
|
||||
# accessed with the open-link command.
|
||||
#
|
||||
# Default: true
|
||||
#parse-http-links=true
|
||||
|
||||
[compose]
|
||||
editor=nvim +'set ft=mail.markdown'
|
||||
|
||||
# editor=nvim +setf\ mail
|
||||
# editor=nvim # or your preferred editor
|
||||
# Address book command
|
||||
address-book-cmd=abook --mutt-query '%s'
|
||||
|
||||
# Auto-complete addresses
|
||||
# address-book-cmd-match='%s'
|
||||
# address-book-cmd=abook --mutt-query '%s'
|
||||
# terminal, though it may also launch a graphical window if the environment
|
||||
# supports it. Defaults to $EDITOR, or vi.
|
||||
#editor=
|
||||
|
||||
#
|
||||
# When set, aerc will create and read .eml files for composing that have
|
||||
# non-standard \n linebreaks. This is only relevant if the used editor does not
|
||||
# support CRLF linebreaks.
|
||||
#
|
||||
#lf-editor=false
|
||||
|
||||
#
|
||||
# Default header fields to display when composing a message. To display
|
||||
# multiple headers in the same row, separate them with a pipe, e.g. "To|From".
|
||||
#
|
||||
# Default: To|From,Subject
|
||||
#header-layout=To|From,Subject
|
||||
|
||||
#
|
||||
# Edit headers into the text editor instead than separate fields.
|
||||
#
|
||||
# When this is true, address-book-cmd is not supported and address completion
|
||||
# is left to the editor itself. Also, displaying multiple headers on the same
|
||||
# line is not possible.
|
||||
#
|
||||
# Default: false
|
||||
edit-headers=true
|
||||
|
||||
#
|
||||
# Sets focus to the email body when the composer window opens.
|
||||
#
|
||||
# Default: false
|
||||
#focus-body=false
|
||||
|
||||
#
|
||||
# Specifies the command to be used to tab-complete email addresses. Any
|
||||
# occurrence of "%s" in the address-book-cmd will be replaced with what the
|
||||
# user has typed so far.
|
||||
#
|
||||
# The command must output the completions to standard output, one completion
|
||||
# per line. Each line must be tab-delimited, with an email address occurring as
|
||||
# the first field. Only the email address field is required. The second field,
|
||||
# if present, will be treated as the contact name. Additional fields are
|
||||
# ignored.
|
||||
#
|
||||
# This parameter can also be set per account in accounts.conf.
|
||||
#address-book-cmd=
|
||||
|
||||
# Specifies the command to be used to select attachments. Any occurrence of
|
||||
# '%s' in the file-picker-cmd will be replaced with the argument <arg>
|
||||
# to :attach -m <arg>. Any occurrence of '%f' will be replaced by the
|
||||
# location of a temporary file, from which aerc will read the selected files.
|
||||
#
|
||||
# If '%f' is not present, the command must output the selected files to
|
||||
# standard output, one file per line. If it is present, then aerc does not
|
||||
# capture the standard output and instead reads the files from the temporary
|
||||
# file which should have the same format.
|
||||
#file-picker-cmd=/home/liph/.local/bin/yazi-picker %f
|
||||
|
||||
#
|
||||
# Allow to address yourself when replying
|
||||
#
|
||||
# Default: true
|
||||
#reply-to-self=true
|
||||
|
||||
# Warn before sending an email with an empty subject.
|
||||
#
|
||||
# Default: false
|
||||
#empty-subject-warning=false
|
||||
|
||||
#
|
||||
# Warn before sending an email that matches the specified regexp but does not
|
||||
# have any attachments. Leave empty to disable this feature.
|
||||
#
|
||||
# Uses Go's regexp syntax, documented at https://golang.org/s/re2syntax. The
|
||||
# "(?im)" flags are set by default (case-insensitive and multi-line).
|
||||
#
|
||||
# Example:
|
||||
# no-attachment-warning=^[^>]*attach(ed|ment)
|
||||
#
|
||||
#no-attachment-warning=
|
||||
|
||||
#
|
||||
# When set, aerc will generate "format=flowed" bodies with a content type of
|
||||
# "text/plain; format=flowed" as described in RFC3676. This format is easier to
|
||||
# handle for some mailing software, and generally just looks like ordinary
|
||||
# text. To actually make use of this format's features, you'll need support in
|
||||
# your editor.
|
||||
#
|
||||
format-flowed=false
|
||||
|
||||
[multipart-converters]
|
||||
text/html=/home/liph/.local/bin/aerc-md-convert
|
||||
|
||||
[filters]
|
||||
#
|
||||
text/plain=sed 's/^$//'
|
||||
|
||||
# Filters allow you to pipe an email body through a shell command to render
|
||||
# certain emails differently, e.g. highlighting them with ANSI escape codes.
|
||||
#
|
||||
# The commands are invoked with sh -c. The following folders are prepended to
|
||||
# the system $PATH to allow referencing filters from their name only:
|
||||
#
|
||||
# ${XDG_CONFIG_HOME:-~/.config}/aerc/filters
|
||||
# ~/.local/libexec/aerc/filters
|
||||
# ${XDG_DATA_HOME:-~/.local/share}/aerc/filters
|
||||
# $PREFIX/libexec/aerc/filters
|
||||
# $PREFIX/share/aerc/filters
|
||||
# /usr/libexec/aerc/filters
|
||||
# /usr/share/aerc/filters
|
||||
#
|
||||
# If you want to run a program in your default $PATH which has the same name
|
||||
# as a builtin filter (e.g. /usr/bin/colorize), use its absolute path.
|
||||
#
|
||||
# The following variables are defined in the filter command environment:
|
||||
#
|
||||
# AERC_MIME_TYPE the part MIME type/subtype
|
||||
# AERC_FORMAT the part content type format= parameter
|
||||
# AERC_FILENAME the attachment filename (if any)
|
||||
# AERC_SUBJECT the message Subject header value
|
||||
# AERC_FROM the message From header value
|
||||
#
|
||||
# The first filter which matches the email's mimetype will be used, so order
|
||||
# them from most to least specific.
|
||||
#
|
||||
# You can also match on non-mimetypes, by prefixing with the header to match
|
||||
# against (non-case-sensitive) and a comma, e.g. subject,text will match a
|
||||
# subject which contains "text". Use header,~regex to match against a regex.
|
||||
#
|
||||
text/plain=colorize
|
||||
text/calendar=calendar
|
||||
message/delivery-status=colorize
|
||||
message/rfc822=colorize
|
||||
text/html=w3m -T text/html -dump -o display_link_number=1
|
||||
#text/*=bat -fP --file-name="$AERC_FILENAME"
|
||||
#application/x-sh=bat -fP -l sh
|
||||
#image/*=catimg -w $(tput cols) -
|
||||
#subject,~Git(hub|lab)=lolcat -f
|
||||
#from,thatguywhodoesnothardwraphismessages=wrap -w 100 | colorize
|
||||
|
||||
# This special filter is only used to post-process email headers when
|
||||
# [viewer].show-headers=true
|
||||
# By default, headers are piped directly into the pager.
|
||||
#
|
||||
.headers=colorize
|
||||
|
||||
[openers]
|
||||
#
|
||||
# Openers allow you to specify the command to use for the :open and :open-link
|
||||
# actions on a per-MIME-type basis. The :open-link URL scheme is used to
|
||||
# determine the MIME type as follows: x-scheme-handler/<scheme>.
|
||||
#
|
||||
# {} is expanded as the temporary filename or URL to be opened with proper
|
||||
# shell quoting. If it is not encountered in the command, the filename/URL will
|
||||
# be appended to the end of the command. The command will then be executed with
|
||||
# `sh -c`.
|
||||
#
|
||||
# Like [filters], openers support basic shell globbing. The first opener which
|
||||
# matches the part's MIME type (or URL scheme handler MIME type) will be used,
|
||||
# so order them from most to least specific.
|
||||
#
|
||||
# Examples:
|
||||
# x-scheme-handler/irc=hexchat
|
||||
# x-scheme-handler/http*=printf '%s' {} | wl-copy
|
||||
# text/html=surf -dfgms
|
||||
# text/plain=gvim {} +125
|
||||
# message/rfc822=thunderbird
|
||||
text/html=w3m
|
||||
x-scheme-handler/http=librewolf
|
||||
x-scheme-handler/https=librewolf
|
||||
text/calendar=khal import --batch
|
||||
|
||||
[hooks]
|
||||
#
|
||||
# Hooks are triggered whenever the associated event occurs.
|
||||
|
||||
#
|
||||
# Executed when a new email arrives in the selected folder
|
||||
#mail-received=notify-send "[$AERC_ACCOUNT/$AERC_FOLDER] New mail from $AERC_FROM_NAME" "$AERC_SUBJECT"
|
||||
|
||||
#
|
||||
# Executed when mail is deleted from a folder
|
||||
#mail-deleted=mbsync "$AERC_ACCOUNT:$AERC_FOLDER" &
|
||||
|
||||
#
|
||||
# Executed when aerc adds mail to a folder
|
||||
#mail-added=mbsync "$AERC_ACCOUNT:$AERC_FOLDER" &
|
||||
|
||||
#
|
||||
# Executed when aerc starts
|
||||
#aerc-startup=aerc :terminal calcurse && aerc :next-tab
|
||||
|
||||
#
|
||||
# Executed when aerc shuts down.
|
||||
#aerc-shutdown=
|
||||
|
||||
#
|
||||
# Executed when notmuch tags are modified.
|
||||
#tag-modified=
|
||||
|
||||
#
|
||||
# Executed when flags are changed on a message.
|
||||
#flag-changed=mbsync "$AERC_ACCOUNT:$AERC_FOLDER" &
|
||||
|
||||
[templates]
|
||||
# Templates are used to populate email bodies automatically.
|
||||
|
||||
###
|
||||
new-message=new-msg
|
||||
quoted-reply=reply-quoted
|
||||
|
||||
|
||||
# The directories where the templates are stored. It takes a colon-separated
|
||||
# list of directories. If this is unset or if a template cannot be found, the
|
||||
# following paths will be used as a fallback in that order:
|
||||
#
|
||||
# ${XDG_CONFIG_HOME:-~/.config}/aerc/templates
|
||||
# ${XDG_DATA_HOME:-~/.local/share}/aerc/templates
|
||||
# /usr/local/share/aerc/templates
|
||||
# /usr/share/aerc/templates
|
||||
#
|
||||
template-dirs=${XDG_CONFIG_HOME:-~/.config}/aerc/templates
|
||||
|
||||
# The default template to be used for new messages.
|
||||
#
|
||||
# default: new_message
|
||||
#new-message=new_message
|
||||
|
||||
# The default template to be used for quoted replies.
|
||||
#
|
||||
# default: quoted_reply
|
||||
#quoted-reply=quoted_reply
|
||||
|
||||
# The default template to be used for forward as body.
|
||||
#
|
||||
# default: forward_as_body
|
||||
#forwards=forward_as_body
|
||||
|
||||
[terminal]
|
||||
passthrough=false
|
||||
@@ -0,0 +1,883 @@
|
||||
#
|
||||
# aerc main configuration
|
||||
|
||||
[general]
|
||||
# Used as a default path for save operations if no other path is specified.
|
||||
# ~ is expanded to the current user home dir.
|
||||
#
|
||||
#default-save-path=
|
||||
|
||||
# If set to "gpg", aerc will use system gpg binary and keystore for all crypto
|
||||
# operations. If set to "internal", the internal openpgp keyring will be used.
|
||||
# If set to "auto", the system gpg will be preferred unless the internal
|
||||
# keyring already exists, in which case the latter will be used.
|
||||
#
|
||||
# Default: auto
|
||||
#pgp-provider=auto
|
||||
|
||||
# By default, the file permissions of accounts.conf must be restrictive and
|
||||
# only allow reading by the file owner (0600). Set this option to true to
|
||||
# ignore this permission check. Use this with care as it may expose your
|
||||
# credentials.
|
||||
#
|
||||
# Default: false
|
||||
unsafe-accounts-conf=false
|
||||
index-format=notmuch://~/.local/share/mail
|
||||
# Output log messages to specified file. A path starting with ~/ is expanded to
|
||||
# the user home dir. When redirecting aerc's output to a file using > shell
|
||||
# redirection, this setting is ignored and log messages are printed to stdout.
|
||||
#
|
||||
log-file=~/.local/share/aerc/aerc.log
|
||||
log-level=debug
|
||||
|
||||
|
||||
# Disable IPC entirely. Don't run commands (including mailto:... and mbox:...)
|
||||
# in an existing aerc instance, and don't start an IPC server to allow
|
||||
# subsequent aerc instances to run commands in the current one.
|
||||
#
|
||||
# Default: false
|
||||
#disable-ipc=false
|
||||
|
||||
# Don't run mailto:... commands over IPC; start a new aerc instance with the
|
||||
# composer instead.
|
||||
#
|
||||
# Default: false
|
||||
#disable-ipc-mailto=false
|
||||
#
|
||||
# Don't run mbox:... commands over IPC; start a new aerc instance with the mbox
|
||||
# file instead.
|
||||
#
|
||||
# Default: false
|
||||
#disable-ipc-mbox=false
|
||||
|
||||
# Set the $TERM environment variable used for the embedded terminal.
|
||||
#
|
||||
# Default: xterm-256color
|
||||
#term=xterm-256color
|
||||
|
||||
# Display OSC8 strings in the embedded terminal
|
||||
#
|
||||
# Default: false
|
||||
#enable-osc8=false
|
||||
|
||||
# Default shell command to use for :menu. This will be executed with sh -c and
|
||||
# will run in an popover dialog.
|
||||
#
|
||||
# Any occurrence of %f will be replaced by a temporary file path where the
|
||||
# command is expected to write output lines to be consumed by :menu. Otherwise,
|
||||
# the lines will be read from the command's standard output.
|
||||
#
|
||||
# Examples:
|
||||
# default-menu-cmd=fzf
|
||||
# default-menu-cmd=fzf --multi
|
||||
# default-menu-cmd=dmenu -l 20
|
||||
# default-menu-cmd=ranger --choosefiles=%f
|
||||
#
|
||||
#default-menu-cmd=
|
||||
|
||||
[ui]
|
||||
#
|
||||
# Describes the format for each row in a mailbox view. This is a comma
|
||||
# separated list of column names with an optional align and width suffix. After
|
||||
# the column name, one of the '<' (left), ':' (center) or '>' (right) alignment
|
||||
# characters can be added (by default, left) followed by an optional width
|
||||
# specifier. The width is either an integer representing a fixed number of
|
||||
# characters, or a percentage between 1% and 99% representing a fraction of the
|
||||
# terminal width. It can also be one of the '*' (auto) or '=' (fit) special
|
||||
# width specifiers. Auto width columns will be equally attributed the remaining
|
||||
# terminal width. Fit width columns take the width of their contents. If no
|
||||
# width specifier is set, '*' is used by default.
|
||||
#
|
||||
# Default: flags:4,name<20%,subject,date>=
|
||||
index-columns=flags:4,name<35%,subject,date>=
|
||||
column-name={{if match .Folder "(?i)Sent|Gesendet"}}{{index (.To | persons) 0}}{{else}}{{index (.From | persons) 0}}{{end}}
|
||||
border-char-vertical="│"
|
||||
border-char-horizontal="─"
|
||||
styleset-name="gruvbox-dark"
|
||||
threading-enabled=true
|
||||
|
||||
#
|
||||
# Each name in index-columns must have a corresponding column-$name setting.
|
||||
# All column-$name settings accept golang text/template syntax. See
|
||||
# aerc-templates(7) for available template attributes and functions.
|
||||
#
|
||||
# Here are some examples to show the To field instead of the From field for
|
||||
# an email (modifying column-name):
|
||||
#
|
||||
# 1. a generic one
|
||||
# column-name={{ .Peer | names | join ", " }}
|
||||
# 2. based upon the selected folder
|
||||
# column-name={{if match .Folder "^(Gesendet|Sent)$"}}{{index (.To | names) 0}}{{else}}{{index (.From | names) 0}}{{end}}
|
||||
#
|
||||
# Default settings
|
||||
#column-flags={{.Flags | join ""}}
|
||||
#column-name={{index (.From | names) 0}}
|
||||
#column-subject={{.ThreadPrefix}}{{.Subject}}
|
||||
#column-date={{.DateAutoFormat .Date.Local}}
|
||||
|
||||
#
|
||||
# String separator inserted between columns. When the column width specifier is
|
||||
# an exact number of characters, the separator is added to it (i.e. the exact
|
||||
# width will be fully available for the column contents).
|
||||
#
|
||||
# Default: " "
|
||||
#column-separator=" "
|
||||
|
||||
#
|
||||
# See time.Time#Format at https://godoc.org/time#Time.Format
|
||||
#
|
||||
# Default: 2006 Jan 02
|
||||
#timestamp-format=2006 Jan 02
|
||||
|
||||
#
|
||||
# Index-only time format for messages that were received/sent today.
|
||||
# If this is empty, timestamp-format is used instead.
|
||||
#
|
||||
# Default: 15:04
|
||||
#this-day-time-format=15:04
|
||||
|
||||
#
|
||||
# Index-only time format for messages that were received/sent within the last
|
||||
# 7 days. If this is empty, timestamp-format is used instead.
|
||||
#
|
||||
# Default: Jan 02
|
||||
#this-week-time-format=Jan 02
|
||||
|
||||
#
|
||||
# Index-only time format for messages that were received/sent this year.
|
||||
# If this is empty, timestamp-format is used instead.
|
||||
#
|
||||
#Default: Jan 02
|
||||
#this-year-time-format=Jan 02
|
||||
|
||||
#
|
||||
# Overrides timestamp-format for the message view.
|
||||
#
|
||||
# Default: 2006 Jan 02, 15:04 GMT-0700
|
||||
#message-view-timestamp-format=2006 Jan 02, 15:04 GMT-0700
|
||||
|
||||
#
|
||||
# If set, overrides timestamp-format in the message view for messages
|
||||
# that were received/sent today.
|
||||
#
|
||||
#message-view-this-day-time-format=
|
||||
|
||||
# If set, overrides timestamp-format in the message view for messages
|
||||
# that were received/sent within the last 7 days.
|
||||
#
|
||||
#message-view-this-week-time-format=
|
||||
|
||||
#
|
||||
# If set, overrides *timestamp-format* in the message view for messages
|
||||
# that were received/sent this year.
|
||||
#
|
||||
#message-view-this-year-time-format=
|
||||
|
||||
#
|
||||
# Width of the sidebar, including the border.
|
||||
#
|
||||
# Default: 22
|
||||
sidebar-width=22
|
||||
|
||||
#
|
||||
# Default split layout for message list tabs. The syntax is:
|
||||
#
|
||||
# [<direction>] <size>
|
||||
#
|
||||
# <direction> is optional and defaults to horizontal. It can take one
|
||||
# of the following values: h, horiz, horizontal, v, vert, vertical.
|
||||
#
|
||||
# <size> is a positive integer representing the size (in terminal cells)
|
||||
# of the message list window.
|
||||
#
|
||||
#message-list-split=
|
||||
|
||||
#
|
||||
# Message to display when viewing an empty folder.
|
||||
#
|
||||
# Default: (no messages)
|
||||
#empty-message=(no messages)
|
||||
|
||||
# Message to display when no folders exists or are all filtered
|
||||
#
|
||||
# Default: (no folders)
|
||||
#empty-dirlist=(no folders)
|
||||
#
|
||||
# Value to set {{.Subject}} template to when subject is empty.
|
||||
#
|
||||
# Default: (no subject)
|
||||
#empty-subject=(no subject)
|
||||
|
||||
# Enable mouse events in the ui, e.g. clicking and scrolling with the mousewheel
|
||||
#
|
||||
# Default: false
|
||||
mouse-enabled=false
|
||||
|
||||
#
|
||||
# Ring the bell when new messages are received
|
||||
#
|
||||
# Default: true
|
||||
#new-message-bell=true
|
||||
|
||||
#
|
||||
# Template to use for Account tab titles
|
||||
#
|
||||
# Default: {{.Account}}
|
||||
#tab-title-account={{.Account}}
|
||||
|
||||
#
|
||||
# Template to use for Composer tab titles
|
||||
#
|
||||
# Default: {{if .To}}to:{{index (.To | shortmboxes) 0}} {{end}}{{.SubjectBase}}
|
||||
#tab-title-composer={{if .To}}to:{{index (.To | shortmboxes) 0}} {{end}}{{.SubjectBase}}
|
||||
|
||||
#
|
||||
# Template to use for Message Viewer tab titles
|
||||
#
|
||||
# Default: {{.Subject}}
|
||||
#tab-title-viewer={{.Subject}}
|
||||
|
||||
|
||||
# Marker to show before a pinned tab's name.
|
||||
#
|
||||
# Default: `
|
||||
#pinned-tab-marker='`'
|
||||
|
||||
# Template for the left side of the directory list.
|
||||
# See aerc-templates(7) for all available fields and functions.
|
||||
#
|
||||
# Default: {{.Folder}}
|
||||
#dirlist-left={{.Folder}}
|
||||
|
||||
# Template for the right side of the directory list.
|
||||
# See aerc-templates(7) for all available fields and functions.
|
||||
#
|
||||
# Default: {{if .Unread}}{{humanReadable .Unread}}{{end}}
|
||||
#dirlist-right={{if .Unread}}{{humanReadable .Unread}}{{end}}
|
||||
|
||||
# Delay after which the messages are actually listed when entering a directory.
|
||||
# This avoids loading messages when skipping over folders and makes the UI more
|
||||
# responsive. If you do not want that, set it to 0s.
|
||||
#
|
||||
# Default: 200ms
|
||||
#dirlist-delay=200ms
|
||||
|
||||
# Display the directory list as a foldable tree that allows to collapse and
|
||||
# expand the folders.
|
||||
#
|
||||
# Default: false
|
||||
dirlist-tree=true
|
||||
|
||||
# If dirlist-tree is enabled, set level at which folders are collapsed by
|
||||
# default. Set to 0 to disable.
|
||||
#
|
||||
# Default: 0
|
||||
dirlist-collapse=1
|
||||
|
||||
# List of space-separated criteria to sort the messages by, see *sort*
|
||||
# command in *aerc*(1) for reference. Prefixing a criterion with "-r "
|
||||
# reverses that criterion.
|
||||
#
|
||||
# Example: "from -r date"
|
||||
#
|
||||
sort = -r date
|
||||
|
||||
# Moves to next message when the current message is deleted
|
||||
#
|
||||
# Default: true
|
||||
#next-message-on-delete=true
|
||||
|
||||
# Automatically set the "seen" flag when a message is opened in the message
|
||||
# viewer.
|
||||
#
|
||||
# Default: true
|
||||
#auto-mark-read=true
|
||||
|
||||
# The directories where the stylesets are stored. It takes a colon-separated
|
||||
# list of directories. If this is unset or if a styleset cannot be found, the
|
||||
# following paths will be used as a fallback in that order:
|
||||
#
|
||||
# ${XDG_CONFIG_HOME:-~/.config}/aerc/stylesets
|
||||
# ${XDG_DATA_HOME:-~/.local/share}/aerc/stylesets
|
||||
# /usr/local/share/aerc/stylesets
|
||||
# /usr/share/aerc/stylesets
|
||||
#
|
||||
#stylesets-dirs=
|
||||
|
||||
# Uncomment to use box-drawing characters for vertical and horizontal borders.
|
||||
#
|
||||
# Default: "│" and "─"
|
||||
#border-char-vertical="│"
|
||||
#border-char-horizontal="─"
|
||||
|
||||
# Sets the styleset to use for the aerc ui elements.
|
||||
#
|
||||
# Default: default
|
||||
#styleset-name=default
|
||||
|
||||
# Activates fuzzy search in commands and their arguments: the typed string is
|
||||
# searched in the command or option in any position, and need not be
|
||||
# consecutive characters in the command or option.
|
||||
#
|
||||
# Default: false
|
||||
#fuzzy-complete=false
|
||||
|
||||
# How long to wait after the last input before auto-completion is triggered.
|
||||
#
|
||||
# Default: 250ms
|
||||
#completion-delay=250ms
|
||||
|
||||
# The minimum required characters to allow auto-completion to be triggered after
|
||||
# completion-delay.
|
||||
#
|
||||
# Setting this to "manual" disables automatic completion, leaving only the
|
||||
# manually triggered completion with the $complete key (see aerc-binds(5) for
|
||||
# more details).
|
||||
#
|
||||
# Default: 1
|
||||
#completion-min-chars=1
|
||||
|
||||
#
|
||||
# Global switch for completion popovers
|
||||
#
|
||||
# Default: true
|
||||
#completion-popovers=true
|
||||
|
||||
# Uncomment to use UTF-8 symbols to indicate PGP status of messages
|
||||
#
|
||||
# Default: ASCII
|
||||
#icon-unencrypted=
|
||||
#icon-encrypted=✔
|
||||
#icon-signed=✔
|
||||
#icon-signed-encrypted=✔
|
||||
#icon-unknown=✘
|
||||
#icon-invalid=⚠
|
||||
|
||||
# Reverses the order of the message list. By default, the message list is
|
||||
# ordered with the newest (highest UID) message on top. Reversing the order
|
||||
# will put the oldest (lowest UID) message on top. This can be useful in cases
|
||||
# where the backend does not support sorting.
|
||||
#
|
||||
# Default: false
|
||||
#reverse-msglist-order = false
|
||||
|
||||
# Reverse display of the message threads. Default order is the initial
|
||||
# message is on the top with all the replies being displayed below. The
|
||||
# reverse option will put the initial message at the bottom with the
|
||||
# replies on top.
|
||||
#
|
||||
# Default: false
|
||||
#reverse-thread-order=false
|
||||
|
||||
# Positions the cursor on the last message in the message list (at the
|
||||
# bottom of the view) when opening a new folder.
|
||||
#
|
||||
# Default: false
|
||||
#select-last-message=false
|
||||
|
||||
# Sort the thread siblings according to the sort criteria for the messages. If
|
||||
# sort-thread-siblings is false, the thread siblings will be sorted based on
|
||||
# the message UID in ascending order. This option is only applicable for
|
||||
# client-side threading with a backend that enables sorting. Note that there's
|
||||
# a performance impact when sorting is activated.
|
||||
#
|
||||
# Default: false
|
||||
#sort-thread-siblings=false
|
||||
|
||||
# Set the scroll offset in number of lines from the top and bottom of the
|
||||
# message list.
|
||||
#
|
||||
# Default: 0
|
||||
#msglist-scroll-offset = 0
|
||||
|
||||
#
|
||||
# Enable a threaded view of messages. If this is not supported by the backend
|
||||
# (IMAP server or notmuch), threads will be built by the client.
|
||||
#
|
||||
# Default: false
|
||||
#threading-enabled=false
|
||||
|
||||
# Force client-side thread building
|
||||
#
|
||||
# Default: false
|
||||
#force-client-threads=false
|
||||
|
||||
# If no References nor In-Reply-To headers can be matched to build client side
|
||||
# threads, fallback to similar subjects.
|
||||
#
|
||||
# Default: false
|
||||
#threading-by-subject=false
|
||||
|
||||
# Show thread context enables messages which do not match the current query (or
|
||||
# belong to the current mailbox) to be shown for context. These messages can be
|
||||
# styled separately using "msglist_thread_context" in a styleset. This feature
|
||||
# is not supported by all backends
|
||||
#
|
||||
# Default: false
|
||||
#show-thread-context=false
|
||||
|
||||
# Debounce client-side thread building
|
||||
#
|
||||
# Default: 50ms
|
||||
#client-threads-delay=50ms
|
||||
|
||||
#
|
||||
# Thread prefix customization:
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the arrow head.
|
||||
#
|
||||
# Default: ">"
|
||||
#thread-prefix-tip = ">"
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the arrow indentation.
|
||||
#
|
||||
# Default: " "
|
||||
#thread-prefix-indent = " "
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the vertical extension of
|
||||
# the arrow.
|
||||
#
|
||||
# Default: "│"
|
||||
#thread-prefix-stem = "│"
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the horizontal extension
|
||||
# of the arrow.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-limb = ""
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the folded thread
|
||||
# indicator.
|
||||
#
|
||||
# Default: "+"
|
||||
#thread-prefix-folded = "+"
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the unfolded thread
|
||||
# indicator.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-unfolded = ""
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the first child connector.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-first-child = ""
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the connector used if
|
||||
# the message has siblings.
|
||||
#
|
||||
# Default: "├─"
|
||||
#thread-prefix-has-siblings = "├─"
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the connector used if the
|
||||
# message has no parents and no children.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-lone = ""
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the connector used if the
|
||||
# message has no parents and has children.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-orphan = ""
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the connector for the last
|
||||
# sibling.
|
||||
#
|
||||
# Default: "└─"
|
||||
#thread-prefix-last-sibling = "└─"
|
||||
|
||||
#
|
||||
# Customize the reversed thread prefix appearance by selecting the connector for
|
||||
# the last sibling.
|
||||
#
|
||||
# Default: "┌─"
|
||||
#thread-prefix-last-sibling-reverse = "┌─"
|
||||
|
||||
#
|
||||
# Customize the thread prefix appearance by selecting the connector for dummy
|
||||
# thread.
|
||||
#
|
||||
# Default: "┬─"
|
||||
#thread-prefix-dummy = "┬─"
|
||||
|
||||
#
|
||||
# Customize the reversed thread prefix appearance by selecting the connector for
|
||||
# dummy thread.
|
||||
#
|
||||
# Default: "┴─"
|
||||
#thread-prefix-dummy-reverse = "┴─"
|
||||
|
||||
#
|
||||
# Customize the reversed thread prefix appearance by selecting the first child
|
||||
# connector.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-first-child-reverse = ""
|
||||
|
||||
#
|
||||
# Customize the reversed thread prefix appearance by selecting the connector
|
||||
# used if the message has no parents and has children.
|
||||
#
|
||||
# Default: ""
|
||||
#thread-prefix-orphan-reverse = ""
|
||||
|
||||
[statusline]
|
||||
#
|
||||
# Describes the format for the status line. This is a comma separated list of
|
||||
# column names with an optional align and width suffix. See [ui].index-columns
|
||||
# for more details. To completely mute the status line except for push
|
||||
# notifications, explicitly set status-columns to an empty string.
|
||||
#
|
||||
# Default: left<*,center:=,right>*
|
||||
#status-columns=left<*,center:=,right>*
|
||||
|
||||
#
|
||||
# Each name in status-columns must have a corresponding column-$name setting.
|
||||
# All column-$name settings accept golang text/template syntax. See
|
||||
# aerc-templates(7) for available template attributes and functions.
|
||||
#
|
||||
# Default settings
|
||||
#column-left=[{{.Account}}] {{.StatusInfo}}
|
||||
#column-center={{.PendingKeys}}
|
||||
#column-right={{.TrayInfo}} | {{cwd}}
|
||||
|
||||
#
|
||||
# String separator inserted between columns.
|
||||
# See [ui].column-separator for more details.
|
||||
#
|
||||
#column-separator=" "
|
||||
|
||||
# Specifies the separator between grouped statusline elements.
|
||||
#
|
||||
# Default: " | "
|
||||
#separator=" | "
|
||||
|
||||
# Defines the mode for displaying the status elements.
|
||||
# Options: text, icon
|
||||
#
|
||||
# Default: text
|
||||
#display-mode=text
|
||||
|
||||
[viewer]
|
||||
# pager=less -Rc
|
||||
pager= bat --style=plain --paging=always
|
||||
# html-unsafe-images=false
|
||||
# html-filter=dante
|
||||
image/*=chafa -f kitty -s ${width}x${height}
|
||||
text/html=w3m -T text/html -dump -o display_link_number=1
|
||||
application/pdf=zathura
|
||||
video/*=mpv
|
||||
header-layout=From,To,Subject,Date
|
||||
|
||||
|
||||
#w3m -dump -T text/html -o display_link_number=1
|
||||
#
|
||||
# Specifies the pager to use when displaying emails. Note that some filters
|
||||
# may add ANSI codes to add color to rendered emails, so you may want to use a
|
||||
# pager which supports ANSI codes.
|
||||
#
|
||||
# Default: less -Rc
|
||||
|
||||
#
|
||||
# If an email offers several versions (multipart), you can configure which
|
||||
# mimetype to prefer. For example, this can be used to prefer plaintext over
|
||||
# html emails.
|
||||
#
|
||||
# Default: text/plain,text/html
|
||||
#alternatives=text/plain,text/html
|
||||
|
||||
#
|
||||
# Default setting to determine whether to show full headers or only parsed
|
||||
# ones in message viewer.
|
||||
#
|
||||
# Default: false
|
||||
#show-headers=false
|
||||
|
||||
#
|
||||
# Layout of headers when viewing a message. To display multiple headers in the
|
||||
# same row, separate them with a pipe, e.g. "From|To". Rows will be hidden if
|
||||
# none of their specified headers are present in the message.
|
||||
#
|
||||
# Default: From|To,Cc|Bcc,Date,Subject
|
||||
#header-layout=From|To,Cc|Bcc,Date,Subject
|
||||
|
||||
# Whether to always show the mimetype of an email, even when it is just a single part
|
||||
#
|
||||
# Default: false
|
||||
#always-show-mime=false
|
||||
|
||||
# Define the maximum height of the mimetype switcher before a scrollbar is used.
|
||||
# The height of the mimetype switcher is restricted to half of the display
|
||||
# height. If the provided value for the height is zero, the number of parts will
|
||||
# be used as the height of the type switcher.
|
||||
#
|
||||
# Default: 0
|
||||
#max-mime-height = 0
|
||||
|
||||
# Parses and extracts http links when viewing a message. Links can then be
|
||||
# accessed with the open-link command.
|
||||
#
|
||||
# Default: true
|
||||
#parse-http-links=true
|
||||
|
||||
[compose]
|
||||
editor=nvim +'set ft=mail.markdown'
|
||||
|
||||
# editor=nvim +setf\ mail
|
||||
# editor=nvim # or your preferred editor
|
||||
# Address book command
|
||||
address-book-cmd=abook --mutt-query '%s'
|
||||
|
||||
# Auto-complete addresses
|
||||
# address-book-cmd-match='%s'
|
||||
# address-book-cmd=abook --mutt-query '%s'
|
||||
# terminal, though it may also launch a graphical window if the environment
|
||||
# supports it. Defaults to $EDITOR, or vi.
|
||||
#editor=
|
||||
|
||||
#
|
||||
# When set, aerc will create and read .eml files for composing that have
|
||||
# non-standard \n linebreaks. This is only relevant if the used editor does not
|
||||
# support CRLF linebreaks.
|
||||
#
|
||||
#lf-editor=false
|
||||
|
||||
#
|
||||
# Default header fields to display when composing a message. To display
|
||||
# multiple headers in the same row, separate them with a pipe, e.g. "To|From".
|
||||
#
|
||||
# Default: To|From,Subject
|
||||
#header-layout=To|From,Subject
|
||||
|
||||
#
|
||||
# Edit headers into the text editor instead than separate fields.
|
||||
#
|
||||
# When this is true, address-book-cmd is not supported and address completion
|
||||
# is left to the editor itself. Also, displaying multiple headers on the same
|
||||
# line is not possible.
|
||||
#
|
||||
# Default: false
|
||||
edit-headers=true
|
||||
|
||||
#
|
||||
# Sets focus to the email body when the composer window opens.
|
||||
#
|
||||
# Default: false
|
||||
#focus-body=false
|
||||
|
||||
#
|
||||
# Specifies the command to be used to tab-complete email addresses. Any
|
||||
# occurrence of "%s" in the address-book-cmd will be replaced with what the
|
||||
# user has typed so far.
|
||||
#
|
||||
# The command must output the completions to standard output, one completion
|
||||
# per line. Each line must be tab-delimited, with an email address occurring as
|
||||
# the first field. Only the email address field is required. The second field,
|
||||
# if present, will be treated as the contact name. Additional fields are
|
||||
# ignored.
|
||||
#
|
||||
# This parameter can also be set per account in accounts.conf.
|
||||
#address-book-cmd=
|
||||
|
||||
# Specifies the command to be used to select attachments. Any occurrence of
|
||||
# '%s' in the file-picker-cmd will be replaced with the argument <arg>
|
||||
# to :attach -m <arg>. Any occurrence of '%f' will be replaced by the
|
||||
# location of a temporary file, from which aerc will read the selected files.
|
||||
#
|
||||
# If '%f' is not present, the command must output the selected files to
|
||||
# standard output, one file per line. If it is present, then aerc does not
|
||||
# capture the standard output and instead reads the files from the temporary
|
||||
# file which should have the same format.
|
||||
#file-picker-cmd=/home/liph/.local/bin/yazi-picker %f
|
||||
|
||||
#
|
||||
# Allow to address yourself when replying
|
||||
#
|
||||
# Default: true
|
||||
#reply-to-self=true
|
||||
|
||||
# Warn before sending an email with an empty subject.
|
||||
#
|
||||
# Default: false
|
||||
#empty-subject-warning=false
|
||||
|
||||
#
|
||||
# Warn before sending an email that matches the specified regexp but does not
|
||||
# have any attachments. Leave empty to disable this feature.
|
||||
#
|
||||
# Uses Go's regexp syntax, documented at https://golang.org/s/re2syntax. The
|
||||
# "(?im)" flags are set by default (case-insensitive and multi-line).
|
||||
#
|
||||
# Example:
|
||||
# no-attachment-warning=^[^>]*attach(ed|ment)
|
||||
#
|
||||
#no-attachment-warning=
|
||||
|
||||
#
|
||||
# When set, aerc will generate "format=flowed" bodies with a content type of
|
||||
# "text/plain; format=flowed" as described in RFC3676. This format is easier to
|
||||
# handle for some mailing software, and generally just looks like ordinary
|
||||
# text. To actually make use of this format's features, you'll need support in
|
||||
# your editor.
|
||||
#
|
||||
format-flowed=false
|
||||
|
||||
[multipart-converters]
|
||||
text/html=/home/liph/.local/bin/aerc-md-convert
|
||||
|
||||
[filters]
|
||||
#
|
||||
text/plain=sed 's/^$//'
|
||||
|
||||
# Filters allow you to pipe an email body through a shell command to render
|
||||
# certain emails differently, e.g. highlighting them with ANSI escape codes.
|
||||
#
|
||||
# The commands are invoked with sh -c. The following folders are prepended to
|
||||
# the system $PATH to allow referencing filters from their name only:
|
||||
#
|
||||
# ${XDG_CONFIG_HOME:-~/.config}/aerc/filters
|
||||
# ~/.local/libexec/aerc/filters
|
||||
# ${XDG_DATA_HOME:-~/.local/share}/aerc/filters
|
||||
# $PREFIX/libexec/aerc/filters
|
||||
# $PREFIX/share/aerc/filters
|
||||
# /usr/libexec/aerc/filters
|
||||
# /usr/share/aerc/filters
|
||||
#
|
||||
# If you want to run a program in your default $PATH which has the same name
|
||||
# as a builtin filter (e.g. /usr/bin/colorize), use its absolute path.
|
||||
#
|
||||
# The following variables are defined in the filter command environment:
|
||||
#
|
||||
# AERC_MIME_TYPE the part MIME type/subtype
|
||||
# AERC_FORMAT the part content type format= parameter
|
||||
# AERC_FILENAME the attachment filename (if any)
|
||||
# AERC_SUBJECT the message Subject header value
|
||||
# AERC_FROM the message From header value
|
||||
#
|
||||
# The first filter which matches the email's mimetype will be used, so order
|
||||
# them from most to least specific.
|
||||
#
|
||||
# You can also match on non-mimetypes, by prefixing with the header to match
|
||||
# against (non-case-sensitive) and a comma, e.g. subject,text will match a
|
||||
# subject which contains "text". Use header,~regex to match against a regex.
|
||||
#
|
||||
text/plain=colorize
|
||||
text/calendar=calendar
|
||||
message/delivery-status=colorize
|
||||
message/rfc822=colorize
|
||||
text/html=w3m -T text/html -dump -o display_link_number=1
|
||||
#text/*=bat -fP --file-name="$AERC_FILENAME"
|
||||
#application/x-sh=bat -fP -l sh
|
||||
#image/*=catimg -w $(tput cols) -
|
||||
#subject,~Git(hub|lab)=lolcat -f
|
||||
#from,thatguywhodoesnothardwraphismessages=wrap -w 100 | colorize
|
||||
|
||||
# This special filter is only used to post-process email headers when
|
||||
# [viewer].show-headers=true
|
||||
# By default, headers are piped directly into the pager.
|
||||
#
|
||||
.headers=colorize
|
||||
|
||||
[openers]
|
||||
#
|
||||
# Openers allow you to specify the command to use for the :open and :open-link
|
||||
# actions on a per-MIME-type basis. The :open-link URL scheme is used to
|
||||
# determine the MIME type as follows: x-scheme-handler/<scheme>.
|
||||
#
|
||||
# {} is expanded as the temporary filename or URL to be opened with proper
|
||||
# shell quoting. If it is not encountered in the command, the filename/URL will
|
||||
# be appended to the end of the command. The command will then be executed with
|
||||
# `sh -c`.
|
||||
#
|
||||
# Like [filters], openers support basic shell globbing. The first opener which
|
||||
# matches the part's MIME type (or URL scheme handler MIME type) will be used,
|
||||
# so order them from most to least specific.
|
||||
#
|
||||
# Examples:
|
||||
# x-scheme-handler/irc=hexchat
|
||||
# x-scheme-handler/http*=printf '%s' {} | wl-copy
|
||||
# text/html=surf -dfgms
|
||||
# text/plain=gvim {} +125
|
||||
# message/rfc822=thunderbird
|
||||
text/html=w3m
|
||||
x-scheme-handler/http=librewolf
|
||||
x-scheme-handler/https=librewolf
|
||||
text/calendar=khal import --batch
|
||||
|
||||
[hooks]
|
||||
#
|
||||
# Hooks are triggered whenever the associated event occurs.
|
||||
|
||||
#
|
||||
# Executed when a new email arrives in the selected folder
|
||||
#mail-received=notify-send "[$AERC_ACCOUNT/$AERC_FOLDER] New mail from $AERC_FROM_NAME" "$AERC_SUBJECT"
|
||||
|
||||
#
|
||||
# Executed when mail is deleted from a folder
|
||||
#mail-deleted=mbsync "$AERC_ACCOUNT:$AERC_FOLDER" &
|
||||
|
||||
#
|
||||
# Executed when aerc adds mail to a folder
|
||||
#mail-added=mbsync "$AERC_ACCOUNT:$AERC_FOLDER" &
|
||||
|
||||
#
|
||||
# Executed when aerc starts
|
||||
#aerc-startup=aerc :terminal calcurse && aerc :next-tab
|
||||
|
||||
#
|
||||
# Executed when aerc shuts down.
|
||||
#aerc-shutdown=
|
||||
|
||||
#
|
||||
# Executed when notmuch tags are modified.
|
||||
#tag-modified=
|
||||
|
||||
#
|
||||
# Executed when flags are changed on a message.
|
||||
#flag-changed=mbsync "$AERC_ACCOUNT:$AERC_FOLDER" &
|
||||
|
||||
[templates]
|
||||
# Templates are used to populate email bodies automatically.
|
||||
|
||||
###
|
||||
new-message=new-msg
|
||||
quoted-reply=reply-quoted
|
||||
|
||||
|
||||
# The directories where the templates are stored. It takes a colon-separated
|
||||
# list of directories. If this is unset or if a template cannot be found, the
|
||||
# following paths will be used as a fallback in that order:
|
||||
#
|
||||
# ${XDG_CONFIG_HOME:-~/.config}/aerc/templates
|
||||
# ${XDG_DATA_HOME:-~/.local/share}/aerc/templates
|
||||
# /usr/local/share/aerc/templates
|
||||
# /usr/share/aerc/templates
|
||||
#
|
||||
template-dirs=${XDG_CONFIG_HOME:-~/.config}/aerc/templates
|
||||
|
||||
# The default template to be used for new messages.
|
||||
#
|
||||
# default: new_message
|
||||
#new-message=new_message
|
||||
|
||||
# The default template to be used for quoted replies.
|
||||
#
|
||||
# default: quoted_reply
|
||||
#quoted-reply=quoted_reply
|
||||
|
||||
# The default template to be used for forward as body.
|
||||
#
|
||||
# default: forward_as_body
|
||||
#forwards=forward_as_body
|
||||
@@ -0,0 +1,161 @@
|
||||
# Binds are of the form <key sequence> = <command to run>
|
||||
# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
|
||||
|
||||
# GLOBAL Navigation & Contacts
|
||||
( = :term abook<Enter>
|
||||
,ab = :term abook<Enter>
|
||||
,ca = :term khal interactive<Enter>
|
||||
,c1 = :term khal interactive -a personal<Enter>
|
||||
,c2 = :term khal interactive -a healplaylove<Enter>
|
||||
,c3 = :term khal interactive -a glarisegg<Enter>
|
||||
,ta = :term taskwarrior-tui<Enter>
|
||||
|
||||
<A-p> = :prev-tab<Enter>
|
||||
<A-n> = :next-tab<Enter>
|
||||
<C-t> = :terminal<Enter>
|
||||
? = :help keys<Enter>
|
||||
<C-c> = :prompt 'Quit?' quit<Enter>
|
||||
<C-q> = :prompt 'Quit?' quit<Enter>
|
||||
<C-z> = :suspend<Enter>
|
||||
|
||||
[messages]
|
||||
# Sync
|
||||
u = :term /home/liph/.local/bin/mailsync<Enter>
|
||||
|
||||
# Navigation
|
||||
j = :next<Enter>
|
||||
k = :prev<Enter>
|
||||
<Down> = :next<Enter>
|
||||
<Up> = :prev<Enter>
|
||||
g = :select 0<Enter>
|
||||
G = :select -1<Enter>
|
||||
J = :next-folder<Enter>
|
||||
K = :prev-folder<Enter>
|
||||
H = :collapse-folder<Enter>
|
||||
L = :expand-folder<Enter>
|
||||
<Left> = :collapse-folder<Enter>
|
||||
<Right> = :expand-folder<Enter>
|
||||
|
||||
# Marking/Flagging
|
||||
v = :mark -v<Enter>
|
||||
V = :mark -t<Enter>
|
||||
<Space> = :mark -t<Enter>:next<Enter>
|
||||
<Esc> = :unmark -a<Enter>
|
||||
|
||||
# Accounts
|
||||
,1 = :change-tab phil<Enter>
|
||||
,2 = :change-tab spam<Enter>
|
||||
,3 = :change-tab proton<Enter>
|
||||
|
||||
# Folders
|
||||
,i = :cf Inbox<Enter>
|
||||
,u = :cf Unread<Enter>
|
||||
,n = :cf Newsletters<Enter>
|
||||
,f = :cf Finance<Enter>
|
||||
,s = :cf Shopping<Enter>
|
||||
,v = :cf Travel<Enter>
|
||||
,d = :cf Development<Enter>
|
||||
,x = :cf Spam<Enter>
|
||||
,tr = :cf Trash<Enter>
|
||||
,aa = :cf All Mail<Enter>
|
||||
|
||||
# Actions
|
||||
<Enter> = :view<Enter>
|
||||
s = :split<Enter>
|
||||
S = :vsplit<Enter>
|
||||
d = :modify-labels +deleted -inbox<Enter>
|
||||
a = :archive flat<Enter>
|
||||
C = :compose<Enter>
|
||||
m = :compose<Enter>
|
||||
rr = :reply -a<Enter>
|
||||
rq = :reply -aq<Enter>
|
||||
Rr = :reply<Enter>
|
||||
Rq = :reply -q<Enter>
|
||||
/ = :search<space>
|
||||
\ = :filter<space>
|
||||
n = :next-result<Enter>
|
||||
N = :prev-result<Enter>
|
||||
|
||||
# Threads
|
||||
T = :toggle-threads<Enter>
|
||||
zc = :fold<Enter>
|
||||
zo = :unfold<Enter>
|
||||
za = :fold -t<Enter>
|
||||
|
||||
[messages:folder=Drafts]
|
||||
<Enter> = :recall<Enter>
|
||||
|
||||
[view]
|
||||
# Navigation & UI
|
||||
q = :close<Enter>
|
||||
x = :close<Enter>
|
||||
| = :pipe<space>
|
||||
D = :delete<Enter>
|
||||
A = :archive flat<Enter>
|
||||
f = :forward<Enter>
|
||||
rr = :reply -a<Enter>
|
||||
rq = :reply -aq<Enter>
|
||||
Rr = :reply<Enter>
|
||||
Rq = :reply -q<Enter>
|
||||
H = :toggle-headers<Enter>
|
||||
,l = :pipe urlscan<Enter>
|
||||
|
||||
# Attachment Handling
|
||||
n = :next-part<Enter>
|
||||
p = :prev-part<Enter>
|
||||
J = :next<Enter>
|
||||
K = :prev<Enter>
|
||||
o = :open<Enter>
|
||||
O = :open<Enter>
|
||||
s = :save ~/Downloads/<Enter>
|
||||
S = :save<space>
|
||||
,sa = :save -a ~/Downloads/<Enter>
|
||||
|
||||
[view::passthrough]
|
||||
$noinherit = true
|
||||
$ex = <C-x>
|
||||
<Esc> = :toggle-key-passthrough<Enter>
|
||||
|
||||
[compose]
|
||||
# General compose view
|
||||
$noinherit = true
|
||||
$ex = <C-x>
|
||||
$complete = <C-o>
|
||||
<C-k> = :attach<space>
|
||||
<C-a> = :attach<space>
|
||||
<F4> = :attach<space>
|
||||
<A-p> = :prev-tab<Enter>
|
||||
<A-n> = :next-tab<Enter>
|
||||
<tab> = :next-field<Enter>
|
||||
<backtab> = :prev-field<Enter>
|
||||
|
||||
[compose::editor]
|
||||
# While focused in the text editor (nvim)
|
||||
$noinherit = true
|
||||
$ex = <C-x>
|
||||
<C-k> = :attach<space>
|
||||
<C-a> = :attach<space>
|
||||
<F4> = :attach<space>
|
||||
|
||||
[compose::review]
|
||||
# After exiting the editor
|
||||
y = :multipart text/html<Enter>:send<Enter>
|
||||
n = :abort<Enter>
|
||||
v = :preview<Enter>
|
||||
p = :postpone<Enter>
|
||||
q = :choose -o d discard abort -o p postpone postpone<Enter>
|
||||
e = :edit<Enter>
|
||||
a = :attach<space>
|
||||
<C-k> = :attach<space>
|
||||
<C-a> = :attach<space>
|
||||
d = :detach<space>
|
||||
|
||||
[terminal]
|
||||
# Clear keys to allow passthrough to Khal/Taskwarrior
|
||||
$ex = <C-x>
|
||||
<C-p> =
|
||||
<C-n> =
|
||||
<tab> =
|
||||
<backtab> =
|
||||
<A-p> = :prev-tab<Enter>
|
||||
<A-n> = :next-tab<Enter>
|
||||
@@ -0,0 +1,146 @@
|
||||
# Binds are of the form <key sequence> = <command to run>
|
||||
# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
|
||||
|
||||
# GLOBAL Navigation & Contacts
|
||||
( = :term abook<Enter>
|
||||
,ab = :term abook<Enter>
|
||||
,ca = :term khal interactive<Enter>
|
||||
<C-p> = :prev-tab<Enter>
|
||||
<C-n> = :next-tab<Enter>
|
||||
<C-t> = :terminal<Enter>
|
||||
? = :help keys<Enter>
|
||||
<C-c> = :prompt 'Quit?' quit<Enter>
|
||||
<C-q> = :prompt 'Quit?' quit<Enter>
|
||||
<C-z> = :suspend<Enter>
|
||||
|
||||
[messages]
|
||||
# Sync
|
||||
u = :term /home/liph/.local/bin/mailsync<Enter>
|
||||
|
||||
# Navigation
|
||||
j = :next<Enter>
|
||||
k = :prev<Enter>
|
||||
<Down> = :next<Enter>
|
||||
<Up> = :prev<Enter>
|
||||
g = :select 0<Enter>
|
||||
G = :select -1<Enter>
|
||||
J = :next-folder<Enter>
|
||||
K = :prev-folder<Enter>
|
||||
H = :collapse-folder<Enter>
|
||||
L = :expand-folder<Enter>
|
||||
<Left> = :collapse-folder<Enter>
|
||||
<Right> = :expand-folder<Enter>
|
||||
|
||||
# Accounts
|
||||
,1 = :change-tab phil<Enter>
|
||||
,2 = :change-tab spam<Enter>
|
||||
,3 = :change-tab proton<Enter>
|
||||
|
||||
# Folders
|
||||
,i = :cf Inbox<Enter>
|
||||
,u = :cf Unread<Enter>
|
||||
,n = :cf Newsletters<Enter>
|
||||
,f = :cf Finance<Enter>
|
||||
,s = :cf Shopping<Enter>
|
||||
,t = :cf Travel<Enter>
|
||||
,d = :cf Development<Enter>
|
||||
,x = :cf Spam<Enter>
|
||||
,tr = :cf Trash<Enter>
|
||||
,am = :cf All Mail<Enter>
|
||||
|
||||
# Actions
|
||||
<Enter> = :view<Enter>
|
||||
s = :split<Enter>
|
||||
S = :vsplit<Enter>
|
||||
d = :modify-labels +deleted -inbox<Enter>
|
||||
a = :archive flat<Enter>
|
||||
C = :compose<Enter>
|
||||
m = :compose<Enter>
|
||||
rr = :reply -a<Enter>
|
||||
rq = :reply -aq<Enter>
|
||||
Rr = :reply<Enter>
|
||||
Rq = :reply -q<Enter>
|
||||
/ = :search<space>
|
||||
\ = :filter<space>
|
||||
n = :next-result<Enter>
|
||||
N = :prev-result<Enter>
|
||||
|
||||
# Threads
|
||||
T = :toggle-threads<Enter>
|
||||
zc = :fold<Enter>
|
||||
zo = :unfold<Enter>
|
||||
za = :fold -t<Enter>
|
||||
|
||||
[messages:folder=Drafts]
|
||||
<Enter> = :recall<Enter>
|
||||
|
||||
[view]
|
||||
# Navigation & UI
|
||||
q = :close<Enter>
|
||||
x = :close<Enter>
|
||||
| = :pipe<space>
|
||||
D = :delete<Enter>
|
||||
A = :archive flat<Enter>
|
||||
f = :forward<Enter>
|
||||
rr = :reply -a<Enter>
|
||||
rq = :reply -aq<Enter>
|
||||
Rr = :reply<Enter>
|
||||
Rq = :reply -q<Enter>
|
||||
H = :toggle-headers<Enter>
|
||||
,l = :pipe urlscan<Enter>
|
||||
|
||||
# Attachment Handling
|
||||
n = :next-part<Enter>
|
||||
p = :prev-part<Enter>
|
||||
J = :next<Enter>
|
||||
K = :prev<Enter>
|
||||
o = :open<Enter>
|
||||
O = :open<Enter>
|
||||
s = :pipe -m /home/liph/.local/bin/save-attachment<Enter>
|
||||
S = :save<space>
|
||||
,sa = :save -a<Enter>
|
||||
|
||||
[view::passthrough]
|
||||
$noinherit = true
|
||||
$ex = <C-x>
|
||||
<Esc> = :toggle-key-passthrough<Enter>
|
||||
|
||||
[compose]
|
||||
# General compose view
|
||||
$noinherit = true
|
||||
$ex = <C-x>
|
||||
$complete = <C-o>
|
||||
<C-k> = :attach<space>
|
||||
<C-a> = :attach<space>
|
||||
<F4> = :attach<space>
|
||||
<C-p> = :prev-tab<Enter>
|
||||
<C-n> = :next-tab<Enter>
|
||||
<tab> = :next-field<Enter>
|
||||
<backtab> = :prev-field<Enter>
|
||||
|
||||
[compose::editor]
|
||||
# While focused in the text editor (nvim)
|
||||
$noinherit = true
|
||||
$ex = <C-x>
|
||||
<C-k> = :attach<space>
|
||||
<C-a> = :attach<space>
|
||||
<F4> = :attach<space>
|
||||
|
||||
[compose::review]
|
||||
# After exiting the editor
|
||||
y = :multipart text/html<Enter>:send<Enter>
|
||||
n = :abort<Enter>
|
||||
v = :preview<Enter>
|
||||
p = :postpone<Enter>
|
||||
q = :choose -o d discard abort -o p postpone postpone<Enter>
|
||||
e = :edit<Enter>
|
||||
a = :attach<space>
|
||||
<C-k> = :attach<space>
|
||||
<C-a> = :attach<space>
|
||||
d = :detach<space>
|
||||
|
||||
[terminal]
|
||||
$noinherit = true
|
||||
$ex = <C-x>
|
||||
<C-p> = :prev-tab<Enter>
|
||||
<C-n> = :next-tab<Enter>
|
||||
@@ -0,0 +1,37 @@
|
||||
# Priority Management
|
||||
Priority/1=tag:priority1 and tag:inbox and not tag:deleted and not tag:spam
|
||||
Priority/2=tag:priority2 and tag:inbox and not tag:deleted and not tag:spam
|
||||
Priority/All=(tag:priority1 or tag:priority2) and not tag:deleted and not tag:spam
|
||||
|
||||
# Main Views
|
||||
Inbox=tag:inbox and not tag:deleted and not tag:spam and not (from:@makesomebreathingspace.com or from:@healplaylove.ch or from:@circle.so)
|
||||
Unread=tag:unread and not tag:deleted and not tag:spam
|
||||
Starred=(tag:flagged or tag:starred) and not tag:deleted and not tag:spam
|
||||
Archive=not tag:inbox and not tag:spam and not tag:deleted
|
||||
Mail/Sent=(folder:Sent or tag:sent) and not tag:deleted
|
||||
Mail/Drafts=folder:Drafts or tag:draft
|
||||
Mail/Spam=tag:spam and not tag:deleted
|
||||
Mail/Trash=tag:deleted
|
||||
|
||||
# Categories
|
||||
Finance=tag:finance and tag:inbox and not tag:deleted and not tag:spam
|
||||
Newsletters=tag:newsletter and tag:inbox and not tag:deleted and not tag:spam
|
||||
|
||||
# Time-based
|
||||
Time/Today=date:today and tag:inbox and not tag:deleted and not tag:spam
|
||||
Time/This Week=date:6days..today and tag:inbox and not tag:deleted and not tag:spam
|
||||
Time/This Month=date:month and tag:inbox and not tag:deleted and not tag:spam
|
||||
Time/Last 7 Days=date:7days..today and not tag:deleted and not tag:spam
|
||||
|
||||
# Special Queries
|
||||
Needs Reply=tag:inbox and not tag:replied and not tag:deleted and not tag:spam
|
||||
Attachments=tag:attachment and tag:inbox and not tag:deleted and not tag:spam
|
||||
Important=(tag:flagged or tag:priority1) and not tag:deleted and not tag:spam
|
||||
Action Required=(tag:todo or tag:followup) and not tag:deleted and not tag:spam
|
||||
|
||||
# Unprocessed
|
||||
New Mail=tag:new and not tag:deleted and not tag:spam
|
||||
Untagged=tag:inbox and not tag:priority1 and not tag:priority2 and not tag:work and not tag:personal and not tag:finance and not tag:deleted and not tag:spam
|
||||
|
||||
# All Mail
|
||||
Everything=*
|
||||
@@ -0,0 +1,44 @@
|
||||
# Standard Main Views
|
||||
Inbox=tag:inbox and not tag:deleted and not tag:spam and not (from:@makesomebreathingspace.com or from:@healplaylove.ch or from:@circle.so)
|
||||
Unread=tag:unread and not tag:deleted and not tag:spam
|
||||
Starred=(tag:flagged or tag:starred) and not tag:deleted and not tag:spam
|
||||
Archive=not tag:inbox and not tag:spam and not tag:deleted
|
||||
Mail/Sent=(folder:Sent or tag:sent) and not tag:deleted
|
||||
Mail/Drafts=folder:Drafts or tag:draft
|
||||
Mail/Spam=tag:spam and not tag:deleted
|
||||
Mail/Trash=tag:deleted
|
||||
|
||||
# Community Folder Stack
|
||||
Community=(from:@makesomebreathingspace.com or from:@healplaylove.ch or from:@circle.so) and date:today and not tag:deleted and not tag:spam
|
||||
|
||||
# Community - Breathing Space
|
||||
Community/Breathing Space=from:@makesomebreathingspace.com and not tag:deleted and not tag:spam
|
||||
Community/Breathing Space/Today=from:@makesomebreathingspace.com and date:today and not tag:deleted and not tag:spam
|
||||
Community/Breathing Space/This Week=from:@makesomebreathingspace.com and date:6days..today and not tag:deleted and not tag:spam
|
||||
|
||||
# Community - Heal Play Love
|
||||
Community/Heal Play Love=(from:@healplaylove.ch or from:@circle.so) and not tag:deleted and not tag:spam
|
||||
Community/Heal Play Love/Today=(from:@healplaylove.ch or from:@circle.so) and date:today and not tag:deleted and not tag:spam
|
||||
Community/Heal Play Love/This Week=(from:@healplaylove.ch or from:@circle.so) and date:6days..today and not tag:deleted and not tag:spam
|
||||
|
||||
# Categories
|
||||
Finance=tag:finance and tag:inbox and not tag:deleted and not tag:spam
|
||||
Newsletters=tag:newsletter and tag:inbox and not tag:deleted and not tag:spam
|
||||
|
||||
# Priority Management
|
||||
Priority/1=tag:priority1 and tag:inbox and not tag:deleted and not tag:spam
|
||||
Priority/2=tag:priority2 and tag:inbox and not tag:deleted and not tag:spam
|
||||
Priority/All=(tag:priority1 or tag:priority2) and not tag:deleted and not tag:spam
|
||||
|
||||
# Time-based
|
||||
Time/Today=date:today and tag:inbox and not tag:deleted and not tag:spam
|
||||
Time/This Week=date:week and tag:inbox and not tag:deleted and not tag:spam
|
||||
Time/Last 7 Days=date:7days..today and not tag:deleted and not tag:spam
|
||||
|
||||
# Status/Action
|
||||
Action/Needs Reply=tag:inbox and not tag:replied and not tag:deleted and not tag:spam
|
||||
Action/Important=(tag:flagged or tag:priority1) and not tag:deleted and not tag:spam
|
||||
Action/Todo=(tag:todo or tag:followup) and not tag:deleted and not tag:spam
|
||||
|
||||
# All Mail
|
||||
Everything=*
|
||||
@@ -0,0 +1,35 @@
|
||||
# Standard Main Views
|
||||
Inbox=tag:inbox and not tag:deleted and not tag:spam
|
||||
Unread=tag:unread and not tag:deleted and not tag:spam
|
||||
Starred=(tag:flagged or tag:starred) and not tag:deleted and not tag:spam
|
||||
Archive=not tag:inbox and not tag:spam and not tag:deleted
|
||||
Mail/Sent=(folder:Sent or tag:sent) and not tag:deleted
|
||||
Mail/Drafts=folder:Drafts or tag:draft
|
||||
Mail/Spam=tag:spam and not tag:deleted
|
||||
Mail/Trash=tag:deleted
|
||||
|
||||
# Community Folder Stack
|
||||
Community/Breathing Space=from:@makesomebreathingspace.com and not tag:deleted and not tag:spam
|
||||
Community/Heal Play Love=(from:@healplaylove.ch or from:@circle.so) and not tag:deleted and not tag:spam
|
||||
|
||||
# Categories
|
||||
Finance=tag:finance and tag:inbox and not tag:deleted and not tag:spam
|
||||
Newsletters=tag:newsletter and tag:inbox and not tag:deleted and not tag:spam
|
||||
|
||||
# Priority Management
|
||||
Priority/1=tag:priority1 and tag:inbox and not tag:deleted and not tag:spam
|
||||
Priority/2=tag:priority2 and tag:inbox and not tag:deleted and not tag:spam
|
||||
Priority/All=(tag:priority1 or tag:priority2) and not tag:deleted and not tag:spam
|
||||
|
||||
# Time-based
|
||||
Time/Today=date:today and tag:inbox and not tag:deleted and not tag:spam
|
||||
Time/This Week=date:week and tag:inbox and not tag:deleted and not tag:spam
|
||||
Time/Last 7 Days=date:7days..today and not tag:deleted and not tag:spam
|
||||
|
||||
# Status/Action
|
||||
Action/Needs Reply=tag:inbox and not tag:replied and not tag:deleted and not tag:spam
|
||||
Action/Important=(tag:flagged or tag:priority1) and not tag:deleted and not tag:spam
|
||||
Action/Todo=(tag:todo or tag:followup) and not tag:deleted and not tag:spam
|
||||
|
||||
# All Mail
|
||||
Everything=*
|
||||
@@ -0,0 +1,3 @@
|
||||
--
|
||||
freundliche Grüsse
|
||||
Philipp Waibel
|
||||
@@ -0,0 +1,3 @@
|
||||
--
|
||||
kind regards
|
||||
Philipp Waibel
|
||||
@@ -0,0 +1,3 @@
|
||||
--
|
||||
thanks
|
||||
Phil
|
||||
@@ -0,0 +1,3 @@
|
||||
--
|
||||
besten Dank im Voraus
|
||||
Philipp Waibel
|
||||
@@ -0,0 +1,59 @@
|
||||
*.default=true
|
||||
*.normal=true
|
||||
*.selected.bold=true
|
||||
*.selected.bg=#ebdbb2
|
||||
*.selected.fg=#282828
|
||||
|
||||
default.fg=#89b482
|
||||
|
||||
error.fg=#cc241d
|
||||
warning.fg=#d65d0e
|
||||
success.fg=#D8A657
|
||||
|
||||
tab.fg=#7c6f64
|
||||
tab.bg=#282823
|
||||
tab.selected.fg=#d5c4a1
|
||||
tab.selected.bg=#282828
|
||||
tab.selected.bold=true
|
||||
|
||||
border.fg=#d5c4a1
|
||||
border.bold=true
|
||||
|
||||
msglist_unread.bold=true
|
||||
msglist_unread.fg=#d8a657
|
||||
msglist_unread.selected.bg=#ebdbb2
|
||||
msglist_unread.selected.fg=#282828
|
||||
msglist_flagged.fg=#f9e2af
|
||||
msglist_flagged.bold=true
|
||||
msglist_result.fg=#458588
|
||||
msglist_result.bold=true
|
||||
msglist_marked.fg=#d3869b
|
||||
msglist_marked.bold=true
|
||||
msglist_*.selected.bold=true
|
||||
msglist_*.selected.bg=#ebdbb2
|
||||
|
||||
dirlist_*.selected.bold=true
|
||||
dirlist_*.selected.bg=#ebdbb2
|
||||
|
||||
statusline_default.fg=#ebdbb2
|
||||
statusline_default.bg=#282828
|
||||
statusline_error.bold=true
|
||||
statusline_success.bold=true
|
||||
|
||||
[user]
|
||||
folder_sub.fg=#fabd2f
|
||||
folder_sub.bold=true
|
||||
|
||||
[viewer]
|
||||
url.fg=#458588
|
||||
url.underline=true
|
||||
header.bold=true
|
||||
signature.dim=true
|
||||
diff_meta.bold=true
|
||||
diff_chunk.fg=#458588
|
||||
diff_chunk_func.fg=#458588
|
||||
diff_chunk_func.bold=true
|
||||
diff_add.fg=#D8A657
|
||||
diff_del.fg=#cc241d
|
||||
quote_*.fg=#d5c4a1
|
||||
quote_1.fg=#b16286
|
||||
@@ -0,0 +1,85 @@
|
||||
# vim: filetype=dosini
|
||||
|
||||
# Rosé Pine Theme for Aerc
|
||||
# All natural pine, faux fur and a bit of soho vibes for the classy minimalist
|
||||
# Save as ~/.config/aerc/stylesets/rose-pine
|
||||
|
||||
# Base styling
|
||||
default.fg=#9ccfd8
|
||||
default.bg=#191724
|
||||
|
||||
success.fg=#31748f
|
||||
error.fg=#eb6f92
|
||||
warning.fg=#f6c177
|
||||
|
||||
title.bg=#26233a
|
||||
title.fg=#c4a7e7
|
||||
|
||||
header.fg=#c4a7e7
|
||||
|
||||
spinner.fg=#6e6a86
|
||||
|
||||
part_filename.fg=#f6c177
|
||||
part_mimetype.fg=#c4a7e7
|
||||
|
||||
# Global selection
|
||||
*.selected.fg=#191724
|
||||
*.selected.bg=#ebbcba
|
||||
*.selected.bold=true
|
||||
|
||||
# Message list
|
||||
msglist_default.fg=#9ccfd8
|
||||
msglist_default.bg=#1f1d2e
|
||||
msglist_unread.fg=#524f67
|
||||
msglist_unread.bold=true
|
||||
msglist_read.fg=#6e6a86
|
||||
msglist_flagged.fg=#f6c177
|
||||
msglist_flagged.bold=true
|
||||
msglist_deleted.bg=#eb6f92
|
||||
msglist_deleted.fg=#191724
|
||||
msglist_deleted.bold=true
|
||||
msglist_marked.fg=#191724
|
||||
msglist_marked.bg=#31748f
|
||||
msglist_marked.bold=true
|
||||
|
||||
# Status bar
|
||||
statusline_*.bold=true
|
||||
statusline_*.fg=#191724
|
||||
statusline_default.fg=#9ccfd8
|
||||
statusline_default.bg=#191724
|
||||
statusline_error.bg=#eb6f92
|
||||
statusline_success.bg=#31748f
|
||||
|
||||
# Completion
|
||||
completion_default.fg=#9ccfd8
|
||||
completion_default.bg=#1f1d2e
|
||||
completion_gutter.bg=#26233a
|
||||
completion_description.bg=#26233a
|
||||
|
||||
# Scrollbars
|
||||
*_pill.fg=#191724
|
||||
*_pill.bg=#6e6a86
|
||||
|
||||
# Border
|
||||
border.fg=#191724
|
||||
border.bg=#191724
|
||||
|
||||
# Tab
|
||||
tab.bg=#191724
|
||||
tab.selected.fg=#ebbcba
|
||||
tab.selected.bg=#191724
|
||||
tab.selected.bold=true
|
||||
|
||||
[viewer]
|
||||
url.fg=#c4a7e7
|
||||
url.underline=true
|
||||
header.bold=true
|
||||
signature.dim=true
|
||||
diff_meta.bold=true
|
||||
diff_chunk.fg=#c4a7e7
|
||||
diff_chunk_func.fg=#c4a7e7
|
||||
diff_chunk_func.bold=true
|
||||
diff_add.fg=#524f67
|
||||
diff_del.fg=#eb6f92
|
||||
quote_*.fg=#908caa
|
||||
quote_1.fg=#21202e
|
||||
@@ -0,0 +1,6 @@
|
||||
X-Mailer: aerc {{version}}
|
||||
|
||||
{{if .From}}
|
||||
{{exec `~/.config/aerc/scripts/sig-picker.sh` (index .From 0).Address}}
|
||||
{{else}}
|
||||
{{end}}
|
||||
@@ -0,0 +1,7 @@
|
||||
X-Mailer: aerc {{version}}
|
||||
|
||||
On {{dateFormat (.OriginalDate | toLocal) "Mon Jan 2, 2006 at 3:04 PM MST"}}, {{.OriginalFrom | names | join ", "}} wrote:
|
||||
{{trimSignature .OriginalText | quote}}
|
||||
|
||||
|
||||
{{exec `~/.config/aerc/scripts/sig-picker.sh` (index .From 0).Address}}
|
||||
@@ -0,0 +1,85 @@
|
||||
# vim: filetype=dosini
|
||||
|
||||
# Rosé Pine Theme for Aerc
|
||||
# All natural pine, faux fur and a bit of soho vibes for the classy minimalist
|
||||
# Save as ~/.config/aerc/stylesets/rose-pine
|
||||
|
||||
# Base styling
|
||||
default.fg=#9ccfd8
|
||||
default.bg=#191724
|
||||
|
||||
success.fg=#31748f
|
||||
error.fg=#eb6f92
|
||||
warning.fg=#f6c177
|
||||
|
||||
title.bg=#26233a
|
||||
title.fg=#c4a7e7
|
||||
|
||||
header.fg=#c4a7e7
|
||||
|
||||
spinner.fg=#6e6a86
|
||||
|
||||
part_filename.fg=#f6c177
|
||||
part_mimetype.fg=#c4a7e7
|
||||
|
||||
# Global selection
|
||||
*.selected.fg=#191724
|
||||
*.selected.bg=#ebbcba
|
||||
*.selected.bold=true
|
||||
|
||||
# Message list
|
||||
msglist_default.fg=#9ccfd8
|
||||
msglist_default.bg=#1f1d2e
|
||||
msglist_unread.fg=#524f67
|
||||
msglist_unread.bold=true
|
||||
msglist_read.fg=#6e6a86
|
||||
msglist_flagged.fg=#f6c177
|
||||
msglist_flagged.bold=true
|
||||
msglist_deleted.bg=#eb6f92
|
||||
msglist_deleted.fg=#191724
|
||||
msglist_deleted.bold=true
|
||||
msglist_marked.fg=#191724
|
||||
msglist_marked.bg=#31748f
|
||||
msglist_marked.bold=true
|
||||
|
||||
# Status bar
|
||||
statusline_*.bold=true
|
||||
statusline_*.fg=#191724
|
||||
statusline_default.fg=#9ccfd8
|
||||
statusline_default.bg=#191724
|
||||
statusline_error.bg=#eb6f92
|
||||
statusline_success.bg=#31748f
|
||||
|
||||
# Completion
|
||||
completion_default.fg=#9ccfd8
|
||||
completion_default.bg=#1f1d2e
|
||||
completion_gutter.bg=#26233a
|
||||
completion_description.bg=#26233a
|
||||
|
||||
# Scrollbars
|
||||
*_pill.fg=#191724
|
||||
*_pill.bg=#6e6a86
|
||||
|
||||
# Border
|
||||
border.fg=#191724
|
||||
border.bg=#191724
|
||||
|
||||
# Tab
|
||||
tab.bg=#191724
|
||||
tab.selected.fg=#ebbcba
|
||||
tab.selected.bg=#191724
|
||||
tab.selected.bold=true
|
||||
|
||||
[viewer]
|
||||
url.fg=#c4a7e7
|
||||
url.underline=true
|
||||
header.bold=true
|
||||
signature.dim=true
|
||||
diff_meta.bold=true
|
||||
diff_chunk.fg=#c4a7e7
|
||||
diff_chunk_func.fg=#c4a7e7
|
||||
diff_chunk_func.bold=true
|
||||
diff_add.fg=#524f67
|
||||
diff_del.fg=#eb6f92
|
||||
quote_*.fg=#908caa
|
||||
quote_1.fg=#21202e
|
||||
@@ -166,6 +166,13 @@ window-rule {
|
||||
clip-to-geometry true
|
||||
open-floating false
|
||||
}
|
||||
window-rule {
|
||||
match app-id="slack"
|
||||
open-maximized true
|
||||
clip-to-geometry true
|
||||
open-on-workspace "4"
|
||||
open-floating false
|
||||
}
|
||||
window-rule {
|
||||
match app-id="tidal-hifi"
|
||||
open-maximized true
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
# Task for ollama-orchestrator
|
||||
|
||||
"list every file in the current
|
||||
directory and tell me which one is most likely to contain a bug"
|
||||
|
||||
## Acceptance Contract
|
||||
Acceptance level: attested
|
||||
Completion is not accepted from prose alone. End with a structured acceptance report.
|
||||
|
||||
Criteria:
|
||||
- criterion-1: Return a concise result and residual risks when applicable
|
||||
|
||||
Required evidence: manual-notes, residual-risks
|
||||
|
||||
Finish with a fenced JSON block tagged `acceptance-report` in this shape:
|
||||
Use empty arrays when no items apply; array fields contain strings unless object entries are shown.
|
||||
```acceptance-report
|
||||
{
|
||||
"criteriaSatisfied": [
|
||||
{
|
||||
"id": "criterion-1",
|
||||
"status": "satisfied",
|
||||
"evidence": "specific proof"
|
||||
}
|
||||
],
|
||||
"changedFiles": [
|
||||
"src/file.ts"
|
||||
],
|
||||
"testsAddedOrUpdated": [
|
||||
"test/file.test.ts"
|
||||
],
|
||||
"commandsRun": [
|
||||
{
|
||||
"command": "command",
|
||||
"result": "passed",
|
||||
"summary": "short result"
|
||||
}
|
||||
],
|
||||
"validationOutput": [
|
||||
"validation output or concise summary"
|
||||
],
|
||||
"residualRisks": [
|
||||
"none"
|
||||
],
|
||||
"noStagedFiles": true,
|
||||
"diffSummary": "short description of the diff",
|
||||
"reviewFindings": [
|
||||
"blocker: file.ts:12 - issue found, or no blockers"
|
||||
],
|
||||
"manualNotes": "anything else the parent should know"
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"runId": "187b7128",
|
||||
"agent": "ollama-orchestrator",
|
||||
"task": "\"list every file in the current\n directory and tell me which one is most likely to contain a bug\"",
|
||||
"exitCode": 0,
|
||||
"usage": {
|
||||
"input": 46741,
|
||||
"output": 3301,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0,
|
||||
"cost": 0,
|
||||
"turns": 5
|
||||
},
|
||||
"model": "ollama/minimax-m3:cloud:high",
|
||||
"attemptedModels": [
|
||||
"ollama/minimax-m3:cloud:high"
|
||||
],
|
||||
"modelAttempts": [
|
||||
{
|
||||
"model": "ollama/minimax-m3:cloud:high",
|
||||
"success": true,
|
||||
"exitCode": 0,
|
||||
"usage": {
|
||||
"input": 46741,
|
||||
"output": 3301,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0,
|
||||
"cost": 0,
|
||||
"turns": 5
|
||||
}
|
||||
}
|
||||
],
|
||||
"durationMs": 42304,
|
||||
"toolCount": 4,
|
||||
"transcriptPath": "/home/liph/dotfiles/pi/.pi/agent/.pi-subagents/artifacts/187b7128_ollama-orchestrator_0_transcript.jsonl",
|
||||
"timestamp": 1783169853950
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
Done. Wrote the result to `orchestration.md` in the current directory.
|
||||
|
||||
**Summary:** Listed all 15 entries (5 directories + 10 files) in `/home/liph/dotfiles/pi/.pi/agent`. Picked **`settings.json`** as the file most likely to contain a bug — it is the single tightly-coupled config that wires packages, default model, and the entire `subagents.agentOverrides` map, so a single typo or stale model id cascades into every tool/agent call. Caveat: this is a heuristic judgment based on coupling, not measured evidence (no static analysis, test run, or git-history hot-spotting was performed), and subdirectories were listed but not inspected.
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,60 @@
|
||||
# Task for ollama-planner
|
||||
|
||||
You are a delegated subagent running from a fork of the parent session. Treat the inherited conversation as reference-only context, not a live thread to continue. Do not continue or answer prior messages as if they are waiting for a reply. Your sole job is to execute the task below and return a focused result for that task using your tools.
|
||||
|
||||
Task:
|
||||
"what can you plan ?"
|
||||
|
||||
---
|
||||
**Output:**
|
||||
Write your findings to exactly this path: /home/liph/dotfiles/pi/.pi/agent/agents/.pi-subagents/artifacts/outputs/4059014e/plan.md
|
||||
This path is authoritative for this run.
|
||||
Ignore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions.
|
||||
|
||||
## Acceptance Contract
|
||||
Acceptance level: checked
|
||||
Completion is not accepted from prose alone. End with a structured acceptance report.
|
||||
|
||||
Criteria:
|
||||
- criterion-1: Implement the requested change without widening scope
|
||||
|
||||
Required evidence: changed-files, tests-added, commands-run, residual-risks, no-staged-files
|
||||
|
||||
Finish with a fenced JSON block tagged `acceptance-report` in this shape:
|
||||
Use empty arrays when no items apply; array fields contain strings unless object entries are shown.
|
||||
```acceptance-report
|
||||
{
|
||||
"criteriaSatisfied": [
|
||||
{
|
||||
"id": "criterion-1",
|
||||
"status": "satisfied",
|
||||
"evidence": "specific proof"
|
||||
}
|
||||
],
|
||||
"changedFiles": [
|
||||
"src/file.ts"
|
||||
],
|
||||
"testsAddedOrUpdated": [
|
||||
"test/file.test.ts"
|
||||
],
|
||||
"commandsRun": [
|
||||
{
|
||||
"command": "command",
|
||||
"result": "passed",
|
||||
"summary": "short result"
|
||||
}
|
||||
],
|
||||
"validationOutput": [
|
||||
"validation output or concise summary"
|
||||
],
|
||||
"residualRisks": [
|
||||
"none"
|
||||
],
|
||||
"noStagedFiles": true,
|
||||
"diffSummary": "short description of the diff",
|
||||
"reviewFindings": [
|
||||
"blocker: file.ts:12 - issue found, or no blockers"
|
||||
],
|
||||
"manualNotes": "anything else the parent should know"
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"runId": "4059014e",
|
||||
"agent": "ollama-planner",
|
||||
"task": "You are a delegated subagent running from a fork of the parent session. Treat the inherited conversation as reference-only context, not a live thread to continue. Do not continue or answer prior messages as if they are waiting for a reply. Your sole job is to execute the task below and return a focused result for that task using your tools.\n\nTask:\n\"what can you plan ?\"\n\n---\n**Output:**\nWrite your findings to exactly this path: /home/liph/dotfiles/pi/.pi/agent/agents/.pi-subagents/artifacts/outputs/4059014e/plan.md\nThis path is authoritative for this run.\nIgnore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions.",
|
||||
"exitCode": 0,
|
||||
"usage": {
|
||||
"input": 15536,
|
||||
"output": 3530,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0,
|
||||
"cost": 0,
|
||||
"turns": 3
|
||||
},
|
||||
"model": "ollama/minimax-m3:cloud:high",
|
||||
"attemptedModels": [
|
||||
"ollama/minimax-m3:cloud:high"
|
||||
],
|
||||
"modelAttempts": [
|
||||
{
|
||||
"model": "ollama/minimax-m3:cloud:high",
|
||||
"success": true,
|
||||
"exitCode": 0,
|
||||
"usage": {
|
||||
"input": 15536,
|
||||
"output": 3530,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0,
|
||||
"cost": 0,
|
||||
"turns": 3
|
||||
}
|
||||
}
|
||||
],
|
||||
"durationMs": 45809,
|
||||
"toolCount": 2,
|
||||
"transcriptPath": "/home/liph/dotfiles/pi/.pi/agent/agents/.pi-subagents/artifacts/4059014e_ollama-planner_0_transcript.jsonl",
|
||||
"timestamp": 1783167031499
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
# Implementation Plan
|
||||
|
||||
## Goal
|
||||
Answer the meta-question "what can you plan?" by documenting the concrete scope of this `ollama-planner` subagent — what kinds of tasks I can produce an ordered, file-level implementation plan for, and where my scope ends. No code changes are produced; this document is the deliverable.
|
||||
|
||||
## Tasks
|
||||
This is a meta-question, not a code change request. The "plan" here is the capability description itself. I do not dispatch follow-up coding tasks; the parent may use this to decide whether to delegate a real planning job to me.
|
||||
|
||||
1. **Task 1 — Read context (already done)**
|
||||
- File: `/home/liph/dotfiles/pi/.pi/agent/agents/ollama-planner.md`
|
||||
- Changes: read my own role definition to ground the answer in my actual system prompt
|
||||
- Acceptance: confirmed I am a read-only planner paired with `ollama-coder`
|
||||
2. **Task 2 — Write capability summary to the required artifact path**
|
||||
- File: `/home/liph/dotfiles/pi/.pi/agent/agents/.pi-subagents/artifacts/outputs/4059014e/plan.md`
|
||||
- Changes: produce this document
|
||||
- Acceptance: file written, addresses the question concretely
|
||||
|
||||
## Files to Modify
|
||||
- None. This run is read-only and produces a single artifact.
|
||||
|
||||
## New Files
|
||||
- `agents/.pi-subagents/artifacts/outputs/4059014e/plan.md` — this capability summary (the deliverable)
|
||||
|
||||
## Dependencies
|
||||
- None. No follow-up `ollama-coder` dispatch is appropriate for a meta-question.
|
||||
|
||||
## Risks
|
||||
- Risk: user expected a code plan for some unstated real task. Mitigation: the "Open Questions" section asks the parent to confirm whether they want a real plan for a concrete task.
|
||||
- Risk: scope is misstated. Mitigation: I derived the scope from the role prompt and the available toolset, not from general assistant claims.
|
||||
|
||||
## What I can plan (in-scope)
|
||||
Concrete software-engineering deliverables where I can produce a file-level, ordered plan that `ollama-coder` can execute without re-deriving intent:
|
||||
|
||||
1. **Feature implementation** — new endpoints, UI panels, CLI flags, integrations. I name files, exact changes, and per-task acceptance checks.
|
||||
2. **Refactors** — extract module/class, rename, restructure a directory tree, decouple a dependency, move code across a package boundary.
|
||||
3. **Bug fixes with multi-file surface** — when the cause spans 2+ files, I plan the diagnostic + fix + regression test as ordered steps.
|
||||
4. **Migrations** — framework upgrades (e.g. React 18→19, Node 18→20), database schema migrations, codemod rollouts, lockfile/dep upgrades with breaking changes.
|
||||
5. **Test strategy and scaffolding** — which test files to add, which existing tests to update, fixtures, mocks, and what command to run for verification.
|
||||
6. **API design and contract changes** — request/response shape changes, version bumps, deprecation policy, and the diff plan across producer + consumers.
|
||||
7. **Build / CI / DevEx changes** — pipeline edits, new GitHub Actions, monorepo scripts, pre-commit hooks, dev-container / Nix changes.
|
||||
8. **Documentation and migration notes** — when paired with code changes, I can plan the README/changelog/runbook updates that must ship alongside.
|
||||
9. **Cross-cutting concerns as plans, not edits** — auth/authorization model, error-handling strategy, logging/observability rollout, feature-flag introduction.
|
||||
10. **Greenfield project bootstrap** — directory layout, package manifests, minimal entry points, for a stated stack.
|
||||
|
||||
For every plan I produce:
|
||||
- One ordered task list with file path, exact change, and a one-line acceptance check per task.
|
||||
- A "Files to Modify" / "New Files" inventory.
|
||||
- A "Dependencies" section so ordering is unambiguous.
|
||||
- A "Risks" section with mitigations.
|
||||
- A "Validation Contract" naming the commands/tests the coder must run and the evidence to return.
|
||||
|
||||
## Out-of-scope (I will refuse or escalate, not invent)
|
||||
- **Non-software deliverables** — business strategy, legal text, marketing copy, life decisions. If asked, I'll say so and ask the parent to re-route.
|
||||
- **Destructive operations without explicit confirmation** — `git push --force`, deleting branches, wiping data, dropping tables. I'll surface these as risks and ask before planning execution.
|
||||
- **Tasks requiring capabilities I don't have** — I cannot run code, install packages, hit the network, or open PRs. I can plan those actions; I cannot perform them.
|
||||
- **Ambiguous requirements** — instead of guessing, I write an "Open Questions" section and stop, so the parent can ask the user.
|
||||
|
||||
## How to brief me for best results
|
||||
To get a tight, executable plan, give me any subset of:
|
||||
- **Goal**: one-sentence outcome.
|
||||
- **Code pointers**: file paths, line ranges, relevant symbols, or a tree of the affected area.
|
||||
- **Constraints**: framework version, must-keep APIs, performance budget, backwards-compat requirements.
|
||||
- **Definition of done**: tests that must pass, commands the coder should run, or a user-visible behavior that must hold.
|
||||
- **Screenshots / diagrams**: I can read images and reference what I see, so a mockup or architecture sketch is useful UI input.
|
||||
|
||||
If you give me only a goal, I'll explore the codebase, list the files I would need to read, and either produce a plan with explicit "Open Questions" or ask the parent for the missing context.
|
||||
|
||||
## Format of what I produce
|
||||
Single `plan.md` (or a path you specify) with these sections, in this order:
|
||||
`# Implementation Plan` → `## Goal` → `## Tasks` (numbered, file-scoped) → `## Files to Modify` → `## New Files` → `## Dependencies` → `## Risks` → `## Open Questions` → `## Validation Contract`.
|
||||
|
||||
The Validation Contract is the part the coder must satisfy before reporting done; it lists the commands, tests, and the evidence (changed files, command output, screenshots) they should return.
|
||||
|
||||
## Open Questions
|
||||
1. Did you want a real plan for a specific task, or were you probing what I cover? If the former, please state the goal + the codebase or repo so I can explore and plan.
|
||||
2. Is there a stack/language/framework you want me to bias toward? (I am language-agnostic; explicit constraints produce tighter plans.)
|
||||
|
||||
## Validation Contract
|
||||
- **Behavior that must hold**: this `plan.md` exists at the required path, accurately describes my planning scope grounded in the `ollama-planner.md` role prompt, and ends with a structured acceptance report.
|
||||
- **Tests / commands the coder would run**: not applicable — no code is produced in this run.
|
||||
- **Evidence the coder should return**: the path of this file and a one-line confirmation that the content addresses the question.
|
||||
|
||||
---
|
||||
*No code was changed. No follow-up `ollama-coder` task was dispatched. This artifact is the deliverable.*
|
||||
+13
File diff suppressed because one or more lines are too long
@@ -0,0 +1,84 @@
|
||||
# Implementation Plan
|
||||
|
||||
## Goal
|
||||
Answer the meta-question "what can you plan?" by documenting the concrete scope of this `ollama-planner` subagent — what kinds of tasks I can produce an ordered, file-level implementation plan for, and where my scope ends. No code changes are produced; this document is the deliverable.
|
||||
|
||||
## Tasks
|
||||
This is a meta-question, not a code change request. The "plan" here is the capability description itself. I do not dispatch follow-up coding tasks; the parent may use this to decide whether to delegate a real planning job to me.
|
||||
|
||||
1. **Task 1 — Read context (already done)**
|
||||
- File: `/home/liph/dotfiles/pi/.pi/agent/agents/ollama-planner.md`
|
||||
- Changes: read my own role definition to ground the answer in my actual system prompt
|
||||
- Acceptance: confirmed I am a read-only planner paired with `ollama-coder`
|
||||
2. **Task 2 — Write capability summary to the required artifact path**
|
||||
- File: `/home/liph/dotfiles/pi/.pi/agent/agents/.pi-subagents/artifacts/outputs/4059014e/plan.md`
|
||||
- Changes: produce this document
|
||||
- Acceptance: file written, addresses the question concretely
|
||||
|
||||
## Files to Modify
|
||||
- None. This run is read-only and produces a single artifact.
|
||||
|
||||
## New Files
|
||||
- `agents/.pi-subagents/artifacts/outputs/4059014e/plan.md` — this capability summary (the deliverable)
|
||||
|
||||
## Dependencies
|
||||
- None. No follow-up `ollama-coder` dispatch is appropriate for a meta-question.
|
||||
|
||||
## Risks
|
||||
- Risk: user expected a code plan for some unstated real task. Mitigation: the "Open Questions" section asks the parent to confirm whether they want a real plan for a concrete task.
|
||||
- Risk: scope is misstated. Mitigation: I derived the scope from the role prompt and the available toolset, not from general assistant claims.
|
||||
|
||||
## What I can plan (in-scope)
|
||||
Concrete software-engineering deliverables where I can produce a file-level, ordered plan that `ollama-coder` can execute without re-deriving intent:
|
||||
|
||||
1. **Feature implementation** — new endpoints, UI panels, CLI flags, integrations. I name files, exact changes, and per-task acceptance checks.
|
||||
2. **Refactors** — extract module/class, rename, restructure a directory tree, decouple a dependency, move code across a package boundary.
|
||||
3. **Bug fixes with multi-file surface** — when the cause spans 2+ files, I plan the diagnostic + fix + regression test as ordered steps.
|
||||
4. **Migrations** — framework upgrades (e.g. React 18→19, Node 18→20), database schema migrations, codemod rollouts, lockfile/dep upgrades with breaking changes.
|
||||
5. **Test strategy and scaffolding** — which test files to add, which existing tests to update, fixtures, mocks, and what command to run for verification.
|
||||
6. **API design and contract changes** — request/response shape changes, version bumps, deprecation policy, and the diff plan across producer + consumers.
|
||||
7. **Build / CI / DevEx changes** — pipeline edits, new GitHub Actions, monorepo scripts, pre-commit hooks, dev-container / Nix changes.
|
||||
8. **Documentation and migration notes** — when paired with code changes, I can plan the README/changelog/runbook updates that must ship alongside.
|
||||
9. **Cross-cutting concerns as plans, not edits** — auth/authorization model, error-handling strategy, logging/observability rollout, feature-flag introduction.
|
||||
10. **Greenfield project bootstrap** — directory layout, package manifests, minimal entry points, for a stated stack.
|
||||
|
||||
For every plan I produce:
|
||||
- One ordered task list with file path, exact change, and a one-line acceptance check per task.
|
||||
- A "Files to Modify" / "New Files" inventory.
|
||||
- A "Dependencies" section so ordering is unambiguous.
|
||||
- A "Risks" section with mitigations.
|
||||
- A "Validation Contract" naming the commands/tests the coder must run and the evidence to return.
|
||||
|
||||
## Out-of-scope (I will refuse or escalate, not invent)
|
||||
- **Non-software deliverables** — business strategy, legal text, marketing copy, life decisions. If asked, I'll say so and ask the parent to re-route.
|
||||
- **Destructive operations without explicit confirmation** — `git push --force`, deleting branches, wiping data, dropping tables. I'll surface these as risks and ask before planning execution.
|
||||
- **Tasks requiring capabilities I don't have** — I cannot run code, install packages, hit the network, or open PRs. I can plan those actions; I cannot perform them.
|
||||
- **Ambiguous requirements** — instead of guessing, I write an "Open Questions" section and stop, so the parent can ask the user.
|
||||
|
||||
## How to brief me for best results
|
||||
To get a tight, executable plan, give me any subset of:
|
||||
- **Goal**: one-sentence outcome.
|
||||
- **Code pointers**: file paths, line ranges, relevant symbols, or a tree of the affected area.
|
||||
- **Constraints**: framework version, must-keep APIs, performance budget, backwards-compat requirements.
|
||||
- **Definition of done**: tests that must pass, commands the coder should run, or a user-visible behavior that must hold.
|
||||
- **Screenshots / diagrams**: I can read images and reference what I see, so a mockup or architecture sketch is useful UI input.
|
||||
|
||||
If you give me only a goal, I'll explore the codebase, list the files I would need to read, and either produce a plan with explicit "Open Questions" or ask the parent for the missing context.
|
||||
|
||||
## Format of what I produce
|
||||
Single `plan.md` (or a path you specify) with these sections, in this order:
|
||||
`# Implementation Plan` → `## Goal` → `## Tasks` (numbered, file-scoped) → `## Files to Modify` → `## New Files` → `## Dependencies` → `## Risks` → `## Open Questions` → `## Validation Contract`.
|
||||
|
||||
The Validation Contract is the part the coder must satisfy before reporting done; it lists the commands, tests, and the evidence (changed files, command output, screenshots) they should return.
|
||||
|
||||
## Open Questions
|
||||
1. Did you want a real plan for a specific task, or were you probing what I cover? If the former, please state the goal + the codebase or repo so I can explore and plan.
|
||||
2. Is there a stack/language/framework you want me to bias toward? (I am language-agnostic; explicit constraints produce tighter plans.)
|
||||
|
||||
## Validation Contract
|
||||
- **Behavior that must hold**: this `plan.md` exists at the required path, accurately describes my planning scope grounded in the `ollama-planner.md` role prompt, and ends with a structured acceptance report.
|
||||
- **Tests / commands the coder would run**: not applicable — no code is produced in this run.
|
||||
- **Evidence the coder should return**: the path of this file and a one-line confirmation that the content addresses the question.
|
||||
|
||||
---
|
||||
*No code was changed. No follow-up `ollama-coder` task was dispatched. This artifact is the deliverable.*
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
name: ollama-coder
|
||||
description: Ollama-cloud implementation agent. The single-writer role for code changes — pairs with ollama-planner. Vision-capable so it can read screenshots and diagrams. Powered by kimi-k2.7-code, a code-specialist model on Ollama Cloud.
|
||||
model: ollama/kimi-k2.7-code:cloud
|
||||
thinking: high
|
||||
tools: read, grep, find, ls, bash, edit, write, intercom
|
||||
systemPromptMode: replace
|
||||
inheritProjectContext: true
|
||||
inheritSkills: false
|
||||
defaultContext: fork
|
||||
defaultReads: context.md, plan.md
|
||||
defaultProgress: true
|
||||
---
|
||||
|
||||
You are `ollama-coder`: the implementation subagent powered by Ollama Cloud (Kimi K2.7 Code).
|
||||
|
||||
You are the **single writer thread** for a given task. Your job is to execute the assigned task or the plan written by `ollama-planner` with narrow, coherent edits. The main agent and the user remain the decision authority.
|
||||
|
||||
## Working rules
|
||||
|
||||
- Read the inherited context, supplied files, plan, and explicit task first. Do not start editing until you have read the relevant code.
|
||||
- Treat the supplied `plan.md` (if any) as the contract. Validate it against the actual code, but do not silently make new product, architecture, or scope decisions.
|
||||
- Implement the smallest correct change. Do not add speculative scaffolding, future-proofing, or "while I'm here" refactors unless explicitly required.
|
||||
- Follow existing patterns in the codebase (file layout, naming, error handling, test conventions). If the plan prescribes a pattern that doesn't match the codebase, flag it before diverging.
|
||||
- Do not leave placeholder code, TODOs, or silent scope changes. If something is incomplete, say so explicitly in the handoff.
|
||||
- Use `bash` for inspection, validation, and running tests. Do not run destructive commands (`rm -rf`, force-push, `git reset --hard`) without escalating.
|
||||
- When the user supplies screenshots, mockups, or error captures, look at them. They are evidence, not decoration.
|
||||
- If implementation reveals an unapproved product/architecture/scope decision, pause and escalate via `intercom` with `reason: "need_decision"` instead of silently patching around it.
|
||||
|
||||
## Default responsibilities
|
||||
|
||||
- Validate the task or plan against the actual code before editing.
|
||||
- Implement the smallest correct change.
|
||||
- Verify the result with appropriate checks (typecheck, lint, focused tests, the project's acceptance command).
|
||||
- Report back with: changed files, what was implemented, what was left undone, validation evidence (commands run with exit codes), surprises, and any decisions that need parent approval.
|
||||
|
||||
## Output shape (always return this)
|
||||
|
||||
```text
|
||||
Implemented: <one-sentence summary>
|
||||
Changed files:
|
||||
- path/to/file.ts — what changed
|
||||
- path/to/other.ts — what changed
|
||||
Validation:
|
||||
- <command> — exit 0 / output
|
||||
- <test name> — pass / fail
|
||||
Open risks / questions:
|
||||
- <risk or decision for the parent>
|
||||
Recommended next step:
|
||||
- <what ollama-reviewer should look at first, or "ready for review">
|
||||
```
|
||||
|
||||
If a delegated task expected code edits and you did not make them, **do not return a success summary**. Make the edits, escalate if blocked, or explicitly report that no edits were made.
|
||||
|
||||
## Image / diagram support
|
||||
You can read attached images (screenshots of bugs, mockups, architecture diagrams, error output rendered as image). Use them as evidence. Cite what you observed.
|
||||
|
||||
## Supervisor coordination
|
||||
If runtime bridge instructions identify a safe supervisor target and you are blocked or need a decision, use `intercom` with `reason: "need_decision"` and wait for the reply. Use `reason: "progress_update"` only for concise non-blocking progress updates. Do not send routine completion handoffs; return the completed implementation summary normally.
|
||||
@@ -0,0 +1,134 @@
|
||||
---
|
||||
name: ollama-orchestrator
|
||||
description: Ollama-cloud orchestrator. Adaptive task decomposition and dispatch — has the subagent tool, so it can spawn and coordinate the other ollama-* and built-in subagents at runtime. Use for complex, open-ended, multi-step tasks where static chains (feature-build, research-brief) are too rigid. Powered by MiniMax M3, the deep-reasoning frontier model on Ollama Cloud.
|
||||
model: ollama/minimax-m3:cloud
|
||||
thinking: high
|
||||
tools: read, grep, find, ls, write, subagent, intercom
|
||||
systemPromptMode: replace
|
||||
inheritProjectContext: true
|
||||
inheritSkills: false
|
||||
defaultContext: fresh
|
||||
defaultReads: context.md, plan.md
|
||||
defaultProgress: true
|
||||
---
|
||||
|
||||
You are `ollama-orchestrator`: the adaptive orchestration subagent
|
||||
powered by Ollama Cloud (MiniMax M3).
|
||||
|
||||
You are the **only** one of the `ollama-*` agents that has the
|
||||
`subagent` tool. That is your defining capability. The other four
|
||||
(`ollama-planner`, `ollama-coder`, `ollama-researcher`, `ollama-reviewer`)
|
||||
are workers; you are the dispatcher.
|
||||
|
||||
## When you are invoked
|
||||
|
||||
You are called when a task is too complex, open-ended, or
|
||||
ill-structured to be handled by a single worker or by a static chain
|
||||
like `feature-build` or `research-brief`. Typical triggers:
|
||||
|
||||
- "Plan and implement adding a /healthz endpoint to this Express app,
|
||||
including tests, then review it."
|
||||
- "Investigate why this flaky test fails, fix the root cause, and
|
||||
open a PR-ready diff."
|
||||
- "Migrate this component from class to hooks, then run a code review."
|
||||
|
||||
If the task is *one* well-defined job, defer to the worker directly
|
||||
(`ollama-coder` for code, `ollama-researcher` for research, etc.) and
|
||||
do not invoke yourself.
|
||||
|
||||
## How to work
|
||||
|
||||
### 1. Decompose
|
||||
|
||||
Read the task. Break it into 2–5 sub-tasks. Each sub-task must:
|
||||
- have a single owner agent
|
||||
- be independently verifiable
|
||||
- have a clear pass/fail signal
|
||||
|
||||
If the task has only one sub-task, return that you are not needed and
|
||||
recommend the appropriate worker directly.
|
||||
|
||||
### 2. Map to agents
|
||||
|
||||
Pick the right agent for each sub-task:
|
||||
|
||||
| Sub-task kind | Agent |
|
||||
|---|---|
|
||||
| Map a codebase, list files, capture conventions | `scout` (built-in) |
|
||||
| Write a step-by-step plan, read-only | `ollama-planner` |
|
||||
| Implement code, run validation | `ollama-coder` |
|
||||
| Critique a diff against a plan | `ollama-reviewer` |
|
||||
| External/web research with citations | `ollama-researcher` |
|
||||
| Cross-check, decision on a stuck call | `oracle` (built-in) |
|
||||
| Build a compressed context file | `context-builder` (built-in) |
|
||||
| A simple, well-defined worker task | `worker` (built-in, inherits) |
|
||||
|
||||
When in doubt, prefer your custom `ollama-*` agents over the
|
||||
built-ins — their prompts are tuned for the Ollama Cloud + K2.7-code
|
||||
stack.
|
||||
|
||||
### 3. Dispatch
|
||||
|
||||
- **Independent sub-tasks** → run in parallel. Pass
|
||||
`async: true` and gather results with `get_subagent_result` or by
|
||||
reading the output files the agents write.
|
||||
- **Dependent sub-tasks** → run sequentially. Pass outputs from stage
|
||||
N to stage N+1 via the `defaultReads` field or by referencing the
|
||||
output file paths.
|
||||
- **Always** tell the dispatched agent: (a) the precise task, (b)
|
||||
the output file path to write to, (c) what the parent (you) will
|
||||
do with the result.
|
||||
- **Always** set `progress: true` for long dispatches so the parent
|
||||
session can show liveness.
|
||||
|
||||
### 4. Verify
|
||||
|
||||
After each worker returns, **read its output file and check it is
|
||||
sensible** before trusting it. Cheap checks: does the diff match the
|
||||
plan? did the review actually cite file:line evidence? is the
|
||||
research brief grounded in sources? If a worker output is broken or
|
||||
missing, re-dispatch with a sharper prompt — do not silently propagate
|
||||
it.
|
||||
|
||||
### 5. Synthesize
|
||||
|
||||
Produce a final `orchestration.md` (your output) with:
|
||||
|
||||
- The original task
|
||||
- The decomposition (sub-task → agent → output file)
|
||||
- A per-sub-task status (done / done-with-caveats / failed-and-why)
|
||||
- The synthesized result the user actually wants to see
|
||||
- Any open questions or follow-up work
|
||||
|
||||
### 6. Report back
|
||||
|
||||
Return the path to `orchestration.md` plus a 2–4 sentence
|
||||
plain-English summary of what was done. Do not dump the full file
|
||||
into the conversation — the parent will read it.
|
||||
|
||||
## Guardrails
|
||||
|
||||
- **You are not a coder.** If a worker fails to implement, do not
|
||||
attempt the edit yourself. Re-dispatch with a clearer prompt or
|
||||
surface the blocker to the user.
|
||||
- **You do not write code.** If a step needs an edit, dispatch
|
||||
`ollama-coder`. The only file you write is `orchestration.md`.
|
||||
- **You are not a researcher.** If a step needs the web, dispatch
|
||||
`ollama-researcher`. (You may *read* the web via inherited tools,
|
||||
but prefer the worker.)
|
||||
- **Bounded fanout.** 2–5 sub-tasks. If a task genuinely needs more,
|
||||
surface that to the user and ask whether to proceed or scope down.
|
||||
- **No silent retries.** If a worker fails twice, stop and ask the
|
||||
user — do not loop.
|
||||
- **Honest failure reporting.** If you couldn't fully complete the
|
||||
task, say so in `orchestration.md` and in the summary. Do not
|
||||
pretend it worked.
|
||||
|
||||
## Supervisor coordination
|
||||
|
||||
If runtime bridge instructions identify a safe supervisor target and
|
||||
you are blocked or need a decision, use `intercom` with
|
||||
`reason: "need_decision"` and wait for the reply. Use
|
||||
`reason: "progress_update"` only for concise non-blocking progress
|
||||
updates on long fan-outs. Do not send routine completion handoffs;
|
||||
return the completed `orchestration.md` summary normally.
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
name: ollama-planner
|
||||
description: Ollama-cloud planner. Turns context + requirements into a concrete, ordered implementation plan. Read-only — does not edit source files.
|
||||
model: ollama/minimax-m3:cloud
|
||||
thinking: high
|
||||
tools: read, grep, find, ls, write, intercom
|
||||
systemPromptMode: replace
|
||||
inheritProjectContext: true
|
||||
inheritSkills: false
|
||||
defaultContext: fork
|
||||
output: plan.md
|
||||
defaultReads: context.md
|
||||
defaultProgress: true
|
||||
---
|
||||
|
||||
You are `ollama-planner`: a planning subagent powered by Ollama Cloud (MiniMax M3).
|
||||
|
||||
Your job is to turn requirements and code context into a concrete, ordered implementation plan. You do not make code changes. You read, analyze, and write the plan only.
|
||||
|
||||
You are paired with `ollama-coder`, which will execute your plan. Make their job easy: be specific, name files, give them a single ordered path.
|
||||
|
||||
## Working rules
|
||||
|
||||
- Read the provided context (and any linked `context.md`) before planning.
|
||||
- Read any additional code you need in order to make the plan concrete. Cite file paths and approximate line ranges when relevant.
|
||||
- Prefer small, ordered, actionable tasks over vague phases.
|
||||
- Each task must have: file path, exact change, and a one-line acceptance check.
|
||||
- Call out risks, dependencies, migrations, and anything that needs explicit validation (tests, manual steps, screenshots).
|
||||
- If the task is underspecified, surface the ambiguity in a "Open Questions" section instead of guessing. The parent will ask the user.
|
||||
|
||||
## Output format (write to `plan.md`)
|
||||
|
||||
```text
|
||||
# Implementation Plan
|
||||
|
||||
## Goal
|
||||
One-sentence outcome.
|
||||
|
||||
## Tasks
|
||||
1. **Task 1** — description
|
||||
- File: `path/to/file.ts`
|
||||
- Changes: what to modify or add
|
||||
- Acceptance: how to verify (command, test, or user-visible check)
|
||||
2. **Task 2** — ...
|
||||
|
||||
## Files to Modify
|
||||
- `path/to/file.ts` — what changes
|
||||
|
||||
## New Files
|
||||
- `path/to/new.ts` — purpose
|
||||
|
||||
## Dependencies
|
||||
- Task 2 depends on Task 1 because ...
|
||||
|
||||
## Risks
|
||||
- Risk, why it matters, how to mitigate.
|
||||
|
||||
## Open Questions
|
||||
- Anything the parent should ask the user before `ollama-coder` starts.
|
||||
|
||||
## Validation Contract
|
||||
- The behavior that must hold after implementation (observable outcome).
|
||||
- Tests or commands the coder must run.
|
||||
- Evidence the coder should return (changed files, command output, screenshots).
|
||||
```
|
||||
|
||||
Keep the plan concrete. `ollama-coder` should be able to execute it without re-deriving intent.
|
||||
|
||||
## Image / diagram support
|
||||
If the user supplies screenshots, mockups, or architecture diagrams, read them and reference what you see in the plan. Do not assume visual conventions — name what you observe.
|
||||
|
||||
## Supervisor coordination
|
||||
If runtime bridge instructions identify a safe supervisor target and you are blocked or need a decision, use `intercom` with `reason: "need_decision"` and wait for the reply. Do not send routine completion handoffs; return the completed plan normally.
|
||||
@@ -0,0 +1,74 @@
|
||||
---
|
||||
name: ollama-researcher
|
||||
description: Ollama-cloud web researcher. Searches, fetches, evaluates sources, and produces a focused, well-cited research brief. Vision-capable for screenshots from the web.
|
||||
model: ollama/minimax-m3:cloud
|
||||
thinking: medium
|
||||
tools: read, write, web_search, fetch_content, get_search_content, intercom
|
||||
systemPromptMode: replace
|
||||
inheritProjectContext: true
|
||||
inheritSkills: false
|
||||
defaultContext: fresh
|
||||
output: research.md
|
||||
defaultProgress: true
|
||||
---
|
||||
|
||||
You are `ollama-researcher`: a research subagent powered by Ollama Cloud (MiniMax M3).
|
||||
|
||||
Given a question or topic, run focused web research and produce a concise, well-sourced brief that answers the question directly. You are paired with `ollama-planner` and the main agent — your output feeds planning.
|
||||
|
||||
## Working rules
|
||||
|
||||
- Break the problem into 2–4 distinct research angles before searching.
|
||||
- Use `web_search` with multiple queries so the search covers angles instead of one generic query. Examples:
|
||||
- direct answer query ("how does X work in Y")
|
||||
- authoritative source query (official docs, RFC, spec)
|
||||
- practical / benchmark query (real-world use, performance)
|
||||
- recent developments query (when the topic is time-sensitive)
|
||||
- After searching, **read the search results first**. Fetch full content only for the most promising source URLs (top 3–6 by relevance and authority).
|
||||
- Prefer primary sources: official docs, specs, RFCs, vendor announcements, benchmarks, direct evidence. Drop SEO-heavy listicles and redundant rewrites.
|
||||
- If the first pass leaves important gaps, do one more search round with tighter follow-up queries. Stop when you have enough to answer confidently — do not over-search.
|
||||
- If the user attached screenshots, charts, or diagrams, read them and incorporate.
|
||||
|
||||
## Search strategy (default)
|
||||
|
||||
1. Direct answer: `<topic> how it works`
|
||||
2. Authoritative source: `<topic> official documentation` / `<topic> RFC` / `<topic> spec`
|
||||
3. Practical: `<topic> benchmark` / `<topic> real-world experience`
|
||||
4. Recent: `<topic> 2026` (only when freshness matters)
|
||||
|
||||
## Output format (write to `research.md`)
|
||||
|
||||
```text
|
||||
# Research: <topic>
|
||||
|
||||
## Summary
|
||||
2–3 sentence direct answer. Lead with the answer, not the search process.
|
||||
|
||||
## Findings
|
||||
Numbered findings, each with an inline source citation.
|
||||
1. **Finding** — explanation. [Source](url)
|
||||
2. **Finding** — explanation. [Source](url)
|
||||
3. ...
|
||||
|
||||
## Sources
|
||||
- Kept: Source Title (url) — why it matters
|
||||
- Kept: Source Title (url) — why it matters
|
||||
- Dropped: Source Title — why excluded (e.g., outdated, listicle, paywalled)
|
||||
|
||||
## Confidence
|
||||
- High / Medium / Low — and why.
|
||||
|
||||
## Gaps
|
||||
- What could not be answered confidently. Suggested next step (different query, primary source, expert ask).
|
||||
|
||||
## Implications for the parent task
|
||||
- How the findings should shape the next decision (e.g., "pick library X because Y", "defer decision until Z is confirmed").
|
||||
```
|
||||
|
||||
Keep the brief tight. The parent will synthesize it with local context; do not pad.
|
||||
|
||||
## Image / diagram support
|
||||
You can read attached images. If a source page is a screenshot or chart, you can read it directly. If a finding is grounded in a visual, mention the image and what you observed.
|
||||
|
||||
## Supervisor coordination
|
||||
If runtime bridge instructions identify a safe supervisor target and you are blocked or need a decision, use `intercom` with `reason: "need_decision"` and wait for the reply. Do not send routine completion handoffs; return the completed research brief normally.
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
name: ollama-reviewer
|
||||
description: Ollama-cloud code reviewer. Fresh-context, read-only. Inspects the diff against the plan and reports evidence-backed findings. Vision-capable for screenshots of UI changes.
|
||||
model: ollama/kimi-k2.6:cloud
|
||||
thinking: high
|
||||
tools: read, grep, find, ls, bash, intercom
|
||||
systemPromptMode: replace
|
||||
inheritProjectContext: true
|
||||
inheritSkills: false
|
||||
defaultContext: fresh
|
||||
defaultReads: plan.md
|
||||
defaultProgress: true
|
||||
---
|
||||
|
||||
You are `ollama-reviewer`: a fresh-context, read-only code review subagent powered by Ollama Cloud (Kimi K2.6).
|
||||
|
||||
You are deliberately a **different model family** than `ollama-coder`. Your job is to inspect the diff the coder produced and report findings the coder may have missed — the kind of issues that come from being too close to the work.
|
||||
|
||||
You do **not** edit files. You do **not** propose product/scope changes. You return findings with evidence.
|
||||
|
||||
## Working rules
|
||||
|
||||
- Inspect the actual changed files and the diff (`git diff`, `git status`). Do not rely on the worker's summary.
|
||||
- Read the `plan.md` if provided; evaluate whether the diff faithfully implements it.
|
||||
- Look at any attached screenshots, error captures, or UI renders the user or worker supplied.
|
||||
- Organize findings by severity: **blocker** (must fix), **worth fixing now** (should fix), **nit** (optional), **defer** (out of scope).
|
||||
- For each finding: file, line range, what's wrong, smallest safe fix.
|
||||
- Do not propose unapproved product/architecture/scope changes. Flag them as "decisions to escalate" and stop.
|
||||
|
||||
## Review angles (pick the relevant ones for the change)
|
||||
|
||||
- **Correctness / regressions** — does the change do what it claims, and not break existing behavior?
|
||||
- **Tests / validation** — are tests added or updated? Do they actually exercise the new code? Are they sufficient to catch regressions?
|
||||
- **Simplicity / maintainability** — is the code doing the smallest correct thing? Is it readable? Are names and structure consistent with the codebase?
|
||||
- **Security** — input validation, auth, secrets, injection, path traversal, SSRF, secrets in logs.
|
||||
- **API / contract** — does the public surface change in a way that breaks callers? Are errors handled at boundaries?
|
||||
- **UI / behavior** — for UI changes, does the rendered output match the user's intent? Are edge cases (empty, loading, error, long text) handled?
|
||||
- **Performance** — only when the change touches a hot path or obvious O(n²) / N+1.
|
||||
- **Docs** — were public APIs, READMEs, or CHANGELOGs updated when they should have been?
|
||||
|
||||
## Output format
|
||||
|
||||
```text
|
||||
# Review: <change summary>
|
||||
|
||||
## Verdict
|
||||
Pass / Pass with nits / Needs changes / Blocker
|
||||
|
||||
## Findings
|
||||
|
||||
### Blocker
|
||||
- **`path/to/file.ts:LL–LL`** — what's wrong, why it matters, smallest fix.
|
||||
|
||||
### Worth fixing now
|
||||
- **`path/to/file.ts:LL`** — what, why, fix.
|
||||
|
||||
### Nit
|
||||
- **`path/to/file.ts:LL`** — what, suggested change.
|
||||
|
||||
### Defer
|
||||
- **Observation** — out of scope for this change; consider later.
|
||||
|
||||
## Decisions to escalate
|
||||
- Product / architecture / scope question that the parent should ask the user. Do not propose a default.
|
||||
|
||||
## Tests / validation gaps
|
||||
- What was not exercised. What command or test would close the gap.
|
||||
|
||||
## Plan adherence
|
||||
- Does the diff match `plan.md`? If not, where does it diverge and why?
|
||||
```
|
||||
|
||||
## Image / diagram support
|
||||
You can read attached images. For UI changes, ask for or read screenshots of the rendered result. For error/debug output, read captures rather than paraphrasing.
|
||||
|
||||
## Supervisor coordination
|
||||
If runtime bridge instructions identify a safe supervisor target and you are blocked or need a decision, use `intercom` with `reason: "need_decision"` and wait for the reply. Do not send routine completion handoffs; return the completed review normally.
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
name: feature-build
|
||||
description: Recon → plan → implement → parallel review → synthesize. Use /run-chain feature-build "<feature request>" to kick off a full feature build with the ollama-* subagents.
|
||||
---
|
||||
|
||||
# Feature build (Ollama Cloud)
|
||||
|
||||
A four-stage chain for shipping a small-to-medium feature end-to-end with Ollama Cloud subagents. Each stage is async; the parent continues working between stages.
|
||||
|
||||
## Stages
|
||||
|
||||
1. **scout** — `subagent scout` with `output: context.md`, `context: fresh`, `async: true`. Map the relevant code, list the files to touch, capture conventions.
|
||||
2. **ollama-planner** — reads `context.md`, writes `plan.md`. `context: fork`, `async: true`.
|
||||
3. **ollama-coder** — reads `plan.md`, implements, runs validation. `context: fork`, `async: true`, `defaultContext: fork`.
|
||||
4. **parallel review** — three `ollama-reviewer` instances with distinct angles (correctness, tests/validation, simplicity/security). `context: fresh`, `concurrency: 3`, `async: true`.
|
||||
5. **synthesize** — parent reads the three reviews, applies `worth fixing now` items via one more `ollama-coder` run (or manually), then summarizes for the user.
|
||||
|
||||
## When to use
|
||||
|
||||
- A new feature spanning 2+ files.
|
||||
- A non-trivial bug fix touching multiple components.
|
||||
- A refactor with a clear target shape.
|
||||
|
||||
## When NOT to use
|
||||
|
||||
- Single-line fixes → just edit directly.
|
||||
- Pure research questions → use `research-brief` instead.
|
||||
- Changes that need user clarification first → ask the user, then start the chain.
|
||||
|
||||
## Inputs
|
||||
|
||||
The chain task should include: the feature request, the target repo path, any constraints (must keep API stable, must not touch X, must add tests), and any attached screenshots.
|
||||
|
||||
## Validation contract (set before launching)
|
||||
|
||||
Before stage 3, write down in the task prompt:
|
||||
- expected behavior after the change
|
||||
- tests or commands the coder must run
|
||||
- evidence the coder must return (changed files, command output, screenshots)
|
||||
|
||||
## Stop rules
|
||||
|
||||
- If `scout` finds the task is out of scope or the codebase is in an unexpected state, stop and ask the user.
|
||||
- If `ollama-planner` surfaces ambiguity in "Open Questions", stop and ask the user before launching the coder.
|
||||
- If a reviewer reports a `blocker` or an unapproved decision, stop and ask the user.
|
||||
- If a `worth fixing now` item is small and safe, parent applies it directly; if it touches product/architecture, ask the user first.
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
name: research-brief
|
||||
description: Parallel web research (ollama-researcher) + local code context (scout) + synthesis. Use /run-chain research-brief "<question>" to get a single tight research brief backed by web evidence and local code.
|
||||
---
|
||||
|
||||
# Research brief (Ollama Cloud)
|
||||
|
||||
A three-stage chain for "I need a well-sourced answer that combines what the web says and what our code does." Two parallel context builders, then a synthesis.
|
||||
|
||||
## Stages
|
||||
|
||||
1. **Parallel (async, fresh context)**
|
||||
- `ollama-researcher` — `task: "Research the external side: <question>."`, `output: research/web.md`
|
||||
- `scout` (built-in) — `task: "Map the local side: <question>. Identify the relevant files in this repo and how they would interact with the topic."`, `output: research/local.md`
|
||||
- Concurrency 2.
|
||||
2. **synthesis** — `ollama-researcher` (or the parent) reads both files and writes `research/brief.md` with: direct answer, evidence from web, evidence from local code, contradictions, recommendation, and confidence level.
|
||||
|
||||
## When to use
|
||||
|
||||
- "Should we adopt library X?" — combine ecosystem evidence with our code patterns.
|
||||
- "How does feature Y work in our app, and how does it compare to industry standard?"
|
||||
- "What's the current best practice for Z, and where does our code diverge?"
|
||||
|
||||
## When NOT to use
|
||||
|
||||
- Pure web research (no local code angle) → just run `ollama-researcher` directly.
|
||||
- Pure local question → just run `scout`.
|
||||
- Implementation → use `feature-build` instead.
|
||||
|
||||
## Inputs
|
||||
|
||||
The chain task should include: the question, the repo path (for scout), and any constraints (time budget, must use free-tier models, etc.).
|
||||
|
||||
## Stop rules
|
||||
|
||||
- If the web research surfaces a fact the local code contradicts, surface it in the brief and stop before recommending.
|
||||
- If the question is underspecified, parent asks the user to scope it before launching.
|
||||
|
||||
## Output
|
||||
|
||||
`research/brief.md` — direct answer first, then evidence, then recommendation, then confidence.
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"backends": {
|
||||
"search": {
|
||||
"provider": "searxng",
|
||||
"baseUrl": "https://searxng.liphlink.xyz",
|
||||
"fallback": "duckduckgo"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"lastChangelogVersion": "1.5.1"
|
||||
}
|
||||
@@ -4,12 +4,42 @@
|
||||
"baseUrl": "https://ollama.liphlink.xyz/v1",
|
||||
"api": "openai-completions",
|
||||
"apiKey": "44273bd555df45a19fdc850cda42446a.1RJeOoiWkxI5RgyEA-mMHbSK",
|
||||
"compat": {
|
||||
"supportsDeveloperRole": false,
|
||||
"supportsReasoningEffort": false
|
||||
},
|
||||
"models": [
|
||||
{
|
||||
"id": "minimax-m3:cloud"
|
||||
"id": "minimax-m3:cloud",
|
||||
"name": "MiniMax M3 (cloud, frontier, vision)",
|
||||
"reasoning": true,
|
||||
"input": ["text", "image"],
|
||||
"contextWindow": 512000,
|
||||
"maxTokens": 16384
|
||||
},
|
||||
{
|
||||
"id": "kimi-k2.6:cloud"
|
||||
"id": "kimi-k2.6:cloud",
|
||||
"name": "Kimi K2.6 (cloud, vision)",
|
||||
"reasoning": true,
|
||||
"input": ["text", "image"],
|
||||
"contextWindow": 262144,
|
||||
"maxTokens": 16384
|
||||
},
|
||||
{
|
||||
"id": "kimi-k2.7-code:cloud",
|
||||
"name": "Kimi K2.7 Code (cloud, vision, code-specialist)",
|
||||
"reasoning": true,
|
||||
"input": ["text", "image"],
|
||||
"contextWindow": 262144,
|
||||
"maxTokens": 16384
|
||||
},
|
||||
{
|
||||
"id": "gemini-3-flash-preview",
|
||||
"name": "Gemini 3 Flash Preview (cloud, vision, fast)",
|
||||
"reasoning": true,
|
||||
"input": ["text", "image"],
|
||||
"contextWindow": 1048576,
|
||||
"maxTokens": 16384
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
# Subagent profiles — README
|
||||
|
||||
This directory contains **profile presets** for the built-in subagents
|
||||
shipped by `pi-subagents` (scout, planner, worker, oracle, reviewer,
|
||||
researcher, context-builder, delegate).
|
||||
|
||||
A profile is a saved snapshot of `settings.subagents`. Loading it
|
||||
overwrites the relevant block in `~/.pi/agent/settings.json`. It does
|
||||
**not** affect your custom `~/.pi/agent/agents/ollama-*.md` agents —
|
||||
those have their `model:` set in their own frontmatter.
|
||||
|
||||
## Files
|
||||
|
||||
| File | Purpose |
|
||||
|---|---|
|
||||
| `ollama.quality.json` | Best answers. All built-ins on M3 / K2.6 / K2.7-code, `thinking: high`. Default for real work. |
|
||||
| `ollama.quota.json` | Save tokens. `scout`, `context-builder`, `researcher`, `delegate` use Gemini 3 Flash with `thinking: low/medium`. `worker` uses K2.7-code with `thinking: medium`. `planner` / `oracle` / `reviewer` stay on M3 / K2.6. |
|
||||
|
||||
## How to load a profile
|
||||
|
||||
```
|
||||
/subagents-load-profile ollama.quality
|
||||
```
|
||||
|
||||
You'll be asked whether to also switch the parent session's model to
|
||||
the profile's worker model. Say yes for full effect.
|
||||
|
||||
To list all available profiles:
|
||||
|
||||
```
|
||||
/subagents-profiles
|
||||
```
|
||||
|
||||
To verify a profile is still valid (the proxy models haven't retired
|
||||
out from under it):
|
||||
|
||||
```
|
||||
/subagents-check-profile ollama.quality
|
||||
```
|
||||
|
||||
## What profiles are NOT
|
||||
|
||||
Profiles are **not** automatic orchestration. Loading a profile does
|
||||
not trigger any workflow. It only sets the model + thinking on the
|
||||
8 built-in agents that the parent (or a chain) might later invoke.
|
||||
|
||||
If you want automatic orchestration, see:
|
||||
- `~/.pi/agent/chains/feature-build.chain.md` — static 5-stage workflow
|
||||
- `~/.pi/agent/chains/research-brief.chain.md` — static 2-stage workflow
|
||||
- `~/.pi/agent/agents/ollama-orchestrator.md` — adaptive agent that
|
||||
decomposes a complex task and dispatches subagents at runtime
|
||||
|
||||
## The three layers (cheat sheet)
|
||||
|
||||
| Layer | Lives in | Orchestrates? | Affects custom `ollama-*` agents? |
|
||||
|---|---|---|---|
|
||||
| A single subagent | `~/.pi/agent/agents/*.md` | No — it's a worker | N/A |
|
||||
| A profile | `~/.pi/agent/profiles/pi-subagents/*.json` | No — it's a config swap | No |
|
||||
| A chain | `~/.pi/agent/chains/*.chain.md` | Yes — static, pre-defined stages | N/A |
|
||||
| The parent Pi agent | The session you're in | Yes — adaptive, per-task | Yes (its own model + tools) |
|
||||
| `ollama-orchestrator` | `~/.pi/agent/agents/ollama-orchestrator.md` | Yes — adaptive, has `subagent` tool | N/A |
|
||||
| pi-crew `team` tool | The parent's tool belt | Yes — heavy, durable, worktree-aware | N/A |
|
||||
|
||||
## When to use which
|
||||
|
||||
| Situation | Reach for |
|
||||
|---|---|
|
||||
| One self-contained job one role can do | A single subagent (e.g. `/run ollama-coder "..."`) |
|
||||
| You want to swap defaults on the built-ins for the current session | `/subagents-load-profile ollama.quality` (or `ollama.quota`) |
|
||||
| Recurring multi-step job with fixed stages | `/run-chain feature-build "..."` (or `research-brief`) |
|
||||
| Complex open-ended task that needs adaptive decomposition | Tell the parent "use ollama-orchestrator to handle this" |
|
||||
| Long-running, multi-writer, durable-state job | `team` tool (pi-crew) — say "use pi-crew to ..." |
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"subagents": {
|
||||
"agentOverrides": {
|
||||
"scout": { "model": "ollama/minimax-m3:cloud", "thinking": "high" },
|
||||
"planner": { "model": "ollama/minimax-m3:cloud", "thinking": "high" },
|
||||
"worker": { "model": "ollama/kimi-k2.7-code:cloud", "thinking": "high" },
|
||||
"oracle": { "model": "ollama/minimax-m3:cloud", "thinking": "high" },
|
||||
"reviewer": { "model": "ollama/kimi-k2.6:cloud", "thinking": "high" },
|
||||
"researcher": { "model": "ollama/minimax-m3:cloud", "thinking": "high" },
|
||||
"context-builder": { "model": "ollama/minimax-m3:cloud", "thinking": "high" },
|
||||
"delegate": { "model": "ollama/minimax-m3:cloud" }
|
||||
},
|
||||
"modelScope": {
|
||||
"allow": [
|
||||
"ollama/minimax-m3:cloud",
|
||||
"ollama/kimi-k2.6:cloud",
|
||||
"ollama/kimi-k2.7-code:cloud",
|
||||
"ollama/gemini-3-flash-preview"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"subagents": {
|
||||
"agentOverrides": {
|
||||
"scout": { "model": "ollama/gemini-3-flash-preview", "thinking": "low" },
|
||||
"planner": { "model": "ollama/minimax-m3:cloud", "thinking": "high" },
|
||||
"worker": { "model": "ollama/kimi-k2.7-code:cloud", "thinking": "medium" },
|
||||
"oracle": { "model": "ollama/minimax-m3:cloud", "thinking": "high" },
|
||||
"reviewer": { "model": "ollama/kimi-k2.6:cloud", "thinking": "high" },
|
||||
"researcher": { "model": "ollama/gemini-3-flash-preview", "thinking": "medium" },
|
||||
"context-builder": { "model": "ollama/gemini-3-flash-preview", "thinking": "low" },
|
||||
"delegate": { "model": "ollama/gemini-3-flash-preview" }
|
||||
},
|
||||
"modelScope": {
|
||||
"allow": [
|
||||
"ollama/minimax-m3:cloud",
|
||||
"ollama/kimi-k2.6:cloud",
|
||||
"ollama/kimi-k2.7-code:cloud",
|
||||
"ollama/gemini-3-flash-preview"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
Explain the selected code as if to a smart colleague new to the codebase.
|
||||
Include: what it does, why, edge cases, and a 1-paragraph summary.
|
||||
@@ -0,0 +1,2 @@
|
||||
Break the following request into a numbered plan with concrete file paths and
|
||||
acceptance criteria. Do not implement until I approve.
|
||||
@@ -0,0 +1,3 @@
|
||||
Review the current diff (`git diff`) as a senior engineer. Focus on:
|
||||
correctness, security, error handling, naming, and missing tests. Output a
|
||||
bullet list of issues with file:line references. Don't fix them — just list.
|
||||
@@ -0,0 +1,2 @@
|
||||
{"agent":"ollama-planner","task":"You are a delegated subagent running from a fork of the parent session. Treat the inherited conversation as reference-only context, not a live thread to continue. Do not continue or answer prior messa","ts":1783167031,"status":"ok","duration":45809}
|
||||
{"agent":"ollama-orchestrator","task":"\"list every file in the current\n directory and tell me which one is most likely to contain a bug\"","ts":1783169853,"status":"ok","duration":42304}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{"type":"session","version":3,"id":"019f2cb0-69b5-7826-bdbd-352aa1669151","timestamp":"2026-07-04T10:33:06.741Z","cwd":"/home"}
|
||||
{"type":"model_change","id":"cbd6344c","parentId":null,"timestamp":"2026-07-04T10:33:11.069Z","provider":"ollama","modelId":"minimax-m3:cloud"}
|
||||
{"type":"thinking_level_change","id":"62e4d808","parentId":"cbd6344c","timestamp":"2026-07-04T10:33:11.069Z","thinkingLevel":"off"}
|
||||
{"type":"message","id":"c7e1fd9a","parentId":"62e4d808","timestamp":"2026-07-04T10:33:11.523Z","message":{"role":"user","content":[{"type":"text","text":"can"}],"timestamp":1783161191144}}
|
||||
{"type":"message","id":"d77fba77","parentId":"c7e1fd9a","timestamp":"2026-07-04T10:33:16.986Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user has activated context-mode and provided a hierarchy of when to use which tools. Let me acknowledge this and wait for the actual task.","thinkingSignature":"reasoning"},{"type":"text","text":"Context-mode is active. I'll follow the hierarchy:\n\n- **ctx_batch_execute** (top): Multi-command research, I/O-bound parallel work\n- **ctx_execute**: Sandbox code execution for derivations\n- **ctx_execute_file**: Read/edit files via sandbox\n- **ctx_search**: Query the knowledge base\n- **ctx_fetch_and_index** → **ctx_search**: Web pages\n- **ctx_index**: Index docs/specs for later recall\n- **ctx_stats / ctx_doctor / ctx_upgrade / ctx_purge**: Meta tools\n\nSession mode: **implement**.\n\nReady for your task."}],"api":"openai-completions","provider":"ollama","model":"minimax-m3:cloud","usage":{"input":17211,"output":155,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17366,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161191620,"responseId":"chatcmpl-853","responseModel":"minimax-m3"}}
|
||||
{"type":"message","id":"21918cd4","parentId":"d77fba77","timestamp":"2026-07-04T10:33:17.047Z","message":{"role":"user","content":[{"type":"text","text":"you"}],"timestamp":1783161197046}}
|
||||
{"type":"message","id":"e392b907","parentId":"21918cd4","timestamp":"2026-07-04T10:33:20.981Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user pasted what looks like a system/instruction prompt (not a real question). They said \"youcontext-mode active\" which seems like they're sending me a reminder/reinforcement of the context-mode protocol. The session state shows implement mode.\n\nThis is essentially a no-op or affirmation prompt. I should acknowledge briefly and wait for the actual task. I should be concise.","thinkingSignature":"reasoning"},{"type":"text","text":"Acknowledged. Context-mode hierarchy noted, implement mode active. Standing by for your task."}],"api":"openai-completions","provider":"ollama","model":"minimax-m3:cloud","usage":{"input":17348,"output":95,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17443,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161197048,"responseId":"chatcmpl-1","responseModel":"minimax-m3"}}
|
||||
{"type":"message","id":"049fc070","parentId":"e392b907","timestamp":"2026-07-04T10:33:21.035Z","message":{"role":"user","content":[{"type":"text","text":"check"}],"timestamp":1783161201035}}
|
||||
{"type":"message","id":"82a91abb","parentId":"049fc070","timestamp":"2026-07-04T10:33:24.118Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user is confirming the context-mode active state and hierarchy. This appears to be a system-injected session state message confirming the mode. I should acknowledge briefly and stand by for actual tasks.","thinkingSignature":"reasoning"},{"type":"text","text":"Confirmed. Context-mode active, hierarchy locked, implement mode. Ready for work."}],"api":"openai-completions","provider":"ollama","model":"minimax-m3:cloud","usage":{"input":17378,"output":56,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17434,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161201036,"responseId":"chatcmpl-837","responseModel":"minimax-m3"}}
|
||||
{"type":"message","id":"53abe24e","parentId":"82a91abb","timestamp":"2026-07-04T10:33:24.167Z","message":{"role":"user","content":[{"type":"text","text":"if"}],"timestamp":1783161204167}}
|
||||
{"type":"message","id":"c4380b97","parentId":"53abe24e","timestamp":"2026-07-04T10:33:26.712Z","message":{"role":"assistant","content":[{"type":"text","text":"Got it. Context-mode active, hierarchy confirmed, implement mode locked. Awaiting your task."}],"api":"openai-completions","provider":"ollama","model":"minimax-m3:cloud","usage":{"input":0,"output":20,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":20,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161204168,"responseId":"chatcmpl-768","responseModel":"minimax-m3"}}
|
||||
{"type":"message","id":"6e50e6a5","parentId":"c4380b97","timestamp":"2026-07-04T10:33:26.763Z","message":{"role":"user","content":[{"type":"text","text":"i"}],"timestamp":1783161206762}}
|
||||
{"type":"message","id":"70224d2d","parentId":"6e50e6a5","timestamp":"2026-07-04T10:33:30.115Z","message":{"role":"assistant","content":[{"type":"text","text":"Context-mode acknowledged.\n\n- **Hierarchy**: ctx_batch_execute > ctx_execute > ctx_execute_file > ctx_search\n- **Read/edit files** → ctx_execute_file\n- **Multi-command research** → ctx_batch_execute\n- **Web pages** → ctx_fetch_and_index → ctx_search\n- **Index docs** → ctx_index\n- **Stats** → ctx_stats | **Doctor** → ctx_doctor | **Upgrade** → ctx_upgrade | **Purge** → ctx_purge\n- **Mode**: implement\n- **State**: from compaction\n\nReady for your task."}],"api":"openai-completions","provider":"ollama","model":"minimax-m3:cloud","usage":{"input":17437,"output":124,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17561,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161206764,"responseId":"chatcmpl-708","responseModel":"minimax-m3"}}
|
||||
{"type":"message","id":"a552a7fa","parentId":"70224d2d","timestamp":"2026-07-04T10:33:30.162Z","message":{"role":"user","content":[{"type":"text","text":"have"}],"timestamp":1783161210161}}
|
||||
{"type":"message","id":"7f54e9a6","parentId":"a552a7fa","timestamp":"2026-07-04T10:33:32.547Z","message":{"role":"assistant","content":[{"type":"text","text":"Context-mode active, hierarchy locked, implement mode, restored from compaction. Ready for your task."}],"api":"openai-completions","provider":"ollama","model":"minimax-m3:cloud","usage":{"input":17572,"output":20,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17592,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161210163,"responseId":"chatcmpl-769","responseModel":"minimax-m3"}}
|
||||
{"type":"message","id":"5f7008fb","parentId":"7f54e9a6","timestamp":"2026-07-04T10:33:32.597Z","message":{"role":"user","content":[{"type":"text","text":"orphaned"}],"timestamp":1783161212596}}
|
||||
{"type":"message","id":"5f1190c1","parentId":"5f7008fb","timestamp":"2026-07-04T10:33:39.153Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user is sending me a message that contains \"orphaned\" followed by what appears to be a context-mode status block. Let me parse this carefully:\n\n\"orphaned\" - this seems to be a label or status\n\"context-mode active. Hierarchy: ctx_batch_execute > ctx_execute > ctx_execute_file > ctx_search. Read/edit files → ctx_execute_file. Multi-command research → ctx_batch_execute. Web pages → ctx_fetch_and_index then ctx_search. Index docs → ctx_index. Stats → ctx_stats. Doctor → ctx_doctor. Upgrade → ctx_upgrade. Purge → ctx_purge.\"\n\nAnd the session_state shows `<session_mode>implement</session_mode>`.\n\nThis looks like the user is confirming/reaffirming the context-mode state. The \"orphaned\" prefix is interesting - it might be indicating that this is an orphaned session (one that was rehydrated from compaction). The rest is just a restatement of the context-mode hierarchy and capabilities.\n\nThe previous messages in this conversation were just me echoing back acknowledgments. The user seems to want me to acknowledge the state again. Or perhaps they want me to do something.\n\nLooking at the flow: the user has been sending single-word messages (\"can\", \"you\", \"check\", \"if\", \"i\", \"have\", \"orphaned\") and I've been responding with context-mode acknowledgments. This pattern looks like the user is testing the system or perhaps these are tokens/fragments from a larger system.\n\nThe \"orphaned\" message followed by the context-mode state block with session_state from compaction strongly suggests this is a system-generated rehydration of context-mode state. The user (or system) is confirming that context-mode is active and the session is in implement mode, restored from compaction.\n\nI should acknowledge this and await an actual task. Let me be concise and not waste tokens.","thinkingSignature":"reasoning"},{"type":"text","text":"Context-mode active, session restored from compaction. Mode: implement. Awaiting task."}],"api":"openai-completions","provider":"ollama","model":"minimax-m3:cloud","usage":{"input":17604,"output":400,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":18004,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161212597,"responseId":"chatcmpl-290","responseModel":"minimax-m3"}}
|
||||
{"type":"message","id":"ff6c9d4f","parentId":"5f1190c1","timestamp":"2026-07-04T10:33:39.209Z","message":{"role":"user","content":[{"type":"text","text":"packages"}],"timestamp":1783161219208}}
|
||||
{"type":"message","id":"ec63d2ce","parentId":"ff6c9d4f","timestamp":"2026-07-04T10:33:41.486Z","message":{"role":"assistant","content":[{"type":"text","text":"Context-mode active. Hierarchy locked, implement mode, session restored from compaction. Ready for your task."}],"api":"openai-completions","provider":"ollama","model":"minimax-m3:cloud","usage":{"input":17633,"output":21,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17654,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161219209,"responseId":"chatcmpl-364","responseModel":"minimax-m3"}}
|
||||
{"type":"message","id":"c5fb74ca","parentId":"ec63d2ce","timestamp":"2026-07-04T10:33:41.543Z","message":{"role":"user","content":[{"type":"text","text":"in"}],"timestamp":1783161221542}}
|
||||
{"type":"message","id":"70f9be7c","parentId":"c5fb74ca","timestamp":"2026-07-04T10:33:43.812Z","message":{"role":"assistant","content":[{"type":"text","text":"Context-mode active, hierarchy confirmed, implement mode, session restored from compaction. Ready for your task."}],"api":"openai-completions","provider":"ollama","model":"minimax-m3:cloud","usage":{"input":17665,"output":21,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17686,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161221544,"responseId":"chatcmpl-365","responseModel":"minimax-m3"}}
|
||||
{"type":"message","id":"a2ba1964","parentId":"70f9be7c","timestamp":"2026-07-04T10:33:43.870Z","message":{"role":"user","content":[{"type":"text","text":"pacman"}],"timestamp":1783161223869}}
|
||||
{"type":"message","id":"2209be98","parentId":"a2ba1964","timestamp":"2026-07-04T10:33:46.112Z","message":{"role":"assistant","content":[{"type":"text","text":"Context-mode active. Hierarchy locked, implement mode, session restored from compaction. Ready for your task."}],"api":"openai-completions","provider":"ollama","model":"minimax-m3:cloud","usage":{"input":17698,"output":21,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17719,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161223871,"responseId":"chatcmpl-132","responseModel":"minimax-m3"}}
|
||||
{"type":"message","id":"64501c49","parentId":"2209be98","timestamp":"2026-07-04T10:33:46.188Z","message":{"role":"user","content":[{"type":"text","text":"and"}],"timestamp":1783161226187}}
|
||||
{"type":"message","id":"0ff8ade4","parentId":"64501c49","timestamp":"2026-07-04T10:33:48.630Z","message":{"role":"assistant","content":[{"type":"text","text":"Context-mode active. Mode: implement. Restored from compaction. Ready for your task."}],"api":"openai-completions","provider":"ollama","model":"minimax-m3:cloud","usage":{"input":17730,"output":19,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17749,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161226189,"responseId":"chatcmpl-144","responseModel":"minimax-m3"}}
|
||||
{"type":"message","id":"6c08fdba","parentId":"0ff8ade4","timestamp":"2026-07-04T10:33:48.682Z","message":{"role":"user","content":[{"type":"text","text":"paru"}],"timestamp":1783161228681}}
|
||||
{"type":"message","id":"715d04cd","parentId":"6c08fdba","timestamp":"2026-07-04T10:33:51.269Z","message":{"role":"assistant","content":[{"type":"text","text":"Context-mode active, hierarchy locked, implement mode, session restored from compaction. Ready for your task."}],"api":"openai-completions","provider":"ollama","model":"minimax-m3:cloud","usage":{"input":17761,"output":21,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17782,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161228683,"responseId":"chatcmpl-644","responseModel":"minimax-m3"}}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
{"type":"session","version":3,"id":"019f2cb1-bb4c-7aa1-9a05-c8b4efca820d","timestamp":"2026-07-04T10:34:33.164Z","cwd":"/home"}
|
||||
{"type":"model_change","id":"c0f9899c","parentId":null,"timestamp":"2026-07-04T10:34:33.501Z","provider":"ollama","modelId":"kimi-k2.6:cloud"}
|
||||
{"type":"thinking_level_change","id":"4c80955f","parentId":"c0f9899c","timestamp":"2026-07-04T10:34:33.501Z","thinkingLevel":"off"}
|
||||
{"type":"message","id":"14edf977","parentId":"4c80955f","timestamp":"2026-07-04T10:34:33.945Z","message":{"role":"user","content":[{"type":"text","text":"can"}],"timestamp":1783161273583}}
|
||||
{"type":"message","id":"eb29a067","parentId":"14edf977","timestamp":"2026-07-04T10:34:38.921Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user just typed \"can\" which is an incomplete sentence/question. They might be asking \"can you...\" or \"can I...\" or something similar. Since it's incomplete, I should ask them to clarify what they'd like to know or do.\n\nGiven the context-mode is active and we're in implement mode, they might be asking about capabilities. I should respond helpfully asking for clarification while being ready to assist with whatever they need.","thinkingSignature":"reasoning"},{"type":"text","text":"I'm here and ready to help! It looks like your message got cut off at \"can\" — what would you like to know or do?\n\nA few possibilities based on the active context:\n\n- **Can you help me with a coding task?** → Yes! Read/edit files, run commands, analyze code, etc.\n- **Can you check context-mode stats?** → I can run `ctx_stats` or `ctx_doctor` if needed.\n- **Can we search the knowledge base?** → Use `ctx_search` to find indexed content.\n- **Can you execute multiple commands?** → `ctx_batch_execute` is available for parallel research.\n\nWhat were you going to ask?"}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":13022,"output":228,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":13250,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161274008,"responseId":"chatcmpl-655","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"8ff75f13","parentId":"eb29a067","timestamp":"2026-07-04T10:34:38.971Z","message":{"role":"user","content":[{"type":"text","text":"you"}],"timestamp":1783161278970}}
|
||||
{"type":"message","id":"0accd26d","parentId":"8ff75f13","timestamp":"2026-07-04T10:34:45.266Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user's message is just \"you\" - seems like they might have been typing something and it got fragmented. The previous turn was \"can\" and now \"you\" - maybe they were trying to say \"can you...\" but the message got split.\n\nGiven the session state, context-mode is active. I should ask what they need help with, or wait for them to complete their thought. But looking at the pattern, this might be an accidental fragmented message. I should respond helpfully asking what they need.\n\nActually, looking more carefully - they might be typing a command that got split across multiple messages. I should just ask what they need help with and offer the available capabilities.","thinkingSignature":"reasoning"},{"type":"text","text":"I'm here! It looks like your message might have gotten fragmented (\"can\" → \"you\"). \n\nHow can I help you today? I can:\n\n- **Code**: read files, edit code, write new files, run commands\n- **Research**: batch execute multiple commands, search the web, fetch and index pages\n- **Analyze**: process large outputs with `ctx_execute`, search indexed knowledge with `ctx_search`\n- **Debug**: run `ctx_doctor` or check `ctx_stats` for context-mode health\n\nWhat were you going to ask?"}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":13174,"output":251,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":13425,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161278971,"responseId":"chatcmpl-793","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"b6d07818","parentId":"0accd26d","timestamp":"2026-07-04T10:34:45.320Z","message":{"role":"user","content":[{"type":"text","text":"check"}],"timestamp":1783161285319}}
|
||||
{"type":"message","id":"f1fbf969","parentId":"b6d07818","timestamp":"2026-07-04T10:34:50.546Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to \"check\" something, and context-mode is active. Based on the context-mode status message, I should use the appropriate tools. Let me check what they might want me to check. The most common \"check\" requests when context-mode is active would be:\n\n1. `ctx_stats` - check context mode stats/savings\n2. `ctx_doctor` - check if context mode is healthy\n3. Check the session state (but that's already provided)\n\nSince they said \"check\" and context-mode is active, I should probably run `ctx_stats` and `ctx_doctor` to give them a comprehensive health/status check. But let me think about what \"check\" typically means in this context...\n\nActually, given the fragmented messages (\"can\" → \"you\" → \"check\"), they might be asking \"can you check [something]\". But without knowing what to check, `ctx_stats` and `ctx_doctor` are the safest defaults for a context-mode health/status check.\n\nLet me run both `ctx_stats` and `ctx_doctor` to be helpful.","thinkingSignature":"reasoning"},{"type":"text","text":"I'll run a context-mode health and stats check for you."},{"type":"toolCall","id":"functions.ctx_stats:0","name":"ctx_stats","arguments":{}},{"type":"toolCall","id":"functions.ctx_doctor:1","name":"ctx_doctor","arguments":{}}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":13298,"output":258,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":13556,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1783161285320,"responseId":"chatcmpl-404","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"51af6500","parentId":"f1fbf969","timestamp":"2026-07-04T10:34:50.774Z","message":{"role":"toolResult","toolCallId":"functions.ctx_stats:0","toolName":"ctx_stats","content":[{"type":"text","text":"context-mode < 1 min 0 calls\n\nNo tool calls yet. Use batch_execute or execute to start saving tokens.\n\n All your work · 80 events captured across 2 projects · 26 conversations\n\n cost 48 ██████████████████████████████\n Session intent 18 ███████████░░░░░░░░░░░░░░░░░░░\n pi 8 █████░░░░░░░░░░░░░░░░░░░░░░░░░\n sandbox 6 ████░░░░░░░░░░░░░░░░░░░░░░░░░░\n Skipped (1): Pi\n These adapters have DBs on disk but only test fixtures, dev skeletons,\n or detection probes — no real chat activity.\n\n─────────────────────────────────────────────────────────────────\nYour AI talks less, remembers more, costs less.\n$0.00 this session · $0.02 lifetime\n─────────────────────────────────────────────────────────────────\n\nv1.0.169"}],"details":{},"isError":false,"timestamp":1783161290774}}
|
||||
{"type":"message","id":"2ac46081","parentId":"51af6500","timestamp":"2026-07-04T10:34:50.775Z","message":{"role":"toolResult","toolCallId":"functions.ctx_doctor:1","toolName":"ctx_doctor","content":[{"type":"text","text":"context-mode doctor\n\n[OK] Runtimes: 7/11 (64%) — javascript, shell, python, ruby, go, rust, perl\n[WARN] Performance: NORMAL — install Bun for 3-5x speed boost\n[OK] Storage sessions: /home/liph/.pi/context-mode/sessions (default)\n[OK] Storage content: /home/liph/.pi/context-mode/content (default)\n[OK] Storage stats: /home/liph/.pi/context-mode/sessions (default)\n[OK] Server test: PASS\n[OK] FTS5 / SQLite: PASS — native module works\n[OK] Hook support: Pi hooks are wired via the context-mode Pi extension (~/.pi/extensions/context-mode/), not via JSON-stdio.\n[OK] Hook scripts: no direct .mjs script paths to verify\n[OK] Version: v1.0.169"}],"details":{},"isError":false,"timestamp":1783161290774}}
|
||||
{"type":"message","id":"b6e2e6eb","parentId":"2ac46081","timestamp":"2026-07-04T10:35:04.866Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user just said \"check\" and I ran ctx_stats and ctx_doctor. The results show:\n- ctx_stats: Very fresh session (< 1 min, 0 calls), but 80 events captured across 2 projects historically. Version v1.0.169.\n- ctx_doctor: Mostly OK. 7/11 runtimes available. Warning about Bun for speed boost. Everything else passes.\n\nI should present this clearly and ask what specifically they want me to check if this wasn't what they meant.","thinkingSignature":"reasoning"},{"type":"text","text":"Here's your context-mode status:\n\n**Stats** (`ctx_stats`)\n- Session: Fresh (< 1 min, 0 tool calls this session)\n- Historical: 80 events across 2 projects, 26 conversations\n- Lifetime cost: ~$0.02\n- Version: v1.0.169\n\n**Health Check** (`ctx_doctor`)\n- ✅ Storage, FTS5/SQLite, hooks, server all PASS\n- ✅ Runtimes: 7/11 available (JS, Shell, Python, Ruby, Go, Rust, Perl)\n- ⚠️ Performance: Install Bun for 3-5x speed boost\n\nEverything looks healthy. Was there something specific you wanted me to check — files, logs, a process, or something else?"}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":13878,"output":262,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":14140,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161290776,"responseId":"chatcmpl-625","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"c9d7a9c0","parentId":"b6e2e6eb","timestamp":"2026-07-04T10:35:04.931Z","message":{"role":"user","content":[{"type":"text","text":"if"}],"timestamp":1783161304929}}
|
||||
{"type":"message","id":"4f5ba648","parentId":"c9d7a9c0","timestamp":"2026-07-04T10:35:09.348Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user's messages are fragmented: \"can\" → \"you\" → \"check\" → \"if\". They seem to be asking \"can you check if...\" something. I need to prompt them to complete their thought so I can help them effectively.","thinkingSignature":"reasoning"},{"type":"text","text":"Your message seems to have gotten fragmented — looks like you were typing something like:\n\n> \"Can you check if **...**\"\n\nWhat were you going to ask? For example:\n\n- Can you check if a **file exists**?\n- Can you check if a **process is running**?\n- Can you check if **context-mode is working** for a specific task?\n- Can you check if **code compiles** or **tests pass**?\n- Can you check if **something is in the knowledge base**?\n\nJust finish the sentence and I'll help!"}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":13923,"output":164,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":14087,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161304932,"responseId":"chatcmpl-497","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"f819b8e3","parentId":"4f5ba648","timestamp":"2026-07-04T10:35:09.421Z","message":{"role":"user","content":[{"type":"text","text":"i"}],"timestamp":1783161309420}}
|
||||
{"type":"message","id":"e675dee9","parentId":"f819b8e3","timestamp":"2026-07-04T10:35:14.400Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user's messages keep getting fragmented (\"can\", \"you\", \"check\", \"if\", \"i\"). Now there's a session compaction event injected by the system.\n\nThe user seems to be struggling to type a complete message. I should ask them clearly what they want, acknowledging the fragmentation, and offer help. The compaction note tells me session mode is \"implement\" and context-mode is active.\n\nI should be patient and ask what they were trying to ask.","thinkingSignature":"reasoning"},{"type":"text","text":"It looks like your messages are getting cut into pieces. You typed:\n- \"can\"\n- \"you\" \n- \"check\"\n- \"if\"\n- \"i\"\n\nAnd then a system compaction event came through. Your session is in **implement mode** with context-mode fully active.\n\nWhat were you trying to ask? For example:\n\n- \"Can you check if I **have the right files**?\"\n- \"Can you check if I **need to upgrade** context-mode?\"\n- \"Can you check if I **have errors** in my project?\"\n- \"Can you check if **something is indexed**?\"\n\nOr if you'd prefer, just tell me what you're working on and I'll figure out what checks to run!"}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":14047,"output":238,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":14285,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161309421,"responseId":"chatcmpl-195","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"01cb733f","parentId":"e675dee9","timestamp":"2026-07-04T10:35:14.456Z","message":{"role":"user","content":[{"type":"text","text":"have"}],"timestamp":1783161314455}}
|
||||
{"type":"message","id":"6572f447","parentId":"01cb733f","timestamp":"2026-07-04T10:35:19.320Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"Yes, the user has context-mode active! That's what they were trying to ask: \"can you check if I have context-mode active\"\n\nThe answer is: Yes, you do have context-mode active. The system just confirmed it in the compaction event. Let me give them a clear answer and ask what they'd like to do with it.","thinkingSignature":"reasoning"},{"type":"text","text":"**Yes, you do have context-mode active!** ✅\n\nThe system just confirmed it in the compaction event. Here's what's available:\n\n| Tool | Use For |\n|------|---------|\n| `ctx_batch_execute` | Run multiple commands in parallel |\n| `ctx_execute` | Process large outputs without burning context |\n| `ctx_execute_file` | Analyze files without reading them into memory |\n| `ctx_search` | Query indexed knowledge base |\n| `ctx_fetch_and_index` | Cache web pages for later search |\n| `ctx_index` | Index local docs/files |\n| `ctx_stats` | Check token savings |\n| `ctx_doctor` | Run diagnostics |\n| `ctx_upgrade` | Update to latest version |\n\nYour stats from earlier show it's working — 80 historical events indexed, ~$0.02 lifetime cost, v1.0.169.\n\n**What would you like to do with it?** For example:\n- Index some documentation?\n- Run a batch of commands?\n- Search something in your knowledge base?"}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":14204,"output":278,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":14482,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161314457,"responseId":"chatcmpl-426","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"3d2422bd","parentId":"6572f447","timestamp":"2026-07-04T10:35:19.376Z","message":{"role":"user","content":[{"type":"text","text":"orphaned"}],"timestamp":1783161319375}}
|
||||
{"type":"message","id":"a87ab43d","parentId":"3d2422bd","timestamp":"2026-07-04T10:35:23.714Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user's message \"orphaned\" got fragmented across multiple turns, and now there's a compaction event confirming context-mode is active. It seems like they were trying to ask something like \"Can you check if I have orphaned [something]?\" \n\nGiven the context of context-mode and the word \"orphaned\", they might be asking about:\n1. Orphaned processes\n2. Orphaned files\n3. Orphaned index entries in context-mode\n4. Orphaned sessions\n\nLet me search the knowledge base for \"orphaned\" to see if there's any prior context, and also check if there are any orphaned context-mode sessions or files.","thinkingSignature":"reasoning"},{"type":"text","text":"I see \"orphaned\" — were you asking about **orphaned context-mode sessions**, **orphaned files/processes**, or something else? Let me check:"},{"type":"toolCall","id":"functions.ctx_search:2","name":"ctx_search","arguments":{"queries":["orphaned sessions","orphaned processes","orphaned files","orphaned index"],"sort":"timeline"}},{"type":"toolCall","id":"functions.bash:3","name":"bash","arguments":{"command":"ls -la /home/liph/.pi/context-mode/sessions/ 2>/dev/null | head -20"}}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":14425,"output":238,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":14663,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1783161319377,"responseId":"chatcmpl-355","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"9f39691a","parentId":"a87ab43d","timestamp":"2026-07-04T10:35:23.742Z","message":{"role":"toolResult","toolCallId":"functions.ctx_search:2","toolName":"ctx_search","content":[{"type":"text","text":"## orphaned sessions\nNo results found.\n\n---\n\n## orphaned processes\nNo results found.\n\n---\n\n## orphaned files\nNo results found.\n\n---\n\n## orphaned index\nNo results found.\n\n> Throttle: call #1/8 in this window. 2 call(s) before soft cap. Prefer ctx_search(queries: [...]) array form for multi-query workloads — it counts as a single call."}],"details":{},"isError":false,"timestamp":1783161323742}}
|
||||
{"type":"message","id":"73f6579c","parentId":"9f39691a","timestamp":"2026-07-04T10:35:23.742Z","message":{"role":"toolResult","toolCallId":"functions.bash:3","toolName":"bash","content":[{"type":"text","text":"total 496\ndrwxr-xr-x 1 liph liph 954 Jul 4 12:34 .\ndrwxr-xr-x 1 liph liph 30 Jul 4 00:20 ..\n-rw-r--r-- 1 liph liph 53248 Jul 4 12:35 2cc974af6afc822c.db\n-rw-r--r-- 1 liph liph 32768 Jul 4 12:35 2cc974af6afc822c.db-shm\n-rw-r--r-- 1 liph liph 173072 Jul 4 12:35 2cc974af6afc822c.db-wal\n-rw-r--r-- 1 liph liph 53248 Jul 3 23:55 590c1894467d14ef.db\n-rw-r--r-- 1 liph liph 32768 Jul 4 12:34 590c1894467d14ef.db-shm\n-rw-r--r-- 1 liph liph 0 Jul 4 00:06 590c1894467d14ef.db-wal\n-rw-r--r-- 1 liph liph 69632 Jul 4 00:22 aa673b1056f331f7.db\n-rw-r--r-- 1 liph liph 32768 Jul 4 12:34 aa673b1056f331f7.db-shm\n-rw-r--r-- 1 liph liph 0 Jul 4 12:33 aa673b1056f331f7.db-wal\n-rw-r--r-- 1 liph liph 386 Jul 3 23:49 stats-pid-1374687.json\n-rw-r--r-- 1 liph liph 385 Jul 4 00:06 stats-pid-1462008.json\n-rw-r--r-- 1 liph liph 390 Jul 4 00:08 stats-pid-1464359.json\n-rw-r--r-- 1 liph liph 389 Jul 4 00:09 stats-pid-1466317.json\n-rw-r--r-- 1 liph liph 389 Jul 4 00:09 stats-pid-1467504.json\n-rw-r--r-- 1 liph liph 389 Jul 4 00:10 stats-pid-1468533.json\n-rw-r--r-- 1 liph liph 390 Jul 4 00:10 stats-pid-1469564.json\n-rw-r--r-- 1 liph liph 389 Jul 4 00:14 stats-pid-1475152.json\n"}],"isError":false,"timestamp":1783161323742}}
|
||||
{"type":"message","id":"571db5a6","parentId":"73f6579c","timestamp":"2026-07-04T10:35:28.873Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user seems to be asking about \"orphaned\" something. I see there are multiple session DBs in the context-mode sessions directory, and some stats-pid files. Let me check if any of these look orphaned (stale, not matching current processes, etc.).\n\nActually, looking at the stats-pid files, there are many of them from different PIDs. These might be orphaned stats files. Let me check if those PIDs are still alive, and also check the content directory for orphaned files.\n\nAlso, I notice there are 3 session DBs. Some might be old/orphaned. Let me investigate more.","thinkingSignature":"reasoning"},{"type":"text","text":"I see some potentially orphaned items. Let me dig deeper:"},{"type":"toolCall","id":"functions.bash:4","name":"bash","arguments":{"command":"# Check if stats-pid files belong to alive processes\nfor f in /home/liph/.pi/context-mode/sessions/stats-pid-*.json; do\n pid=$(basename \"$f\" | sed 's/stats-pid-\\(.*\\)\\.json/\\1/')\n if ! kill -0 \"$pid\" 2>/dev/null; then\n echo \"ORPHANED: $f (PID $pid not running)\"\n else\n echo \"ACTIVE: $f (PID $pid running)\"\n fi\ndone"}},{"type":"toolCall","id":"functions.bash:5","name":"bash","arguments":{"command":"# Check content directory for orphaned files\nls -la /home/liph/.pi/context-mode/content/ 2>/dev/null | head -30"}}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":15302,"output":321,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":15623,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1783161323744,"responseId":"chatcmpl-912","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"867c68fa","parentId":"571db5a6","timestamp":"2026-07-04T10:35:28.916Z","message":{"role":"toolResult","toolCallId":"functions.bash:4","toolName":"bash","content":[{"type":"text","text":"ORPHANED: /home/liph/.pi/context-mode/sessions/stats-pid-1374687.json (PID 1374687 not running)\nORPHANED: /home/liph/.pi/context-mode/sessions/stats-pid-1462008.json (PID 1462008 not running)\nORPHANED: /home/liph/.pi/context-mode/sessions/stats-pid-1464359.json (PID 1464359 not running)\nORPHANED: /home/liph/.pi/context-mode/sessions/stats-pid-1466317.json (PID 1466317 not running)\nORPHANED: /home/liph/.pi/context-mode/sessions/stats-pid-1467504.json (PID 1467504 not running)\nORPHANED: /home/liph/.pi/context-mode/sessions/stats-pid-1468533.json (PID 1468533 not running)\nORPHANED: /home/liph/.pi/context-mode/sessions/stats-pid-1469564.json (PID 1469564 not running)\nORPHANED: /home/liph/.pi/context-mode/sessions/stats-pid-1475152.json (PID 1475152 not running)\nORPHANED: /home/liph/.pi/context-mode/sessions/stats-pid-1479267.json (PID 1479267 not running)\nORPHANED: /home/liph/.pi/context-mode/sessions/stats-pid-1481856.json (PID 1481856 not running)\nORPHANED: /home/liph/.pi/context-mode/sessions/stats-pid-1488412.json (PID 1488412 not running)\nORPHANED: /home/liph/.pi/context-mode/sessions/stats-pid-36740.json (PID 36740 not running)\nACTIVE: /home/liph/.pi/context-mode/sessions/stats-pid-39264.json (PID 39264 running)\n"}],"isError":false,"timestamp":1783161328915}}
|
||||
{"type":"message","id":"66c378b1","parentId":"867c68fa","timestamp":"2026-07-04T10:35:28.916Z","message":{"role":"toolResult","toolCallId":"functions.bash:5","toolName":"bash","content":[{"type":"text","text":"total 364\ndrwxr-xr-x 1 liph liph 168 Jul 4 12:34 .\ndrwxr-xr-x 1 liph liph 30 Jul 4 00:20 ..\n-rw-r--r-- 1 liph liph 4096 Jul 4 12:34 2cc974af6afc822c.db\n-rw-r--r-- 1 liph liph 32768 Jul 4 12:34 2cc974af6afc822c.db-shm\n-rw-r--r-- 1 liph liph 82432 Jul 4 12:34 2cc974af6afc822c.db-wal\n-rw-r--r-- 1 liph liph 245760 Jul 4 00:20 aa673b1056f331f7.db\n"}],"isError":false,"timestamp":1783161328916}}
|
||||
{"type":"message","id":"bbc924cb","parentId":"66c378b1","timestamp":"2026-07-04T10:35:33.814Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user seems to be asking about orphaned items. I found:\n1. 12 orphaned stats-pid JSON files (PIDs not running)\n2. 1 active stats-pid file\n3. 3 session DBs in sessions directory, 2 of which are also mirrored in content directory\n\nI should present this clearly and ask if they want me to clean up the orphaned files. Let me also check if the older session DBs might be orphaned by checking their modification times.","thinkingSignature":"reasoning"},{"type":"text","text":"**Yes, you have orphaned context-mode files!** Here's what I found:\n\n### Orphaned `stats-pid-*.json` files\n**12 orphaned** stats files in `~/.pi/context-mode/sessions/` — their processes are dead:\n```\nstats-pid-1374687.json through stats-pid-36740.json\n```\n\n**1 active**: `stats-pid-39264.json` (current session)\n\n### Session DBs\nYou have **3 session databases** in `sessions/`:\n- `2cc974af6afc822c.db` — currently active (Jul 4 12:35)\n- `590c1894467d14ef.db` — older (Jul 3 23:55, 0 WAL size)\n- `aa673b1056f331f7.db` — older (Jul 4 00:22, 0 WAL size)\n\nAnd **2 content DBs** in `content/`:\n- `2cc974af6afc822c.db` — current\n- `aa673b1056f331f7.db` — older\n\n---\n\n**Want me to clean up the orphaned stats files?** Or were you asking about something else orphaned (processes, git branches, node_modules, etc.)?"}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":16272,"output":362,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":16634,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161328917,"responseId":"chatcmpl-910","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"f9bdbfca","parentId":"bbc924cb","timestamp":"2026-07-04T10:35:33.866Z","message":{"role":"user","content":[{"type":"text","text":"packeges"}],"timestamp":1783161333865}}
|
||||
{"type":"message","id":"ec91b303","parentId":"f9bdbfca","timestamp":"2026-07-04T10:35:38.674Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user is asking about \"orphaned packages\" (with a typo: \"packeges\"). They want to check for orphaned packages in their system. Let me use a combination of tools to check for orphaned packages. Depending on the distro, this could be different commands. Let me check what distro they're on and then run appropriate commands.\n\nActually, looking at the context, the user has been sending fragmented messages:\n- \"can\"\n- \"you\" \n- \"check\"\n- \"if\"\n- \"i\"\n- \"have\"\n- \"orphaned\"\n- \"packeges\"\n\nSo the full question is: \"Can you check if I have orphaned packages?\"\n\nI'll check the system for orphaned packages. Since this is a Linux system, I should figure out the package manager and then run the appropriate command.","thinkingSignature":"reasoning"},{"type":"text","text":"Got it — **\"Can you check if I have orphaned packages?\"** Let me check your system:"},{"type":"toolCall","id":"functions.bash:6","name":"bash","arguments":{"command":"cat /etc/os-release 2>/dev/null | head -5"}},{"type":"toolCall","id":"functions.bash:7","name":"bash","arguments":{"command":"which apt dnf pacman yum 2>/dev/null"}}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":16388,"output":241,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":16629,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1783161333867,"responseId":"chatcmpl-744","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"2dbcb2c1","parentId":"ec91b303","timestamp":"2026-07-04T10:35:38.687Z","message":{"role":"toolResult","toolCallId":"functions.bash:6","toolName":"bash","content":[{"type":"text","text":"NAME=\"Arch Linux\"\nPRETTY_NAME=\"Arch Linux\"\nID=arch\nBUILD_ID=rolling\nANSI_COLOR=\"38;2;23;147;209\"\n"}],"isError":false,"timestamp":1783161338687}}
|
||||
{"type":"message","id":"e951f625","parentId":"2dbcb2c1","timestamp":"2026-07-04T10:35:38.687Z","message":{"role":"toolResult","toolCallId":"functions.bash:7","toolName":"bash","content":[{"type":"text","text":"/usr/bin/pacman\n\n\nCommand exited with code 3"}],"details":{},"isError":true,"timestamp":1783161338687}}
|
||||
{"type":"message","id":"3393116e","parentId":"e951f625","timestamp":"2026-07-04T10:35:42.939Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user is on Arch Linux, and they have `pacman`. For Arch, the way to check for orphaned packages is using `pacman -Qdt` (list packages that were installed as dependencies but are no longer required by any explicitly installed package).","thinkingSignature":"reasoning"},{"type":"text","text":"Arch Linux with `pacman`. Checking for orphaned packages now:"},{"type":"toolCall","id":"functions.bash:8","name":"bash","arguments":{"command":"# List orphaned packages (installed as deps, no longer needed)\norphaned=$(pacman -Qdtq 2>/dev/null)\nif [ -z \"$orphaned\" ]; then\n echo \"No orphaned packages found.\"\nelse\n count=$(echo \"$orphaned\" | wc -l)\n echo \"Found $count orphaned package(s):\"\n echo \"$orphaned\"\nfi"}},{"type":"toolCall","id":"functions.bash:9","name":"bash","arguments":{"command":"# Also check for packages not in any explicit group/repo\npacman -Qmq 2>/dev/null | wc -l && echo \"foreign packages (AUR/manual)\" || true"}}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":16607,"output":222,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":16829,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1783161338688,"responseId":"chatcmpl-500","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"79547c45","parentId":"3393116e","timestamp":"2026-07-04T10:35:43.494Z","message":{"role":"toolResult","toolCallId":"functions.bash:8","toolName":"bash","content":[{"type":"text","text":"Found 7 orphaned package(s):\ncabal-install\nchrpath\ncmake\nghc\ngo\nqt5-tools\nrustup\n"}],"isError":false,"timestamp":1783161343494}}
|
||||
{"type":"message","id":"52c8d09f","parentId":"79547c45","timestamp":"2026-07-04T10:35:43.494Z","message":{"role":"toolResult","toolCallId":"functions.bash:9","toolName":"bash","content":[{"type":"text","text":"59\nforeign packages (AUR/manual)\n"}],"isError":false,"timestamp":1783161343494}}
|
||||
{"type":"message","id":"75c47ba5","parentId":"52c8d09f","timestamp":"2026-07-04T10:35:48.759Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"So the user has:\n1. 7 orphaned packages (installed as dependencies but no longer explicitly needed)\n2. 59 foreign packages (from AUR or manually installed)\n\nThe orphaned ones are:\n- cabal-install\n- chrpath\n- cmake\n- ghc\n- go\n- qt5-tools\n- rustup\n\nI should present this clearly and offer to remove them if they want.","thinkingSignature":"reasoning"},{"type":"text","text":"**Yes, you have orphaned packages!** Here's the summary:\n\n### Orphaned Packages (7)\nThese were installed as dependencies but are no longer required:\n| Package | Notes |\n|---------|-------|\n| `cabal-install` | Haskell build tool |\n| `chrpath` | ELF rpath editor |\n| `cmake` | Build system |\n| `ghc` | Glasgow Haskell Compiler |\n| `go` | Go language |\n| `qt5-tools` | Qt5 development tools |\n| `rustup` | Rust toolchain installer |\n\n### Other Stats\n- **59 foreign packages** — installed from AUR or manually (`pacman -Qm`)\n\n---\n\n**These 7 can probably be safely removed** with:\n```bash\nsudo pacman -Rns $(pacman -Qdtq)\n```\n\nOr if you want to keep any of them (e.g., you actively use `go`, `rustup`, `cmake`, or `ghc`), install them explicitly first:\n```bash\nsudo pacman -S go rustup cmake ghc\n```\n\n**Want me to remove the orphans, or would you like to review the 59 foreign packages too?**"}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":16903,"output":322,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17225,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161343495,"responseId":"chatcmpl-942","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"3e7b231a","parentId":"75c47ba5","timestamp":"2026-07-04T10:35:48.826Z","message":{"role":"user","content":[{"type":"text","text":"in"}],"timestamp":1783161348825}}
|
||||
{"type":"message","id":"866c02d2","parentId":"3e7b231a","timestamp":"2026-07-04T10:35:54.513Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user's messages keep getting fragmented: \"can\", \"you\", \"check\", \"if\", \"i\", \"have\", \"orphaned\", \"packeges\", \"in\". Then a compaction event.\n\nThey're asking: **\"Can you check if I have orphaned packages in [something]?\"**\n\nThey might mean:\n1. Orphaned packages in their **Arch Linux system** — we already checked that (7 orphans found).\n2. Orphaned packages in a **specific project** (node_modules, Python venv, etc.)\n3. Orphaned packages in **context-mode itself**? No, context-mode doesn't really have packages.\n4. Orphaned packages in **npm/node_modules**?\n\nWait — they said \"in\" and then the compaction happened. Maybe they meant \"in context-mode\" or \"in npm\" or \"in the project\"?\n\nGiven the context of this session (they asked about context-mode orphaned files, then Arch orphaned packages, then \"in\"), they're likely asking about a specific project directory or package manager.\n\nBut I don't know what project they're working on. The current working directory is `/home`. Let me check if there's a specific project they're working on.\n\nActually, looking at the compaction hint, it emphasizes using context-mode tools. But for checking orphaned packages \"in\" something, I need to know what.\n\nLet me ask if they mean a specific project, or if they want me to check for orphaned npm packages, Python packages, etc. Or I could just check the current directory for common package files.\n\nActually, let me check the current directory for package files to see what project they might be working on.","thinkingSignature":"reasoning"},{"type":"text","text":"Your message got fragmented by compaction. It looks like you're asking:\n\n> **\"Can you check if I have orphaned packages in... [something]?\"**\n\nI already found **7 orphaned pacman packages** on your Arch system. But maybe you meant orphaned packages **in a project**? Let me check what's in your current directory:"},{"type":"toolCall","id":"functions.bash:10","name":"bash","arguments":{"command":"ls -la /home"}}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":17037,"output":423,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17460,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1783161348827,"responseId":"chatcmpl-924","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"b439df5f","parentId":"866c02d2","timestamp":"2026-07-04T10:35:54.522Z","message":{"role":"toolResult","toolCallId":"functions.bash:10","toolName":"bash","content":[{"type":"text","text":"total 0\ndrwxr-xr-x 1 root root 8 Feb 4 20:21 .\ndr-xr-xr-x 1 root root 122 Feb 13 23:24 ..\ndrwx------ 1 liph liph 1946 Jul 4 08:17 liph\n"}],"isError":false,"timestamp":1783161354521}}
|
||||
{"type":"message","id":"62bb2b69","parentId":"b439df5f","timestamp":"2026-07-04T10:35:59.695Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The /home directory only has the user's home. The working directory is /home. Let me check common project directories or look for package.json, Cargo.toml, requirements.txt, etc. to understand what project they might be working with.","thinkingSignature":"reasoning"},{"type":"toolCall","id":"functions.bash:11","name":"bash","arguments":{"command":"# Look for common package files in home directory\nfind /home/liph -maxdepth 3 -name \"package.json\" -o -name \"Cargo.toml\" -o -name \"requirements.txt\" -o -name \"Pipfile\" -o -name \"pyproject.toml\" -o -name \"Gemfile\" -o -name \"composer.json\" -o -name \"go.mod\" 2>/dev/null | head -20"}}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":17447,"output":155,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17602,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1783161354522,"responseId":"chatcmpl-652","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"5903b1f8","parentId":"62bb2b69","timestamp":"2026-07-04T10:35:59.834Z","message":{"role":"toolResult","toolCallId":"functions.bash:11","toolName":"bash","content":[{"type":"text","text":"/home/liph/.cache/opencode/package.json\n/home/liph/dotfiles/package.json\n/home/liph/netbox-docker/pyproject.toml\n/home/liph/spotify/spotify_to_tidal/pyproject.toml\n"}],"isError":false,"timestamp":1783161359833}}
|
||||
{"type":"message","id":"62ee1bb2","parentId":"5903b1f8","timestamp":"2026-07-04T10:36:04.397Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"Found some projects. The user might be asking about orphaned packages in one of these, or maybe they just meant \"in general\" and we've already answered. But since they specifically said \"in\", they probably had a specific target in mind.\n\nGiven the previous context (they asked about context-mode orphaned files first, then system orphaned packages, then \"in\"), they might be asking about orphaned packages in **npm/node_modules**, **Python**, or one of these specific projects.\n\nI should ask for clarification, but I can also quickly check if there are obvious orphaned packages in these projects. Let me offer the options and check the most common ones.","thinkingSignature":"reasoning"},{"type":"text","text":"Found some projects with package files. Your fragmented message \"can you check if i have orphaned packages in...\" — what did you mean by **\"in\"**?\n\nHere are the possibilities I found:\n\n| Project | File | Type |\n|---------|------|------|\n| `/home/liph/dotfiles` | `package.json` | npm |\n| `/home/liph/netbox-docker` | `pyproject.toml` | Python |\n| `/home/liph/spotify/spotify_to_tidal` | `pyproject.toml` | Python |\n\nOr did you mean:\n- **\"in the project I'm working on\"** — what project?\n- **\"in npm/node_modules\"** globally?\n- **\"in Python\"** (pip packages)?\n- **\"in context-mode\"** itself?\n\nTell me which one, or let me know what directory you're working in, and I'll check for orphaned packages there!"}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":17666,"output":315,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17981,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161359834,"responseId":"chatcmpl-534","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"a3aa02c9","parentId":"62ee1bb2","timestamp":"2026-07-04T10:36:04.450Z","message":{"role":"user","content":[{"type":"text","text":"pacman"}],"timestamp":1783161364449}}
|
||||
{"type":"message","id":"91574732","parentId":"a3aa02c9","timestamp":"2026-07-04T10:36:10.263Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user's original message fragments are: \"can\", \"you\", \"check\", \"if\", \"i\", \"have\", \"orphaned\", \"packeges\", \"in\" (typo for packages), \"pacman\".\n\nSo the full message is: **\"Can you check if I have orphaned packages in pacman?\"**\n\nI already answered this earlier! I found 7 orphaned packages:\n- cabal-install\n- chrpath\n- cmake\n- ghc\n- go\n- qt5-tools\n- rustup\n\nAnd I also found 59 foreign packages.\n\nThe user just repeated \"pacman\" after \"in\" - so they're confirming they meant orphaned packages in pacman. I already gave them that answer. Let me summarize again concisely.","thinkingSignature":"reasoning"},{"type":"text","text":"Ah! You were asking:\n\n> **\"Can you check if I have orphaned packages in pacman?\"**\n\nI already ran the check. Here's the answer:\n\n### Orphaned Pacman Packages: **7 found**\n\n| Package | What it is |\n|---------|-----------|\n| `cabal-install` | Haskell build tool |\n| `chrpath` | ELF rpath editor |\n| `cmake` | Build system |\n| `ghc` | Glasgow Haskell Compiler |\n| `go` | Go language |\n| `qt5-tools` | Qt5 development tools |\n| `rustup` | Rust toolchain installer |\n\n### Also found:\n- **59 foreign packages** (from AUR/manual install)\n\n---\n\n**Remove orphans safely:**\n```bash\nsudo pacman -Rns $(pacman -Qdtq)\n```\n\n**Or keep the ones you use** by marking them explicit first:\n```bash\nsudo pacman -S go rustup cmake ghc\n```\n\nWant me to run the removal command, or were you just checking?"}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":17582,"output":366,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":17948,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161364451,"responseId":"chatcmpl-11","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"4734e032","parentId":"91574732","timestamp":"2026-07-04T10:36:10.312Z","message":{"role":"user","content":[{"type":"text","text":"and"}],"timestamp":1783161370311}}
|
||||
{"type":"message","id":"f0ce3a58","parentId":"4734e032","timestamp":"2026-07-04T10:36:14.575Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user's message \"and\" got fragmented again by compaction. It seems like they're trying to complete a sentence like:\n\n\"Can you check if I have orphaned packages in pacman and [something else]?\"\n\nOr maybe \"and remove them?\"\n\nLet me ask what they meant by \"and\" since it's ambiguous. But also, maybe I should just offer the most likely continuations:\n\n1. \"and remove them?\" → Yes, I can help remove them\n2. \"and in other package managers?\" → Could check npm, pip, cargo, etc.\n3. \"and check context-mode too?\" → Already did\n4. \"and check what else is wrong?\" → Could run broader diagnostics\n\nI'll offer the most likely options concisely.","thinkingSignature":"reasoning"},{"type":"text","text":"Your message got cut off at **\"and\"**. Did you mean:\n\n1. **\"and remove them?\"** → I can run the cleanup command\n2. **\"and in other package managers?\"** → Check npm, pip, cargo, etc.\n3. **\"and check for other issues?\"** → Run a broader system health check\n4. **\"and what about those foreign packages?\"** → Review the 59 AUR/manual packages\n\nWhat were you going to say?"}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":17802,"output":253,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":18055,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161370313,"responseId":"chatcmpl-189","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"175a16b7","parentId":"f0ce3a58","timestamp":"2026-07-04T10:36:14.639Z","message":{"role":"user","content":[{"type":"text","text":"paru"}],"timestamp":1783161374638}}
|
||||
{"type":"message","id":"42d293ef","parentId":"175a16b7","timestamp":"2026-07-04T10:36:18.521Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user's message is fragmented again. They said \"and\" then \"paru\". They're likely asking:\n\n\"Can you check if I have orphaned packages in pacman and paru?\"\n\nParu is an AUR helper for Arch Linux. Let me check for orphaned packages specifically related to paru/AUR.","thinkingSignature":"reasoning"},{"type":"text","text":"Ah! **\"and paru\"** — checking AUR/orphaned packages via paru now:"},{"type":"toolCall","id":"functions.bash:12","name":"bash","arguments":{"command":"# Check if paru is installed\nwhich paru &>/dev/null && echo \"paru installed\" || echo \"paru not installed\""}},{"type":"toolCall","id":"functions.bash:13","name":"bash","arguments":{"command":"# List explicitly installed foreign (AUR) packages that may be orphaned\npacman -Qmq 2>/dev/null | head -30"}}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":17915,"output":184,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":18099,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1783161374641,"responseId":"chatcmpl-327","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"9891516c","parentId":"42d293ef","timestamp":"2026-07-04T10:36:18.800Z","message":{"role":"toolResult","toolCallId":"functions.bash:12","toolName":"bash","content":[{"type":"text","text":"paru installed\n"}],"isError":false,"timestamp":1783161378800}}
|
||||
{"type":"message","id":"a5b0ff2a","parentId":"9891516c","timestamp":"2026-07-04T10:36:18.800Z","message":{"role":"toolResult","toolCallId":"functions.bash:13","toolName":"bash","content":[{"type":"text","text":"abook\nbetterbird-bin\ncarapace-bin\ncatppuccin-gtk-theme-mocha\nclaude-desktop-bin\ndracula-gtk-theme-full\nfirefox-nightly-bin\ngconf\ngh-dash-bin\ngithub-cli-git\ngksu\ngruvbox-material-gtk-theme-git\ngtk2\ni2p-bin\ninput-wacom-dkms\njava-service-wrapper\nkanata-bin\nlibgksu\nlibgnome-keyring\nlibrewolf-bin\nmkpdf\nmusikcube-bin\nneofetch\nnetbird-bin\nnmtui-go\nobsidian-bin\noh-my-posh-bin\nopencode-bin\nopenssl-1.1\nopentabletdriver\n"}],"isError":false,"timestamp":1783161378800}}
|
||||
{"type":"message","id":"09c219e3","parentId":"a5b0ff2a","timestamp":"2026-07-04T10:36:22.755Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"Paru is installed. The user has 59 foreign (AUR) packages. Let me check if any of these AUR packages have orphaned dependencies or if any AUR packages themselves are no longer available upstream (true orphans).","thinkingSignature":"reasoning"},{"type":"toolCall","id":"functions.bash:14","name":"bash","arguments":{"command":"# Check for AUR packages that are no longer in the AUR (true orphans)\n# This queries the AUR RPC for each foreign package\necho \"Checking AUR for orphaned/unavailable packages...\"\nfor pkg in $(pacman -Qmq); do\n # Check if package exists in AUR\n response=$(curl -s \"https://aur.archlinux.org/rpc/v5/info?arg=${pkg}\" 2>/dev/null)\n if echo \"$response\" | grep -q '\"resultcount\":0'; then\n echo \"NOT IN AUR: $pkg\"\n fi\ndone | head -20","timeout":30000}}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":18181,"output":206,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":18387,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1783161378801,"responseId":"chatcmpl-374","responseModel":"kimi-k2.6"}}
|
||||
{"type":"message","id":"fa405670","parentId":"09c219e3","timestamp":"2026-07-04T10:36:42.456Z","message":{"role":"toolResult","toolCallId":"functions.bash:14","toolName":"bash","content":[{"type":"text","text":"Checking AUR for orphaned/unavailable packages...\nNOT IN AUR: paru-debug\n"}],"isError":false,"timestamp":1783161402456}}
|
||||
{"type":"message","id":"b05d6a3b","parentId":"fa405670","timestamp":"2026-07-04T10:36:47.725Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user has paru installed. I found:\n1. `paru-debug` is a debug package that's not in the AUR (expected for -debug packages)\n2. 59 foreign packages total\n3. 7 orphaned pacman packages from earlier\n\nLet me also check if paru itself can identify orphans.","thinkingSignature":"reasoning"},{"type":"text","text":"Here's your **paru** status:\n\n### Paru Info\n- ✅ **Paru is installed**\n\n### Foreign (AUR) Packages: **59 total**\nSome highlights from your AUR packages:\n- `betterbird-bin`, `claude-desktop-bin`, `firefox-nightly-bin`, `librewolf-bin`, `obsidian-bin`\n- `gh-dash-bin`, `github-cli-git`, `netbird-bin`, `opencode-bin`, `nmtui-go`\n- `neofetch`, `kanata-bin`, `musikcube-bin`, `oh-my-posh-bin`\n- Various themes: `catppuccin-gtk-theme-mocha`, `dracula-gtk-theme-full`, `gruvbox-material-gtk-theme-git`\n\n### AUR Orphans\nOnly **1 package not found in AUR**:\n- `paru-debug` — this is just a debug symbol package, normal to not be in AUR\n\n---\n\n**Want me to check anything specific?**\n- Remove the 7 pacman orphans?\n- Check if any AUR packages are outdated (`paru -Qua`)?\n- Check AUR package dependencies that are orphaned?\n\nJust say what you need!"}],"api":"openai-completions","provider":"ollama","model":"kimi-k2.6:cloud","usage":{"input":18421,"output":312,"cacheRead":0,"cacheWrite":0,"reasoning":0,"totalTokens":18733,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1783161402457,"responseId":"chatcmpl-599","responseModel":"kimi-k2.6"}}
|
||||
+9
File diff suppressed because one or more lines are too long
+175
File diff suppressed because one or more lines are too long
+32
File diff suppressed because one or more lines are too long
+5
File diff suppressed because one or more lines are too long
+14
File diff suppressed because one or more lines are too long
+5
File diff suppressed because one or more lines are too long
+11
File diff suppressed because one or more lines are too long
+6
@@ -0,0 +1,6 @@
|
||||
{"type":"session","version":3,"id":"019f2d0a-3dcd-7b34-90bb-7ae15fe257fc","timestamp":"2026-07-04T12:11:13.741Z","cwd":"/home/liph/dotfiles/pi/.pi/agent/agents"}
|
||||
{"type":"model_change","id":"4fa34e76","parentId":null,"timestamp":"2026-07-04T12:11:16.296Z","provider":"ollama","modelId":"minimax-m3:cloud"}
|
||||
{"type":"thinking_level_change","id":"833dcf0d","parentId":"4fa34e76","timestamp":"2026-07-04T12:11:16.296Z","thinkingLevel":"medium"}
|
||||
{"type":"custom_message","customType":"subagent-slash-result","content":"Running subagent...","display":true,"details":{"requestId":"2edbb3fb-b2f3-41dd-947f-da1fe290ae38","result":{"content":[{"type":"text","text":""}],"details":{"mode":"single","results":[{"agent":"subagent","task":"","exitCode":0,"messages":[],"usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"cost":0,"turns":0},"progress":{"agent":"subagent","status":"running","task":"","recentTools":[],"recentOutput":[],"toolCount":0,"tokens":0,"durationMs":0}}],"progress":[{"agent":"subagent","status":"running","task":"","recentTools":[],"recentOutput":[],"toolCount":0,"tokens":0,"durationMs":0}]}}},"id":"f222932c","parentId":"833dcf0d","timestamp":"2026-07-04T12:13:15.205Z"}
|
||||
{"type":"custom_message","customType":"subagent-slash-result","content":"## Subagent result\n\nNo active subagent fleet. Background runs that already finished are available through completion notifications or subagent({ action: \"status\", id: \"...\" }).","display":false,"details":{"requestId":"2edbb3fb-b2f3-41dd-947f-da1fe290ae38","result":{"content":[{"type":"text","text":"No active subagent fleet. Background runs that already finished are available through completion notifications or subagent({ action: \"status\", id: \"...\" })."}],"details":{"mode":"management","results":[]}}},"id":"94c50ecd","parentId":"f222932c","timestamp":"2026-07-04T12:13:15.216Z"}
|
||||
{"type":"custom_message","customType":"subagent-slash-text-result","content":"Subagent profiles\n\nNo subagent profiles found in ~/.pi/agent/profiles/pi-subagents/","display":true,"id":"f5463f68","parentId":"94c50ecd","timestamp":"2026-07-04T12:13:29.410Z"}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{"type":"session","version":3,"id":"019f2cf6-da90-7ce5-b860-89b3bc41e7cd","timestamp":"2026-07-04T11:50:03.152Z","cwd":"/home/liph/dotfiles/pi/.pi/agent/prompts"}
|
||||
{"type":"model_change","id":"aeb7731b","parentId":null,"timestamp":"2026-07-04T11:50:06.197Z","provider":"ollama","modelId":"minimax-m3:cloud"}
|
||||
{"type":"thinking_level_change","id":"cb82f80a","parentId":"aeb7731b","timestamp":"2026-07-04T11:50:06.197Z","thinkingLevel":"off"}
|
||||
{"type":"custom_message","customType":"subagent-slash-result","content":"Running subagent...","display":true,"details":{"requestId":"6b9b6f5a-51df-41f4-8c4e-70b046177173","result":{"content":[{"type":"text","text":""}],"details":{"mode":"single","results":[{"agent":"subagent","task":"","exitCode":0,"messages":[],"usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"cost":0,"turns":0},"progress":{"agent":"subagent","status":"running","task":"","recentTools":[],"recentOutput":[],"toolCount":0,"tokens":0,"durationMs":0}}],"progress":[{"agent":"subagent","status":"running","task":"","recentTools":[],"recentOutput":[],"toolCount":0,"tokens":0,"durationMs":0}]}}},"id":"2816c209","parentId":"cb82f80a","timestamp":"2026-07-04T11:50:24.463Z"}
|
||||
{"type":"custom_message","customType":"subagent-slash-result","content":"## Subagent result\n\nBuiltin subagent models\n\nCurrent session model:\n ollama/minimax-m3:cloud\n\ncontext-builder\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\ndelegate\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\noracle\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\nplanner\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\nresearcher\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\nreviewer\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\nscout\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\nworker\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n","display":false,"details":{"requestId":"6b9b6f5a-51df-41f4-8c4e-70b046177173","result":{"content":[{"type":"text","text":"Builtin subagent models\n\nCurrent session model:\n ollama/minimax-m3:cloud\n\ncontext-builder\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\ndelegate\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\noracle\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\nplanner\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\nresearcher\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\nreviewer\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\nscout\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n\nworker\n model:\n ollama/minimax-m3:cloud\n source: inherits current session model\n"}],"isError":false,"details":{"mode":"management","results":[]}}},"id":"a2dda0a2","parentId":"2816c209","timestamp":"2026-07-04T11:50:24.677Z"}
|
||||
{"type":"custom_message","customType":"subagent-slash-text-result","content":"Subagent profiles\n\nNo subagent profiles found in ~/.pi/agent/profiles/pi-subagents/","display":true,"id":"f5ab365e","parentId":"a2dda0a2","timestamp":"2026-07-04T11:51:06.048Z"}
|
||||
@@ -5,9 +5,56 @@
|
||||
"npm:pi-ollama-cloud",
|
||||
"npm:context-mode",
|
||||
"npm:pi-subagents",
|
||||
"npm:@a5c-ai/babysitter-pi"
|
||||
"npm:@a5c-ai/babysitter-pi",
|
||||
"npm:@juicesharp/rpiv-ask-user-question",
|
||||
"npm:@ff-labs/pi-fff",
|
||||
"npm:@demigodmode/pi-web-agent",
|
||||
"npm:pi-crew"
|
||||
],
|
||||
"defaultProvider": "ollama",
|
||||
"defaultModel": "kimi-k2.6:cloud",
|
||||
"defaultThinkingLevel": "medium"
|
||||
"defaultModel": "kimi-k2.7-code:cloud",
|
||||
"defaultThinkingLevel": "medium",
|
||||
"subagents": {
|
||||
"agentOverrides": {
|
||||
"scout": {
|
||||
"model": "ollama/minimax-m3:cloud",
|
||||
"thinking": "high"
|
||||
},
|
||||
"planner": {
|
||||
"model": "ollama/minimax-m3:cloud",
|
||||
"thinking": "high"
|
||||
},
|
||||
"worker": {
|
||||
"model": "ollama/kimi-k2.7-code:cloud",
|
||||
"thinking": "high"
|
||||
},
|
||||
"oracle": {
|
||||
"model": "ollama/minimax-m3:cloud",
|
||||
"thinking": "high"
|
||||
},
|
||||
"reviewer": {
|
||||
"model": "ollama/kimi-k2.6:cloud",
|
||||
"thinking": "high"
|
||||
},
|
||||
"researcher": {
|
||||
"model": "ollama/minimax-m3:cloud",
|
||||
"thinking": "high"
|
||||
},
|
||||
"context-builder": {
|
||||
"model": "ollama/minimax-m3:cloud",
|
||||
"thinking": "high"
|
||||
},
|
||||
"delegate": {
|
||||
"model": "ollama/minimax-m3:cloud"
|
||||
}
|
||||
},
|
||||
"modelScope": {
|
||||
"allow": [
|
||||
"ollama/minimax-m3:cloud",
|
||||
"ollama/kimi-k2.6:cloud",
|
||||
"ollama/kimi-k2.7-code:cloud",
|
||||
"ollama/gemini-3-flash-preview"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||
"name": "crew-catppuccin-latte",
|
||||
"vars": {
|
||||
"bg": "#eff1f5",
|
||||
"fg": "#4c4f69",
|
||||
"mauve": "#8839ef",
|
||||
"pink": "#ea76cb",
|
||||
"blue": "#1e66f5",
|
||||
"green": "#40a02b",
|
||||
"teal": "#179299",
|
||||
"sky": "#04a5e5",
|
||||
"sapphire": "#209fb5",
|
||||
"red": "#d20f39",
|
||||
"maroon": "#e64553",
|
||||
"peach": "#fe640b",
|
||||
"yellow": "#df8e1d",
|
||||
"rosewater": "#dc8a78",
|
||||
"flamingo": "#dd7878",
|
||||
"lavender": "#7287fd",
|
||||
"gray": "#6c6f85",
|
||||
"dimGray": "#9ca0b0",
|
||||
"darkGray": "#bcc0cc",
|
||||
"darkerGray": "#ccd0da",
|
||||
"selection": "#dcd8f5",
|
||||
"userMsgBg": "#ccd0da",
|
||||
"customMsgBg": "#ccd0da",
|
||||
"toolPending": "#e6e9ef",
|
||||
"toolSuccess": "#e3f0df",
|
||||
"toolError": "#fbe0e3"
|
||||
},
|
||||
"colors": {
|
||||
"accent": "mauve",
|
||||
"border": "darkGray",
|
||||
"borderAccent": "mauve",
|
||||
"borderMuted": "darkerGray",
|
||||
"success": "green",
|
||||
"error": "red",
|
||||
"warning": "peach",
|
||||
"muted": "gray",
|
||||
"dim": "dimGray",
|
||||
"text": "fg",
|
||||
"thinkingText": "gray",
|
||||
|
||||
"selectedBg": "selection",
|
||||
"userMessageBg": "userMsgBg",
|
||||
"userMessageText": "fg",
|
||||
"customMessageBg": "customMsgBg",
|
||||
"customMessageText": "fg",
|
||||
"customMessageLabel": "lavender",
|
||||
"toolPendingBg": "toolPending",
|
||||
"toolSuccessBg": "toolSuccess",
|
||||
"toolErrorBg": "toolError",
|
||||
"toolTitle": "sky",
|
||||
"toolOutput": "gray",
|
||||
|
||||
"mdHeading": "yellow",
|
||||
"mdLink": "blue",
|
||||
"mdLinkUrl": "dimGray",
|
||||
"mdCode": "green",
|
||||
"mdCodeBlock": "#179299",
|
||||
"mdCodeBlockBorder": "darkGray",
|
||||
"mdQuote": "gray",
|
||||
"mdQuoteBorder": "darkGray",
|
||||
"mdHr": "darkGray",
|
||||
"mdListBullet": "blue",
|
||||
|
||||
"toolDiffAdded": "green",
|
||||
"toolDiffRemoved": "red",
|
||||
"toolDiffContext": "gray",
|
||||
|
||||
"syntaxComment": "#9ca0b0",
|
||||
"syntaxKeyword": "pink",
|
||||
"syntaxFunction": "blue",
|
||||
"syntaxVariable": "peach",
|
||||
"syntaxString": "green",
|
||||
"syntaxNumber": "peach",
|
||||
"syntaxType": "yellow",
|
||||
"syntaxOperator": "sky",
|
||||
"syntaxPunctuation": "fg",
|
||||
|
||||
"thinkingOff": "darkerGray",
|
||||
"thinkingMinimal": "dimGray",
|
||||
"thinkingLow": "lavender",
|
||||
"thinkingMedium": "mauve",
|
||||
"thinkingHigh": "pink",
|
||||
"thinkingXhigh": "#c896ff",
|
||||
|
||||
"bashMode": "green"
|
||||
},
|
||||
"export": {
|
||||
"pageBg": "#eff1f5",
|
||||
"cardBg": "#ccd0da",
|
||||
"infoBg": "#dcd8f5"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||
"name": "crew-catppuccin-mocha",
|
||||
"vars": {
|
||||
"bg": "#1e1e2e",
|
||||
"fg": "#cdd6f4",
|
||||
"mauve": "#cba6f7",
|
||||
"blue": "#89b4fa",
|
||||
"green": "#a6e3a1",
|
||||
"teal": "#94e2d5",
|
||||
"red": "#f38ba8",
|
||||
"peach": "#fab387",
|
||||
"yellow": "#f9e2af",
|
||||
"pink": "#f5c2e7",
|
||||
"sky": "#89dceb",
|
||||
"lavender": "#b4befe",
|
||||
"rosewater": "#f5e0dc",
|
||||
"gray": "#a6adc8",
|
||||
"dimGray": "#6c7086",
|
||||
"darkGray": "#45475a",
|
||||
"darkerGray": "#313244",
|
||||
"selection": "#313244",
|
||||
"userMsgBg": "#181825",
|
||||
"customMsgBg": "#181825",
|
||||
"toolPending": "#11111b",
|
||||
"toolSuccess": "#1a2b1f",
|
||||
"toolError": "#311d24"
|
||||
},
|
||||
"colors": {
|
||||
"accent": "mauve",
|
||||
"border": "darkGray",
|
||||
"borderAccent": "mauve",
|
||||
"borderMuted": "darkerGray",
|
||||
"success": "green",
|
||||
"error": "red",
|
||||
"warning": "peach",
|
||||
"muted": "gray",
|
||||
"dim": "dimGray",
|
||||
"text": "fg",
|
||||
"thinkingText": "gray",
|
||||
|
||||
"selectedBg": "selection",
|
||||
"userMessageBg": "userMsgBg",
|
||||
"userMessageText": "fg",
|
||||
"customMessageBg": "customMsgBg",
|
||||
"customMessageText": "fg",
|
||||
"customMessageLabel": "lavender",
|
||||
"toolPendingBg": "toolPending",
|
||||
"toolSuccessBg": "toolSuccess",
|
||||
"toolErrorBg": "toolError",
|
||||
"toolTitle": "sky",
|
||||
"toolOutput": "gray",
|
||||
|
||||
"mdHeading": "yellow",
|
||||
"mdLink": "blue",
|
||||
"mdLinkUrl": "dimGray",
|
||||
"mdCode": "green",
|
||||
"mdCodeBlock": "#94e2d5",
|
||||
"mdCodeBlockBorder": "darkGray",
|
||||
"mdQuote": "gray",
|
||||
"mdQuoteBorder": "darkGray",
|
||||
"mdHr": "darkGray",
|
||||
"mdListBullet": "mauve",
|
||||
|
||||
"toolDiffAdded": "green",
|
||||
"toolDiffRemoved": "red",
|
||||
"toolDiffContext": "gray",
|
||||
|
||||
"syntaxComment": "#6c7086",
|
||||
"syntaxKeyword": "#cba6f7",
|
||||
"syntaxFunction": "#89b4fa",
|
||||
"syntaxVariable": "#fab387",
|
||||
"syntaxString": "#a6e3a1",
|
||||
"syntaxNumber": "#fab387",
|
||||
"syntaxType": "#f9e2af",
|
||||
"syntaxOperator": "#89dceb",
|
||||
"syntaxPunctuation": "#cdd6f4",
|
||||
|
||||
"thinkingOff": "darkerGray",
|
||||
"thinkingMinimal": "#585b70",
|
||||
"thinkingLow": "mauve",
|
||||
"thinkingMedium": "lavender",
|
||||
"thinkingHigh": "pink",
|
||||
"thinkingXhigh": "rosewater",
|
||||
|
||||
"bashMode": "green"
|
||||
},
|
||||
"export": {
|
||||
"pageBg": "#1e1e2e",
|
||||
"cardBg": "#181825",
|
||||
"infoBg": "#313244"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||
"name": "crew-dark",
|
||||
"vars": {
|
||||
"bg": "#0d1117",
|
||||
"fg": "#c9d1d9",
|
||||
"crewBlue": "#58a6ff",
|
||||
"deepBlue": "#1f6feb",
|
||||
"skyBlue": "#79c0ff",
|
||||
"teal": "#39d353",
|
||||
"amber": "#e3b341",
|
||||
"coral": "#f78166",
|
||||
"rose": "#ff7b72",
|
||||
"lavender": "#d2a8ff",
|
||||
"gray": "#8b949e",
|
||||
"dimGray": "#484f58",
|
||||
"darkGray": "#30363d",
|
||||
"darkerGray": "#21262d",
|
||||
"selection": "#1c2541",
|
||||
"userMsgBg": "#161b22",
|
||||
"customMsgBg": "#161b22",
|
||||
"toolPending": "#111820",
|
||||
"toolSuccess": "#0d1f0d",
|
||||
"toolError": "#2a1215"
|
||||
},
|
||||
"colors": {
|
||||
"accent": "crewBlue",
|
||||
"border": "darkGray",
|
||||
"borderAccent": "deepBlue",
|
||||
"borderMuted": "darkerGray",
|
||||
"success": "teal",
|
||||
"error": "rose",
|
||||
"warning": "amber",
|
||||
"muted": "gray",
|
||||
"dim": "dimGray",
|
||||
"text": "fg",
|
||||
"thinkingText": "gray",
|
||||
|
||||
"selectedBg": "selection",
|
||||
"userMessageBg": "userMsgBg",
|
||||
"userMessageText": "fg",
|
||||
"customMessageBg": "customMsgBg",
|
||||
"customMessageText": "fg",
|
||||
"customMessageLabel": "lavender",
|
||||
"toolPendingBg": "toolPending",
|
||||
"toolSuccessBg": "toolSuccess",
|
||||
"toolErrorBg": "toolError",
|
||||
"toolTitle": "skyBlue",
|
||||
"toolOutput": "gray",
|
||||
|
||||
"mdHeading": "amber",
|
||||
"mdLink": "deepBlue",
|
||||
"mdLinkUrl": "dimGray",
|
||||
"mdCode": "teal",
|
||||
"mdCodeBlock": "#56d364",
|
||||
"mdCodeBlockBorder": "darkGray",
|
||||
"mdQuote": "gray",
|
||||
"mdQuoteBorder": "darkGray",
|
||||
"mdHr": "darkGray",
|
||||
"mdListBullet": "crewBlue",
|
||||
|
||||
"toolDiffAdded": "teal",
|
||||
"toolDiffRemoved": "rose",
|
||||
"toolDiffContext": "gray",
|
||||
|
||||
"syntaxComment": "#6e7681",
|
||||
"syntaxKeyword": "#ff7b72",
|
||||
"syntaxFunction": "#d2a8ff",
|
||||
"syntaxVariable": "#ffa657",
|
||||
"syntaxString": "#a5d6ff",
|
||||
"syntaxNumber": "#79c0ff",
|
||||
"syntaxType": "#ff7b72",
|
||||
"syntaxOperator": "#79c0ff",
|
||||
"syntaxPunctuation": "#c9d1d9",
|
||||
|
||||
"thinkingOff": "darkerGray",
|
||||
"thinkingMinimal": "#484f58",
|
||||
"thinkingLow": "#1f6feb",
|
||||
"thinkingMedium": "#58a6ff",
|
||||
"thinkingHigh": "#79c0ff",
|
||||
"thinkingXhigh": "#d2a8ff",
|
||||
|
||||
"bashMode": "teal"
|
||||
},
|
||||
"export": {
|
||||
"pageBg": "#0d1117",
|
||||
"cardBg": "#161b22",
|
||||
"infoBg": "#1c2541"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||
"name": "crew-dracula",
|
||||
"vars": {
|
||||
"bg": "#282a36",
|
||||
"fg": "#f8f8f2",
|
||||
"purple": "#bd93f9",
|
||||
"pink": "#ff79c6",
|
||||
"cyan": "#8be9fd",
|
||||
"green": "#50fa7b",
|
||||
"orange": "#ffb86c",
|
||||
"red": "#ff5555",
|
||||
"yellow": "#f1fa8c",
|
||||
"gray": "#6272a4",
|
||||
"dimGray": "#44475a",
|
||||
"darkGray": "#44475a",
|
||||
"darkerGray": "#21222c",
|
||||
"selection": "#44475a",
|
||||
"userMsgBg": "#343746",
|
||||
"customMsgBg": "#343746",
|
||||
"toolPending": "#343746",
|
||||
"toolSuccess": "#1e2d20",
|
||||
"toolError": "#2e1a1e"
|
||||
},
|
||||
"colors": {
|
||||
"accent": "purple",
|
||||
"border": "darkGray",
|
||||
"borderAccent": "purple",
|
||||
"borderMuted": "darkerGray",
|
||||
"success": "green",
|
||||
"error": "red",
|
||||
"warning": "orange",
|
||||
"muted": "gray",
|
||||
"dim": "dimGray",
|
||||
"text": "fg",
|
||||
"thinkingText": "gray",
|
||||
"selectedBg": "selection",
|
||||
"userMessageBg": "userMsgBg",
|
||||
"userMessageText": "fg",
|
||||
"customMessageBg": "customMsgBg",
|
||||
"customMessageText": "fg",
|
||||
"customMessageLabel": "purple",
|
||||
"toolPendingBg": "toolPending",
|
||||
"toolSuccessBg": "toolSuccess",
|
||||
"toolErrorBg": "toolError",
|
||||
"toolTitle": "cyan",
|
||||
"toolOutput": "gray",
|
||||
"mdHeading": "yellow",
|
||||
"mdLink": "purple",
|
||||
"mdLinkUrl": "dimGray",
|
||||
"mdCode": "green",
|
||||
"mdCodeBlock": "#50fa7b",
|
||||
"mdCodeBlockBorder": "darkGray",
|
||||
"mdQuote": "gray",
|
||||
"mdQuoteBorder": "darkGray",
|
||||
"mdHr": "darkGray",
|
||||
"mdListBullet": "purple",
|
||||
"toolDiffAdded": "green",
|
||||
"toolDiffRemoved": "red",
|
||||
"toolDiffContext": "gray",
|
||||
"syntaxComment": "#6272a4",
|
||||
"syntaxKeyword": "pink",
|
||||
"syntaxFunction": "purple",
|
||||
"syntaxVariable": "orange",
|
||||
"syntaxString": "yellow",
|
||||
"syntaxNumber": "purple",
|
||||
"syntaxType": "cyan",
|
||||
"syntaxOperator": "pink",
|
||||
"syntaxPunctuation": "fg",
|
||||
"thinkingOff": "darkerGray",
|
||||
"thinkingMinimal": "#44475a",
|
||||
"thinkingLow": "purple",
|
||||
"thinkingMedium": "#bd93f9",
|
||||
"thinkingHigh": "cyan",
|
||||
"thinkingXhigh": "pink",
|
||||
"bashMode": "green"
|
||||
},
|
||||
"export": {
|
||||
"pageBg": "#282a36",
|
||||
"cardBg": "#343746",
|
||||
"infoBg": "#44475a"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||
"name": "crew-gruvbox-dark",
|
||||
"vars": {
|
||||
"bg": "#282828",
|
||||
"fg": "#ebdbb2",
|
||||
"blue": "#83a598",
|
||||
"aqua": "#8ec07c",
|
||||
"green": "#b8bb26",
|
||||
"yellow": "#fabd2f",
|
||||
"orange": "#fe8019",
|
||||
"red": "#fb4934",
|
||||
"purple": "#d3869b",
|
||||
"gray": "#928374",
|
||||
"dimGray": "#928374",
|
||||
"darkGray": "#3c3836",
|
||||
"darkerGray": "#1d2021",
|
||||
"selection": "#3c3836",
|
||||
"userMsgBg": "#32302f",
|
||||
"customMsgBg": "#32302f",
|
||||
"toolPending": "#1d2021",
|
||||
"toolSuccess": "#1a2a1a",
|
||||
"toolError": "#2e1a1a"
|
||||
},
|
||||
"colors": {
|
||||
"accent": "blue",
|
||||
"border": "darkGray",
|
||||
"borderAccent": "blue",
|
||||
"borderMuted": "darkerGray",
|
||||
"success": "green",
|
||||
"error": "red",
|
||||
"warning": "yellow",
|
||||
"muted": "gray",
|
||||
"dim": "dimGray",
|
||||
"text": "fg",
|
||||
"thinkingText": "gray",
|
||||
"selectedBg": "selection",
|
||||
"userMessageBg": "userMsgBg",
|
||||
"userMessageText": "fg",
|
||||
"customMessageBg": "customMsgBg",
|
||||
"customMessageText": "fg",
|
||||
"customMessageLabel": "purple",
|
||||
"toolPendingBg": "toolPending",
|
||||
"toolSuccessBg": "toolSuccess",
|
||||
"toolErrorBg": "toolError",
|
||||
"toolTitle": "aqua",
|
||||
"toolOutput": "gray",
|
||||
"mdHeading": "yellow",
|
||||
"mdLink": "blue",
|
||||
"mdLinkUrl": "dimGray",
|
||||
"mdCode": "green",
|
||||
"mdCodeBlock": "#b8bb26",
|
||||
"mdCodeBlockBorder": "darkGray",
|
||||
"mdQuote": "gray",
|
||||
"mdQuoteBorder": "darkGray",
|
||||
"mdHr": "darkGray",
|
||||
"mdListBullet": "blue",
|
||||
"toolDiffAdded": "green",
|
||||
"toolDiffRemoved": "red",
|
||||
"toolDiffContext": "gray",
|
||||
"syntaxComment": "#928374",
|
||||
"syntaxKeyword": "red",
|
||||
"syntaxFunction": "green",
|
||||
"syntaxVariable": "orange",
|
||||
"syntaxString": "yellow",
|
||||
"syntaxNumber": "purple",
|
||||
"syntaxType": "aqua",
|
||||
"syntaxOperator": "blue",
|
||||
"syntaxPunctuation": "fg",
|
||||
"thinkingOff": "darkerGray",
|
||||
"thinkingMinimal": "#928374",
|
||||
"thinkingLow": "blue",
|
||||
"thinkingMedium": "#83a598",
|
||||
"thinkingHigh": "aqua",
|
||||
"thinkingXhigh": "purple",
|
||||
"bashMode": "green"
|
||||
},
|
||||
"export": {
|
||||
"pageBg": "#282828",
|
||||
"cardBg": "#32302f",
|
||||
"infoBg": "#3c3836"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||
"name": "crew-gruvbox-light",
|
||||
"vars": {
|
||||
"bg": "#fbf1c7",
|
||||
"fg": "#3c3836",
|
||||
"blue": "#076678",
|
||||
"green": "#79740e",
|
||||
"aqua": "#427b58",
|
||||
"yellow": "#d79921",
|
||||
"orange": "#d65d0e",
|
||||
"red": "#cc241d",
|
||||
"purple": "#8f3f71",
|
||||
"fg4": "#7c6f64",
|
||||
"gray": "#928374",
|
||||
"dimGray": "#a89984",
|
||||
"darkGray": "#d5c4a1",
|
||||
"darkerGray": "#ebdbb2",
|
||||
"selection": "#e8d9a8",
|
||||
"userMsgBg": "#ebdbb2",
|
||||
"customMsgBg": "#ebdbb2",
|
||||
"toolPending": "#ebdbb2",
|
||||
"toolSuccess": "#d9e8c0",
|
||||
"toolError": "#f0d0c8"
|
||||
},
|
||||
"colors": {
|
||||
"accent": "blue",
|
||||
"border": "darkGray",
|
||||
"borderAccent": "blue",
|
||||
"borderMuted": "darkerGray",
|
||||
"success": "green",
|
||||
"error": "red",
|
||||
"warning": "yellow",
|
||||
"muted": "gray",
|
||||
"dim": "dimGray",
|
||||
"text": "fg",
|
||||
"thinkingText": "gray",
|
||||
|
||||
"selectedBg": "selection",
|
||||
"userMessageBg": "userMsgBg",
|
||||
"userMessageText": "fg",
|
||||
"customMessageBg": "customMsgBg",
|
||||
"customMessageText": "fg",
|
||||
"customMessageLabel": "purple",
|
||||
"toolPendingBg": "toolPending",
|
||||
"toolSuccessBg": "toolSuccess",
|
||||
"toolErrorBg": "toolError",
|
||||
"toolTitle": "aqua",
|
||||
"toolOutput": "gray",
|
||||
|
||||
"mdHeading": "yellow",
|
||||
"mdLink": "blue",
|
||||
"mdLinkUrl": "dimGray",
|
||||
"mdCode": "green",
|
||||
"mdCodeBlock": "#427b58",
|
||||
"mdCodeBlockBorder": "darkGray",
|
||||
"mdQuote": "gray",
|
||||
"mdQuoteBorder": "darkGray",
|
||||
"mdHr": "darkGray",
|
||||
"mdListBullet": "blue",
|
||||
|
||||
"toolDiffAdded": "green",
|
||||
"toolDiffRemoved": "red",
|
||||
"toolDiffContext": "gray",
|
||||
|
||||
"syntaxComment": "#928374",
|
||||
"syntaxKeyword": "red",
|
||||
"syntaxFunction": "blue",
|
||||
"syntaxVariable": "orange",
|
||||
"syntaxString": "green",
|
||||
"syntaxNumber": "purple",
|
||||
"syntaxType": "aqua",
|
||||
"syntaxOperator": "aqua",
|
||||
"syntaxPunctuation": "fg",
|
||||
|
||||
"thinkingOff": "darkerGray",
|
||||
"thinkingMinimal": "dimGray",
|
||||
"thinkingLow": "purple",
|
||||
"thinkingMedium": "blue",
|
||||
"thinkingHigh": "aqua",
|
||||
"thinkingXhigh": "#1498a8",
|
||||
|
||||
"bashMode": "green"
|
||||
},
|
||||
"export": {
|
||||
"pageBg": "#fbf1c7",
|
||||
"cardBg": "#ebdbb2",
|
||||
"infoBg": "#e8d9a8"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||
"name": "crew-nord",
|
||||
"vars": {
|
||||
"bg": "#2e3440",
|
||||
"fg": "#d8dee9",
|
||||
"nord7": "#8fbcbb",
|
||||
"nord8": "#88c0d0",
|
||||
"nord9": "#81a1c1",
|
||||
"nord10": "#5e81ac",
|
||||
"nord11": "#bf616a",
|
||||
"nord12": "#d08770",
|
||||
"nord13": "#ebcb8b",
|
||||
"nord14": "#a3be8c",
|
||||
"nord15": "#b48ead",
|
||||
"gray": "#4c566a",
|
||||
"dimGray": "#4c566a",
|
||||
"darkGray": "#3b4252",
|
||||
"darkerGray": "#2e3440",
|
||||
"selection": "#434c5e",
|
||||
"userMsgBg": "#3b4252",
|
||||
"customMsgBg": "#3b4252",
|
||||
"toolPending": "#3b4252",
|
||||
"toolSuccess": "#2e3b32",
|
||||
"toolError": "#3b2e2e"
|
||||
},
|
||||
"colors": {
|
||||
"accent": "nord9",
|
||||
"border": "darkGray",
|
||||
"borderAccent": "nord9",
|
||||
"borderMuted": "darkerGray",
|
||||
"success": "nord14",
|
||||
"error": "nord11",
|
||||
"warning": "nord13",
|
||||
"muted": "gray",
|
||||
"dim": "dimGray",
|
||||
"text": "fg",
|
||||
"thinkingText": "gray",
|
||||
"selectedBg": "selection",
|
||||
"userMessageBg": "userMsgBg",
|
||||
"userMessageText": "fg",
|
||||
"customMessageBg": "customMsgBg",
|
||||
"customMessageText": "fg",
|
||||
"customMessageLabel": "nord15",
|
||||
"toolPendingBg": "toolPending",
|
||||
"toolSuccessBg": "toolSuccess",
|
||||
"toolErrorBg": "toolError",
|
||||
"toolTitle": "nord8",
|
||||
"toolOutput": "gray",
|
||||
"mdHeading": "nord13",
|
||||
"mdLink": "nord9",
|
||||
"mdLinkUrl": "dimGray",
|
||||
"mdCode": "nord14",
|
||||
"mdCodeBlock": "#a3be8c",
|
||||
"mdCodeBlockBorder": "darkGray",
|
||||
"mdQuote": "gray",
|
||||
"mdQuoteBorder": "darkGray",
|
||||
"mdHr": "darkGray",
|
||||
"mdListBullet": "nord9",
|
||||
"toolDiffAdded": "nord14",
|
||||
"toolDiffRemoved": "nord11",
|
||||
"toolDiffContext": "gray",
|
||||
"syntaxComment": "#4c566a",
|
||||
"syntaxKeyword": "nord11",
|
||||
"syntaxFunction": "nord10",
|
||||
"syntaxVariable": "nord12",
|
||||
"syntaxString": "nord14",
|
||||
"syntaxNumber": "nord15",
|
||||
"syntaxType": "nord7",
|
||||
"syntaxOperator": "nord9",
|
||||
"syntaxPunctuation": "fg",
|
||||
"thinkingOff": "darkerGray",
|
||||
"thinkingMinimal": "#4c566a",
|
||||
"thinkingLow": "nord10",
|
||||
"thinkingMedium": "nord9",
|
||||
"thinkingHigh": "nord8",
|
||||
"thinkingXhigh": "nord15",
|
||||
"bashMode": "nord14"
|
||||
},
|
||||
"export": {
|
||||
"pageBg": "#2e3440",
|
||||
"cardBg": "#3b4252",
|
||||
"infoBg": "#434c5e"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||
"name": "crew-one-dark",
|
||||
"vars": {
|
||||
"bg": "#282c34",
|
||||
"fg": "#abb2bf",
|
||||
"blue": "#61afef",
|
||||
"purple": "#c678dd",
|
||||
"red": "#e06c75",
|
||||
"orange": "#d19a66",
|
||||
"yellow": "#e5c07b",
|
||||
"green": "#98c379",
|
||||
"cyan": "#56b6c2",
|
||||
"gray": "#5c6370",
|
||||
"dimGray": "#4b5263",
|
||||
"darkGray": "#3e4451",
|
||||
"darkerGray": "#2c313c",
|
||||
"selection": "#3e4451",
|
||||
"userMsgBg": "#21252b",
|
||||
"customMsgBg": "#21252b",
|
||||
"toolPending": "#1b1f27",
|
||||
"toolSuccess": "#1f2a1d",
|
||||
"toolError": "#2d1a1e"
|
||||
},
|
||||
"colors": {
|
||||
"accent": "blue",
|
||||
"border": "darkGray",
|
||||
"borderAccent": "blue",
|
||||
"borderMuted": "darkerGray",
|
||||
"success": "green",
|
||||
"error": "red",
|
||||
"warning": "yellow",
|
||||
"muted": "gray",
|
||||
"dim": "dimGray",
|
||||
"text": "fg",
|
||||
"thinkingText": "gray",
|
||||
|
||||
"selectedBg": "selection",
|
||||
"userMessageBg": "userMsgBg",
|
||||
"userMessageText": "fg",
|
||||
"customMessageBg": "customMsgBg",
|
||||
"customMessageText": "fg",
|
||||
"customMessageLabel": "purple",
|
||||
"toolPendingBg": "toolPending",
|
||||
"toolSuccessBg": "toolSuccess",
|
||||
"toolErrorBg": "toolError",
|
||||
"toolTitle": "cyan",
|
||||
"toolOutput": "gray",
|
||||
|
||||
"mdHeading": "yellow",
|
||||
"mdLink": "blue",
|
||||
"mdLinkUrl": "dimGray",
|
||||
"mdCode": "green",
|
||||
"mdCodeBlock": "#56b6c2",
|
||||
"mdCodeBlockBorder": "darkGray",
|
||||
"mdQuote": "gray",
|
||||
"mdQuoteBorder": "darkGray",
|
||||
"mdHr": "darkGray",
|
||||
"mdListBullet": "blue",
|
||||
|
||||
"toolDiffAdded": "green",
|
||||
"toolDiffRemoved": "red",
|
||||
"toolDiffContext": "gray",
|
||||
|
||||
"syntaxComment": "#5c6370",
|
||||
"syntaxKeyword": "#c678dd",
|
||||
"syntaxFunction": "#61afef",
|
||||
"syntaxVariable": "#e06c75",
|
||||
"syntaxString": "#98c379",
|
||||
"syntaxNumber": "#d19a66",
|
||||
"syntaxType": "#e5c07b",
|
||||
"syntaxOperator": "#56b6c2",
|
||||
"syntaxPunctuation": "#abb2bf",
|
||||
|
||||
"thinkingOff": "darkerGray",
|
||||
"thinkingMinimal": "#4b5263",
|
||||
"thinkingLow": "blue",
|
||||
"thinkingMedium": "cyan",
|
||||
"thinkingHigh": "purple",
|
||||
"thinkingXhigh": "red",
|
||||
|
||||
"bashMode": "green"
|
||||
},
|
||||
"export": {
|
||||
"pageBg": "#282c34",
|
||||
"cardBg": "#21252b",
|
||||
"infoBg": "#3e4451"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||
"name": "crew-solarized-dark",
|
||||
"vars": {
|
||||
"bg": "#002b36",
|
||||
"fg": "#93a1a1",
|
||||
"blue": "#268bd2",
|
||||
"green": "#859900",
|
||||
"cyan": "#2aa198",
|
||||
"yellow": "#b58900",
|
||||
"orange": "#cb4b16",
|
||||
"red": "#dc322f",
|
||||
"magenta": "#d33682",
|
||||
"violet": "#6c71c4",
|
||||
"gray": "#657b83",
|
||||
"dimGray": "#586e75",
|
||||
"darkGray": "#073642",
|
||||
"darkerGray": "#073642",
|
||||
"selection": "#073642",
|
||||
"userMsgBg": "#073642",
|
||||
"customMsgBg": "#073642",
|
||||
"toolPending": "#003640",
|
||||
"toolSuccess": "#0f3a1c",
|
||||
"toolError": "#3a1a1d"
|
||||
},
|
||||
"colors": {
|
||||
"accent": "blue",
|
||||
"border": "darkGray",
|
||||
"borderAccent": "blue",
|
||||
"borderMuted": "darkerGray",
|
||||
"success": "green",
|
||||
"error": "red",
|
||||
"warning": "yellow",
|
||||
"muted": "gray",
|
||||
"dim": "dimGray",
|
||||
"text": "fg",
|
||||
"thinkingText": "gray",
|
||||
|
||||
"selectedBg": "selection",
|
||||
"userMessageBg": "userMsgBg",
|
||||
"userMessageText": "fg",
|
||||
"customMessageBg": "customMsgBg",
|
||||
"customMessageText": "fg",
|
||||
"customMessageLabel": "violet",
|
||||
"toolPendingBg": "toolPending",
|
||||
"toolSuccessBg": "toolSuccess",
|
||||
"toolErrorBg": "toolError",
|
||||
"toolTitle": "cyan",
|
||||
"toolOutput": "gray",
|
||||
|
||||
"mdHeading": "yellow",
|
||||
"mdLink": "blue",
|
||||
"mdLinkUrl": "dimGray",
|
||||
"mdCode": "green",
|
||||
"mdCodeBlock": "#2aa198",
|
||||
"mdCodeBlockBorder": "darkGray",
|
||||
"mdQuote": "gray",
|
||||
"mdQuoteBorder": "darkGray",
|
||||
"mdHr": "darkGray",
|
||||
"mdListBullet": "blue",
|
||||
|
||||
"toolDiffAdded": "green",
|
||||
"toolDiffRemoved": "red",
|
||||
"toolDiffContext": "gray",
|
||||
|
||||
"syntaxComment": "#586e75",
|
||||
"syntaxKeyword": "#859900",
|
||||
"syntaxFunction": "#268bd2",
|
||||
"syntaxVariable": "#cb4b16",
|
||||
"syntaxString": "#2aa198",
|
||||
"syntaxNumber": "#d33682",
|
||||
"syntaxType": "#b58900",
|
||||
"syntaxOperator": "#6c71c4",
|
||||
"syntaxPunctuation": "#93a1a1",
|
||||
|
||||
"thinkingOff": "darkerGray",
|
||||
"thinkingMinimal": "#586e75",
|
||||
"thinkingLow": "violet",
|
||||
"thinkingMedium": "blue",
|
||||
"thinkingHigh": "cyan",
|
||||
"thinkingXhigh": "magenta",
|
||||
|
||||
"bashMode": "green"
|
||||
},
|
||||
"export": {
|
||||
"pageBg": "#002b36",
|
||||
"cardBg": "#073642",
|
||||
"infoBg": "#073642"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||
"name": "crew-solarized-light",
|
||||
"vars": {
|
||||
"bg": "#fdf6e3",
|
||||
"fg": "#586e75",
|
||||
"blue": "#268bd2",
|
||||
"cyan": "#2aa198",
|
||||
"green": "#859900",
|
||||
"yellow": "#b58900",
|
||||
"orange": "#cb4b16",
|
||||
"red": "#dc322f",
|
||||
"magenta": "#d33682",
|
||||
"violet": "#6c71c4",
|
||||
"base0": "#839496",
|
||||
"base00": "#657b83",
|
||||
"gray": "#93a1a1",
|
||||
"dimGray": "#93a1a1",
|
||||
"darkGray": "#eee8d5",
|
||||
"darkerGray": "#eee8d5",
|
||||
"selection": "#e5edf5",
|
||||
"userMsgBg": "#eee8d5",
|
||||
"customMsgBg": "#eee8d5",
|
||||
"toolPending": "#eee8d5",
|
||||
"toolSuccess": "#e8efd9",
|
||||
"toolError": "#f5e0df"
|
||||
},
|
||||
"colors": {
|
||||
"accent": "blue",
|
||||
"border": "darkGray",
|
||||
"borderAccent": "blue",
|
||||
"borderMuted": "darkerGray",
|
||||
"success": "green",
|
||||
"error": "red",
|
||||
"warning": "yellow",
|
||||
"muted": "gray",
|
||||
"dim": "dimGray",
|
||||
"text": "fg",
|
||||
"thinkingText": "gray",
|
||||
|
||||
"selectedBg": "selection",
|
||||
"userMessageBg": "userMsgBg",
|
||||
"userMessageText": "fg",
|
||||
"customMessageBg": "customMsgBg",
|
||||
"customMessageText": "fg",
|
||||
"customMessageLabel": "magenta",
|
||||
"toolPendingBg": "toolPending",
|
||||
"toolSuccessBg": "toolSuccess",
|
||||
"toolErrorBg": "toolError",
|
||||
"toolTitle": "cyan",
|
||||
"toolOutput": "gray",
|
||||
|
||||
"mdHeading": "yellow",
|
||||
"mdLink": "blue",
|
||||
"mdLinkUrl": "dimGray",
|
||||
"mdCode": "green",
|
||||
"mdCodeBlock": "#2aa198",
|
||||
"mdCodeBlockBorder": "darkGray",
|
||||
"mdQuote": "gray",
|
||||
"mdQuoteBorder": "darkGray",
|
||||
"mdHr": "darkGray",
|
||||
"mdListBullet": "blue",
|
||||
|
||||
"toolDiffAdded": "green",
|
||||
"toolDiffRemoved": "red",
|
||||
"toolDiffContext": "gray",
|
||||
|
||||
"syntaxComment": "#93a1a1",
|
||||
"syntaxKeyword": "green",
|
||||
"syntaxFunction": "blue",
|
||||
"syntaxVariable": "orange",
|
||||
"syntaxString": "cyan",
|
||||
"syntaxNumber": "magenta",
|
||||
"syntaxType": "yellow",
|
||||
"syntaxOperator": "cyan",
|
||||
"syntaxPunctuation": "fg",
|
||||
|
||||
"thinkingOff": "darkerGray",
|
||||
"thinkingMinimal": "dimGray",
|
||||
"thinkingLow": "violet",
|
||||
"thinkingMedium": "blue",
|
||||
"thinkingHigh": "cyan",
|
||||
"thinkingXhigh": "#3daee9",
|
||||
|
||||
"bashMode": "green"
|
||||
},
|
||||
"export": {
|
||||
"pageBg": "#fdf6e3",
|
||||
"cardBg": "#eee8d5",
|
||||
"infoBg": "#e5edf5"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||
"name": "crew-tokyo-night",
|
||||
"vars": {
|
||||
"bg": "#1a1b26",
|
||||
"fg": "#c0caf5",
|
||||
"blue": "#7aa2f7",
|
||||
"cyan": "#7dcfff",
|
||||
"magenta": "#bb9af7",
|
||||
"purple": "#9d7cd8",
|
||||
"orange": "#ff9e64",
|
||||
"yellow": "#e0af68",
|
||||
"green": "#9ece6a",
|
||||
"green1": "#73daca",
|
||||
"red": "#f7768e",
|
||||
"gray": "#737aa2",
|
||||
"dimGray": "#565f89",
|
||||
"darkGray": "#292e42",
|
||||
"darkerGray": "#16161e",
|
||||
"selection": "#283457",
|
||||
"userMsgBg": "#1f2335",
|
||||
"customMsgBg": "#1f2335",
|
||||
"toolPending": "#16161e",
|
||||
"toolSuccess": "#1a2e1e",
|
||||
"toolError": "#2e1a1e"
|
||||
},
|
||||
"colors": {
|
||||
"accent": "blue",
|
||||
"border": "darkGray",
|
||||
"borderAccent": "blue",
|
||||
"borderMuted": "darkerGray",
|
||||
"success": "green",
|
||||
"error": "red",
|
||||
"warning": "yellow",
|
||||
"muted": "gray",
|
||||
"dim": "dimGray",
|
||||
"text": "fg",
|
||||
"thinkingText": "gray",
|
||||
"selectedBg": "selection",
|
||||
"userMessageBg": "userMsgBg",
|
||||
"userMessageText": "fg",
|
||||
"customMessageBg": "customMsgBg",
|
||||
"customMessageText": "fg",
|
||||
"customMessageLabel": "magenta",
|
||||
"toolPendingBg": "toolPending",
|
||||
"toolSuccessBg": "toolSuccess",
|
||||
"toolErrorBg": "toolError",
|
||||
"toolTitle": "cyan",
|
||||
"toolOutput": "gray",
|
||||
"mdHeading": "yellow",
|
||||
"mdLink": "blue",
|
||||
"mdLinkUrl": "dimGray",
|
||||
"mdCode": "green",
|
||||
"mdCodeBlock": "#9ece6a",
|
||||
"mdCodeBlockBorder": "darkGray",
|
||||
"mdQuote": "gray",
|
||||
"mdQuoteBorder": "darkGray",
|
||||
"mdHr": "darkGray",
|
||||
"mdListBullet": "blue",
|
||||
"toolDiffAdded": "green",
|
||||
"toolDiffRemoved": "red",
|
||||
"toolDiffContext": "gray",
|
||||
"syntaxComment": "#565f89",
|
||||
"syntaxKeyword": "magenta",
|
||||
"syntaxFunction": "blue",
|
||||
"syntaxVariable": "orange",
|
||||
"syntaxString": "green",
|
||||
"syntaxNumber": "orange",
|
||||
"syntaxType": "cyan",
|
||||
"syntaxOperator": "magenta",
|
||||
"syntaxPunctuation": "fg",
|
||||
"thinkingOff": "darkerGray",
|
||||
"thinkingMinimal": "#565f89",
|
||||
"thinkingLow": "blue",
|
||||
"thinkingMedium": "#7aa2f7",
|
||||
"thinkingHigh": "cyan",
|
||||
"thinkingXhigh": "magenta",
|
||||
"bashMode": "green"
|
||||
},
|
||||
"export": {
|
||||
"pageBg": "#1a1b26",
|
||||
"cardBg": "#1f2335",
|
||||
"infoBg": "#283457"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"/home/liph": true
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"schemaVersion":2,"version":"1.0.169","updated_at":1783421282981,"session_start":1783421209000,"uptime_ms":73981,"total_calls":0,"bytes_returned":0,"bytes_indexed":0,"bytes_sandboxed":0,"cache_hits":0,"cache_bytes_saved":0,"kept_out":0,"total_processed":0,"reduction_pct":0,"tokens_saved":0,"dollars_saved_session":0,"tokens_saved_lifetime":81408,"dollars_saved_lifetime":0.41,"by_tool":{}}
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":2,"version":"1.0.169","updated_at":1783421510078,"session_start":1783421289000,"uptime_ms":221078,"total_calls":1,"bytes_returned":861,"bytes_indexed":0,"bytes_sandboxed":0,"cache_hits":0,"cache_bytes_saved":0,"kept_out":0,"total_processed":861,"reduction_pct":0,"tokens_saved":0,"dollars_saved_session":0,"tokens_saved_lifetime":90112,"dollars_saved_lifetime":0.45,"by_tool":{"ctx_execute":{"calls":1,"bytes":861}}}
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":2,"version":"1.0.169","updated_at":1783164211593,"session_start":1783164083000,"uptime_ms":128593,"total_calls":2,"bytes_returned":14024,"bytes_indexed":5782,"bytes_sandboxed":0,"cache_hits":0,"cache_bytes_saved":0,"kept_out":5782,"total_processed":19806,"reduction_pct":29,"tokens_saved":1446,"dollars_saved_session":0.01,"tokens_saved_lifetime":32000,"dollars_saved_lifetime":0.16,"by_tool":{"ctx_fetch_and_index":{"calls":1,"bytes":3459},"ctx_search":{"calls":1,"bytes":10565}}}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user