pos-morning
Morning brief pipeline — auto-detects MCP servers, gathers calendar + tasks + sessions + vault, synthesizes ONE focus sentence. Three output modes.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Morning brief pipeline — auto-detects MCP servers, gathers calendar + tasks + sessions + vault, synthesizes ONE focus sentence. Three output modes.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Scan your POS infrastructure — CLAUDE.md, skills, MCP servers, memory, hooks, settings. Score 0-12 with gap analysis.
Generate a personal HTML dashboard from your POS context. Auto-detects MCP, gathers data, builds terminal-aesthetic single-file page.
Build your Personal Operating System from zero — 6-phase pipeline with real MCP integrations, hooks, and operational layer.
Create a new Claude Code skill from a description. 4 template patterns, quality validation, install to chosen location.
HTML presentation generator — 2 styles: terminal (dark, monospace, scanlines) and editorial (light, serif, book-like). Single-file HTML, keyboard navigation, zero dependencies.
Use when creating AI-Bear newsletter articles for LinkedIn/Substack - triggered by requests to write, draft, or execute an article from Notion drafts, or when the user references the framework and workflow.
| name | pos-morning |
| description | Morning brief pipeline — auto-detects MCP servers, gathers calendar + tasks + sessions + vault, synthesizes ONE focus sentence. Three output modes. |
| version | 3 |
| user_invocable | true |
| arguments | [{"name":"style","description":"Output: brief (default), full, telegram","required":false}] |
Generate a morning brief by auto-detecting your integrations, gathering context from every available source, and synthesizing ONE focused sentence for the day. Works with zero setup — adapts to whatever you have connected.
This is the "aha moment" of a POS — the first time all your data sources produce a single actionable priority.
Read MCP config to know what's available BEFORE gathering data:
cat ~/.claude/mcp.json 2>/dev/null
Build integrations map from configured servers:
| Server | Capability | Loader |
|---|---|---|
| krisp | Meetings, transcripts, action items | ToolSearch: "+krisp" |
| linear | Tasks, projects, sprints | ToolSearch: "+linear list" |
| telegram | Saved messages (context clues) | ToolSearch: "+telegram get" |
| notion | Notes, databases | ToolSearch: "+notion search" |
| exa | Web context (optional) | ToolSearch: "+exa" |
Only ToolSearch servers found in mcp.json. Don't guess — if not configured, don't try.
Also check for local tools:
# Google Calendar script (bash wrapper)
GCAL_SCRIPTS=("$HOME/.claude/scripts/gcal-smart.sh" "$HOME/.claude/scripts/gcal.sh")
for s in "${GCAL_SCRIPTS[@]}"; do [ -x "$s" ] && echo "gcal: $s" && break; done
# Linear tracking cache (memory file)
find ~/.claude/projects -name "linear-tracking.md" -type f 2>/dev/null | head -1
Try each source in degradation order. Skip silently if unavailable — never error, never ask to install.
Degradation chain (stop at first success):
Krisp MCP (if in mcp.json):
ToolSearch: "+krisp meetings"
mcp__krisp__list_upcoming_meetings
mcp__krisp__search_meetings (yesterday, for recap)
Krisp also provides action items from yesterday's meetings — extract these.
Google Calendar script:
"$HOME/.claude/scripts/gcal-smart.sh" today
"$HOME/.claude/scripts/gcal-smart.sh" week # for broader context
Skip — note "no calendar" in output header.
Degradation chain:
Linear MCP:
ToolSearch: "+linear list_issues"
mcp__linear__list_issues(assignee: "me", status: "started")
mcp__linear__list_issues(assignee: "me", status: "unstarted")
Also check for recently completed (last 3 days) to show momentum.
Linear cache (memory file):
TRACKING=$(find ~/.claude/projects -name "linear-tracking.md" -type f 2>/dev/null | head -1)
Read and extract cached task list with statuses.
Local TODO:
find . -maxdepth 2 \( -name "TODO.md" -o -name "tasks.md" -o -name "TODO" \) 2>/dev/null | head -3
Skip — note "no task source".
Only if Telegram MCP detected:
ToolSearch: "+telegram get_messages"
mcp__telegram__telegram_get_messages(dialog: "me", limit: 5)
Saved messages reveal what the user was thinking about. Extract themes, don't display raw messages.
touch -t $(date +%Y%m%d)0000 /tmp/pos-today-marker 2>/dev/null
find ~/.claude/projects -name "*.jsonl" -newer /tmp/pos-today-marker -maxdepth 3 2>/dev/null | head -5
# If nothing today, check yesterday
YESTERDAY=$(date -v-1d +%Y%m%d 2>/dev/null || date -d "yesterday" +%Y%m%d 2>/dev/null)
touch -t ${YESTERDAY}0000 /tmp/pos-yesterday-marker 2>/dev/null
find ~/.claude/projects -name "*.jsonl" -newer /tmp/pos-yesterday-marker -maxdepth 3 2>/dev/null | head -5
For each session, read first 20 and last 20 lines to extract:
If working directory is a vault:
find . -name "*.md" -mmin -720 \
-not -path "./.obsidian/*" \
-not -path "./.trash/*" \
-not -path "./.smart-env/*" \
-not -path "./node_modules/*" \
2>/dev/null | head -10
mcp__krisp__search_meetings (yesterday's date range)
mcp__krisp__list_activities
Extract per-meeting:
Adjust synthesis by day:
| Day | Mode | Extra |
|---|---|---|
| Monday | Week overview | Show full week calendar, sprint status |
| Tuesday-Thursday | Standard | Focus on today's blocks |
| Friday | Wins + lessons | Show completed tasks this week, retrospective prompt |
The single most important output. Derive ONE sentence from ALL context:
Examples:
NEVER generic focus like "have a productive day" — must be specific.
┌─────────────────────────────────────────────────┐
│ MORNING BRIEF · {weekday} {date} │
│ sources: {list of what connected} │
└─────────────────────────────────────────────────┘
FOCUS
> {main priority — 1 sentence from all context}
CALENDAR ({count} events)
├─ {time} {title} ({duration})
├─ {time} {title} ({duration})
└─ {time} {title} ({duration})
TASKS ({in_progress} IP · {todo} todo)
├─ {id} {title} ◐ IP
├─ {id} {title} ◐ IP
└─ +{N} in backlog
YESTERDAY
> {1-2 sentences: what you worked on, based on sessions + meetings}
OBSERVATIONS
· {schedule insight — conflicts, free blocks, back-to-back}
· {task insight — overdue items, approaching deadlines}
· {pattern — "3 sessions on X this week, close it today?"}
Terminal output as above.
Same + additional sections:
YESTERDAY'S MEETINGS ({count})
├─ {title} {duration} {participants}
│ → action: {item}
└─ {title} {duration}
RECENT FILES ({count})
├─ {filename} {modified time ago}
└─ {filename} {modified time ago}
SAVED MESSAGES
├─ {preview of recent telegram saved}
└─ {preview}
INTEGRATIONS
├─ calendar {krisp|gcal|none}
├─ tasks {linear|cache|local|none}
├─ messaging {telegram|none}
├─ meetings {krisp|none}
└─ sessions {N found}
Compact version for Telegram Saved Messages:
#morning {weekday}
focus: {priority}
{time} {event}
{time} {event}
tasks: {count} IP · {count} todo
· {most important}
· {second}
> {one observation}
Send via:
ToolSearch: "+telegram send_self"
mcp__telegram__telegram_send_self(message: "{brief}")
If Telegram not available, fall back to brief and note it.
| Mistake | Fix |
|---|---|
| ToolSearch for server not in mcp.json | Only search servers found in config |
| Generic focus: "be productive today" | Focus MUST be specific: action + object + deadline |
| Showing raw JSONL content | Extract topic from first user message only |
| Failing when no calendar | Skip silently — brief with just tasks is valuable |
| Hardcoded MCP tool names | ToolSearch first — tool names vary across setups |
| Sending telegram without checking | Check Step 0 map — only send if detected |
| Reading entire session files | First 20 + last 20 lines is enough for topic |
| Skipping yesterday's meetings | Krisp action items are tomorrow's priorities |