pi/agent/skills/sloptools/SKILL.md
The user's email, contacts, personal tasks/todos, and full-CRUD Google + EWS calendars. Drives the sloptools CLI (same surface as the sloppy MCP on 127.0.0.1:9420). Use for mail (Gmail / Exchange-EWS / IMAP — list, read, send, reply, forward, flag, categorize, server-side filters, delegated mailboxes, out-of-office), calendar events (create / update / delete / RSVP / freebusy / ICS export across work + private accounts), contacts and contact groups, tasks (Google Tasks, Todoist), slopshell canvas, agent handoffs, and workspace items/artifacts/actors/triage.
npx skillsauth add krystophny/prompts sloptoolsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Local Go binary that exposes mail, calendar, contacts, tasks, canvas, handoff, items/artifacts/actors, workspace, and temp-file operations as a CLI. The same surface that the sloppy MCP daemon serves on 127.0.0.1:9420 (the MCP server is named sloppy; the CLI binary and this skill are named sloptools), but driven directly from bash instead of via an MCP client.
Use this skill whenever the user asks for anything involving:
handoff.create|peek|consume|revoke|status).sloptools/artifacts/tmpsloptools tools list # tabular: name<TAB>description
sloptools tools list --format json # full JSON Schema array (use jq to grep)
sloptools tools list --format json | jq '.[] | select(.name | test("mail_"))'
Three argument styles, pick whichever is cleanest:
# whole arguments object as JSON
sloptools tools call mail_message_list --args '{"folder":"INBOX","limit":20}'
# arguments from a file
sloptools tools call mail_send --args-file /tmp/draft.json
# repeated key=value flags (each value parses as JSON if it parses, else string)
sloptools tools call calendar_events --arg days=7 --arg query="standup"
Stdout is the tool's structuredContent (preferred) or joined text content. Exit code: 0 success, 1 tool-level error (isError=true), 2 JSON-RPC / invocation error (unknown tool, bad args).
# recent mail, compact metadata only
sloptools tools call mail_message_list --args '{"sphere":"work","folder":"INBOX","limit":10}'
sloptools tools call mail_message_list --args '{"sphere":"private","folder":"INBOX","limit":10}'
# read one full message body after choosing it from the compact list
sloptools tools call mail_message_get --args '{"sphere":"work","message_id":"<id>"}'
# send a reply
sloptools tools call mail_reply --args-file /tmp/reply.json
# next 7 days of events, compact list without descriptions
sloptools tools call calendar_events --arg days=7
# create an event
sloptools tools call calendar_event_create --args '{"calendar_id":"primary","summary":"Standup","start":"2026-04-26T09:00:00+02:00","end":"2026-04-26T09:15:00+02:00"}'
# read a contact by id
sloptools tools call contact_get --arg id="people/c1234"
# create a handoff payload for another agent
sloptools tools call handoff.create --args '{"kind":"file","payload":{"path":"/tmp/draft.md"}}'
~/.local/share/sloppy/sloppy.db; pass --data-dir if you need an alternate data dir.sphere (work / private) for read/list operations. Use account_id only when a specific account is required or when sending/mutating mail.folder:"INBOX" and limit:5 or limit:10; do not add a days filter unless the user asks for a date window.limit 5-10 for mail and calendar triage. mail_message_list is metadata-only by default; use mail_message_get for a chosen message, or include_body=true only when a full list with bodies is explicitly needed.sloptools tools call processes in parallel; the direct CLI uses the local SQLite store and serialized calls avoid lock contention.sloptools external-account list|add|update|remove.sloptools mail send and sloptools mail reply are convenience flag-driven wrappers; tools call mail_send is the direct route when arguments are already in JSON form.data-ai
Delegate a bulk-work subtask to the local Qwen via one-shot pi run. Use when the subtask is high-volume but low-complexity (file scans, log parsing, large-text summaries, repetitive transforms) so it should not burn parent-model tokens.
development
Delegate a bulk-work subtask to the local Qwen via one-shot opencode run. Use when the subtask is high-volume but low-complexity (file scans, log parsing, large-text summaries, repetitive transforms) so it should not burn parent-model tokens.
development
ETL pipeline that imports manually-downloaded Discord, LinkedIn, and WhatsApp archive ZIPs into the user's brain vaults as plain files (no APIs, no tokens, no daemons). Use when the task involves processing or querying a Discord/LinkedIn/WhatsApp data export.
tools
Render lecture videos from Beamer PDFs and pdfpc speaker notes via the slopcast pipeline (slide.pdf → segments.json → audio → clips → final/lecture.mp4) with Qwen3-TTS voice cloning and optional split-screen livecode. Use to generate, re-render, or splice slopcast lecture videos, or to author Beamer notes for slopcast.