Palest Ink (淡墨) — Activity Tracker & Daily Reporter
好记性不如烂笔头 — The faintest ink is better than the strongest memory.
Overview
Palest Ink tracks the user's daily activities automatically:
- Git operations: commits, pushes, pulls, branch switches
- Web browsing: Chrome & Safari history with page content summaries
- Shell commands: zsh/bash command history with execution duration
- VS Code edits: recently opened/edited files
- App focus: which application is in the foreground, with time duration
- File changes: files modified in watched directories
All data is stored locally at ~/.palest-ink/data/YYYY/MM/DD.jsonl.
Setup Check
Before answering any query, first check if Palest Ink is installed:
test -f ~/.palest-ink/config.json && echo "INSTALLED" || echo "NOT_INSTALLED"
If NOT installed, tell the user:
Palest Ink is not yet set up. To install, run:
bash <SKILL_PATH>/../../collectors/install.shThis will set up automatic tracking of git, browsing, and shell activity.
Then stop and wait for the user to install.
Answering Queries
Daily Report / "What did I do today?"
Run the report generator:
python3 <SKILL_PATH>/scripts/report.py --date today
For yesterday: --date yesterday
For a specific date: --date 2026-03-03
For the whole week: --week
Read the output and present it conversationally to the user. Highlight notable patterns (focused work sessions, frequent topics, etc).
Searching for Specific Activities
Use the query tool to search activity records:
python3 <SKILL_PATH>/scripts/query.py --date today --type git_commit --search "plugin"
Common query patterns:
| User asks about... | Arguments |
|---|---|
| A git commit | --type git_commit --search "keyword" |
| A webpage about X | --type web_visit --search-content "keyword" |
| Shell commands | --type shell_command --search "keyword" |
| VS Code files | --type vscode_edit --search "keyword" |
| App focus / screen time | --type app_focus --summary |
| File changes in project | --type file_change --search "project" |
| Everything today | --date today --summary |
| Date range | --from 2026-03-01 --to 2026-03-07 |
Important: When the user searches for web page content (e.g., "which website talked about homebrew"),
use --search-content instead of --search. This searches within page content summaries and keywords,
not just URLs and titles.
Status Check
Show collector status and data statistics:
python3 <SKILL_PATH>/scripts/status.py
If the output contains "CLEANUP RECOMMENDED", proactively tell the user:
"Your palest-ink data is approaching 2 GB. Would you like me to clean up older records?"
If the user agrees, first show a dry-run preview:
python3 ~/.palest-ink/bin/cleanup.py --dry-run
Present the preview (how many files, date range, records count, space to free). Then ask for explicit confirmation before actually deleting:
python3 ~/.palest-ink/bin/cleanup.py --force
Options:
--max-size N— threshold in GB (default: 2.0)--keep-days N— always keep the most recent N days (default: 30)--dry-run— preview only, no changes--force— skip the interactive prompt (use after user confirms in chat)
Fallback: Direct File Reading
If scripts fail or for simple lookups, read the JSONL files directly:
- Construct the file path:
~/.palest-ink/data/YYYY/MM/DD.jsonl - Use Grep to search:
grep "keyword" ~/.palest-ink/data/2026/03/03.jsonl - Each line is a JSON object with fields:
ts,type,source,data
Data Schema
Activity Types
git_commit— data: repo, branch, hash, message, files_changed, insertions, deletionsgit_push— data: repo, branch, remote, remote_urlgit_pull— data: repo, branch, is_squashgit_checkout— data: repo, from_ref, to_branchweb_visit— data: url, title, visit_duration_seconds, browser, content_summary, content_keywordsshell_command— data: command, duration_seconds (null if not available)vscode_edit— data: file_path, workspace, languageapp_focus— data: app_name, window_title, duration_secondsfile_change— data: path, workspace, language, event
Web Visit Content
Web visits include a content_summary field (up to 800 chars of page text) and
content_keywords (extracted keywords). This enables content-based search.
Example: if user browsed a page about "Homebrew installation guide", the content_summary will contain the actual page text, making it searchable even if the URL/title don't mention it.
Tips for Good Answers
- When showing git activity, include the commit message and changed files
- When showing web visits, include both the title and a brief content summary
- For "what did I do" questions, give a narrative summary, not just raw data
- Group related activities together (e.g., "You worked on project X, making 5 commits...")
- If the search returns too many results, help the user narrow down
- Mention the time of activities to give temporal context