This repository provides a skill-driven work assistant for Claude Code / Opencode / Pi.dev with:
TASKS.mdas the shared task boardCLAUDE.mdas generated working memory (hot cache)memory/as long-term structured memorydashboard.htmlas a visual UI for tasks + memory
work-startbootstraps and generatesCLAUDE.md+memory/when missing.work-updatekeeps tasks and memory current through interactive sync, using memory query for decoding and memory ingest for durable updates.task-managementdefines howTASKS.mdis structured and updated.memory-managementdefines what belongs in hot memory vs deep memory, plus the coreingest,query, andlintworkflows.
| Skill | Purpose |
|---|---|
work-start |
First-run initializer: checks/creates TASKS.md, ensures dashboard setup, and bootstraps memory (CLAUDE.md + memory/). |
work-update |
Main ongoing sync flow for tasks + memory gaps, stale task triage, and context enrichment. Uses memory query for lookup/decoding and memory ingest for durable filing. |
daily-sync |
Collects your 3 standup answers and posts them to the current team daily thread in Slack. |
task-management |
Task conventions for TASKS.md (active, waiting, someday, done) and task update behavior. |
memory-management |
Two-tier memory system: compact CLAUDE.md hot cache + detailed memory/ knowledge base, with explicit ingest, query, and lint workflows. |
memory-backup |
Syncs CLAUDE.md, TASKS.md, and memory/ with a separate private Git repo clone, including push, pull, and sync modes. |
| Skill | Purpose |
|---|---|
gmail |
Reads and searches Gmail via gog. |
google-calendar |
Reads Google Calendar via gog. |
google-drive |
Reads and searches Google Drive folders and files via gog. |
slack |
Reads and sends Slack messages via .claude/skills/slack/slack-cli.js with @slack/web-api. |
notebooklm |
Manages NotebookLM notebooks, sources, chats, and generated artifacts via notebooklm-py. |
This repository includes custom UI extensions for pi, the coding agent framework.
The Pi extension provides a continuous status bar widget and several interactive modals to manage your workflow directly within the TUI:
| Command | Purpose |
|---|---|
/tasks |
Interactive TUI modal to view TASKS.md categories, page through tasks, and mark open tasks as done (uses Space or Enter). |
/memory |
Fuzzy file browser for the memory/ directory. Provides a scrollable file preview with markdown rendering (r to toggle raw source) and fast keyboard navigation. |
/calendar |
Overlay showing upcoming Google Calendar events via gog. |
/logs |
Interactive modal to page through memory/log.md entries (Older/Newer), keeping you aware of recent context changes. |
.
├── .claude/
│ └── skills/
│ ├── dashboard.html
│ ├── work-start/
│ ├── work-update/
│ ├── daily-sync/
│ ├── task-management/
│ ├── memory-management/
│ ├── gmail/
│ ├── google-calendar/
│ ├── google-drive/
│ ├── slack/
│ └── notebooklm/
├── TASKS.md # generated/maintained by workflow
├── CLAUDE.md # generated hot-memory file
├── package.json # Node dependencies for local skill tooling
├── dashboard.html # copied to root for browser use
└── memory/
├── glossary.md
├── people/
├── projects/
├── context/
└── topics/
- Install dependencies with
npm install, then configure authentication. - Run
/work-start. - Open
dashboard.htmlfrom your file browser. - Use
/work-updateregularly to keep tasks and memory fresh. - Use
/daily-syncto post your standup update to the right Slack thread. - Optional: configure
MEMORY_BACKUP_DIRif you want to use/memory-backup.
- Claude Code / Opencode
nodepython3- Node dependencies:
npm install
gogCLI:brew install gogcli
notebooklmCLI:uv venvuv pip install --python .venv/bin/python "notebooklm-py[browser]"uv run playwright install chromiumsource .venv/bin/activate
- Open Google Cloud Console.
- Create/select a project.
- Enable these APIs:
- Gmail API
- Google Calendar API
- Google Drive API
- Configure OAuth consent screen.
- Create OAuth Client credentials (Desktop App recommended).
- Download OAuth client JSON (example:
~/Downloads/client_secret.json). - Configure
gog:gog auth credentials ~/Downloads/client_secret.json
- Authorize account:
gog auth add you@gmail.com
- Set default account (optional):
gog auth manage- or
export GOG_ACCOUNT=you@gmail.com
- Open Slack API Apps, then create/select your app.
- In OAuth & Permissions, add User Token Scopes:
channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,users:readchat:write
- Install/Reinstall app to workspace.
- Copy User OAuth token (
xoxp-...). - Create
.envfile and save your token in it:SLACK_TOKEN=xoxp-your-token
- Verify:
node .claude/skills/slack/slack-cli.js test
- Install the CLI:
uv venvuv pip install --python .venv/bin/python "notebooklm-py[browser]"uv run playwright install chromiumsource .venv/bin/activate
- Authenticate with Google:
notebooklm login
- Verify the setup:
notebooklm statusnotebooklm list --json
- If auth expires or verification fails:
notebooklm auth checknotebooklm login
For parallel workflows, prefer explicit notebook IDs (-n <id> or --notebook <id>) instead of relying on notebooklm use.
- Clone your private backup repository somewhere outside this workspace.
- Ensure the clone already exists, is a Git repo, and has push access configured.
- Add
MEMORY_BACKUP_DIRto your workspace.envfile:MEMORY_BACKUP_DIR=/your/path/to/private-backup-repo
- Run the skill:
/memory-backup- push local memory to the backup repo/memory-backup --pull- pull latest backup into this workspace/memory-backup --sync- pull latest, then push local memory/memory-backup --dry-run- preview push
MEMORY_BACKUP_DIR must point to a clean local clone of a separate private Git repo.
For two-computer use, run /memory-backup --pull or /memory-backup --sync when starting work, and /memory-backup after memory/task changes. Pull/sync refuse to overwrite local changes in CLAUDE.md, TASKS.md, or memory/.
work-updateis intentionally interactive: it asks before creating/updating tasks and memory entries.CLAUDE.mdshould remain compact; detailed context lives inmemory/.- If key files are missing, run
/work-startto repair/bootstrap the system.