pos-setup
Build your Personal Operating System from zero — 6-phase pipeline with real MCP integrations, hooks, and operational layer.
Best use case
pos-setup is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Build your Personal Operating System from zero — 6-phase pipeline with real MCP integrations, hooks, and operational layer.
Teams using pos-setup should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/pos-setup/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How pos-setup Compares
| Feature / Agent | pos-setup | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Build your Personal Operating System from zero — 6-phase pipeline with real MCP integrations, hooks, and operational layer.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# POS Setup — Build Your Personal Operating System
Sequential pipeline that builds a working Personal Operating System from zero. Auto-detects what you already have, skips completed phases, guides through each layer. Based on real production setup patterns — not generic templates.
**The 6 layers of a POS:**
1. **Context** (CLAUDE.md) — persistent identity, rules, conventions
2. **MCP** — data source connections (calendar, tasks, search, messaging)
3. **Skills** — reusable workflows as markdown files
4. **Hooks** — automation triggers (session start/end, file writes)
5. **Operations** — daily rituals, ambient tracking, quality systems
6. **Dashboard** — visual snapshot of your system
## Phase 0: State Detection
Before starting, check what exists:
```bash
CLAUDE_GLOBAL=$([ -f ~/.claude/CLAUDE.md ] && wc -l < ~/.claude/CLAUDE.md || echo 0)
CLAUDE_PROJECT=$([ -f ./CLAUDE.md ] && echo "yes" || echo "no")
MCP_SERVERS=$(cat ~/.claude/mcp.json 2>/dev/null | grep -c '"command"\|"url"' || echo 0)
SKILLS_COUNT=$(ls ~/.claude/skills/*/SKILL.md ~/.claude/skills/*.md 2>/dev/null | wc -l)
HOOKS_SET=$([ -f ~/.claude/hooks.json ] && echo "yes" || echo "no")
MEMORY_FILES=$(find ~/.claude/projects -name "MEMORY.md" 2>/dev/null | wc -l)
DASHBOARD=$([ -f /tmp/pos-dashboard.html ] && echo "exists" || echo "none")
```
Show state map:
```
POS STATE
├─ context {CLAUDE_GLOBAL}L global · project: {yes|no}
├─ mcp {MCP_SERVERS} servers
├─ skills {SKILLS_COUNT} installed
├─ hooks {yes|no}
├─ operations memory: {MEMORY_FILES} projects
└─ dashboard {exists|none}
starting from: phase {first incomplete}
```
**Phase thresholds** (skip if met):
- context: CLAUDE.md > 30 lines with named sections
- mcp: 3+ servers across 2+ categories
- skills: 5+ skills installed
- hooks: hooks.json exists with 1+ hook
- ops: memory active across 2+ projects
- dashboard: file exists and < 24h old
If `{phase}` argument provided, jump directly.
## Phase 1: Context Assembly
**Goal**: create `~/.claude/CLAUDE.md` — your persistent identity layer.
This file loads into EVERY session. It defines rules, naming, integrations, and workflows.
**If exists and > 30 lines**: read it, show sections found, ask to extend. Skip if user declines.
**If missing or thin**: ask via `AskUserQuestion`:
```
What level of context do you need?
1. Starter — formatting + naming convention + tool preferences
2. Professional — add work context, team, integrations, communication style
3. Full system — add eval protocol, context management, Linear awareness, hooks
```
### Starter template (write with Write tool):
```markdown
# Claude Code Rules
## Formatting
- **Bold** for key concepts
- Clear headers for sections
- Monospace for code, paths, commands
## File Naming
- Format: `{project} {type} description – YYYY-MM-DD.md`
- EN DASH (–) only — never em dash or hyphen
- Date ALWAYS at the end, nothing after
- Types: research, analysis, draft, rule, meeting, summary, guide, prd
- YAML frontmatter required
## Preferences
- Concise responses, no filler
- Ask before creating directories
- Edit existing files over creating new ones
```
### Professional adds:
```markdown
## Team Context
- Project: {name}
- Team: {members and roles}
- Vault: {path to shared documents}
## Communication Style
- {your rules — lowercase start, no emoji, en dash, laconic}
## Integrations
- Linear: task format (e.g., AIM-XXXX), team members
- Calendar: {Krisp MCP, gcal script, etc.}
- Messaging: {Telegram rules — forbidden channels, style}
```
### Full system adds:
```markdown
## Context Management Protocol
- Footer: `◇ ctx: {used}K | {left}K left | {pct}% | {symbol}`
- Modes: ● OK (<50%) · ◐ WARN (50-70%) · ○ CRIT (>70%)
- At CRIT: save progress, generate handoff, stop new tasks
## AI Evals Protocol
- Every response: `▫ eval: T:✓ R:✓ C:○`
- T (Text): structure, clarity, insights
- R (Rules): naming, folders, formatting
- C (Code): works, minimal, idiomatic
## Linear Awareness Layer
- Auto-detect session → task match
- Footer: `▫ linear: AIM-XXXX · title · ◐ IP`
- Suggestions: `→ /linear-action AIM-XXXX update`
## Ambient Research
- Strategic sessions: auto-launch background Exa sub-agent
- Disable: "no bg research"
```
After writing, verify:
```bash
wc -l ~/.claude/CLAUDE.md
grep "^## " ~/.claude/CLAUDE.md
```
Show: `phase 1 complete · CLAUDE.md: {lines}L · {section_count} sections`
## Phase 2: MCP Connection
**Goal**: connect data sources — at least 3 servers covering 2+ categories.
```bash
cat ~/.claude/mcp.json 2>/dev/null
```
### Recommended MCP Stack
| # | Server | Category | What It Enables | Install |
|---|--------|----------|-----------------|---------|
| 1 | **Linear** | tasks | Task tracking, /linear-action, Linear Awareness Layer | `claude mcp add linear -e LINEAR_API_KEY=lin_api_... -- npx -y @modelcontextprotocol/server-linear` |
| 2 | **filesystem** | files | Extended vault/project access | `claude mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem ~/Documents ~/notes` |
| 3 | **Exa** | search | /research, /ambient-advisor, fact-checking | Deferred — loads on demand via Claude Code |
| 4 | **Telegram** | messaging | Brief delivery, /intro, team comms | Custom: Telethon MTProto server |
| 5 | **Krisp** | meetings | Transcripts, action items, /daily-focus | Deferred — enable in Krisp app settings |
| 6 | **Playwright** | browser | Screenshots, visual cards, web scraping | Deferred — loads on demand |
| 7 | **context7** | docs | Library documentation lookup | Deferred — loads on demand |
| 8 | **Notion** | notes | Knowledge base, database access | `claude mcp add notion -e OPENAPI_MCP_HEADERS='...' -- npx -y @notionhq/notion-mcp-server` |
| 9 | **Netlify** | deploy | Deploy management from terminal | `claude mcp add netlify -e NETLIFY_PERSONAL_ACCESS_TOKEN=... -- npx -y @netlify/mcp` |
### MCP Categories and POS Functions
| Category | POS Function | Impact |
|----------|-------------|--------|
| **Tasks** (Linear/Jira) | Sprint awareness, status updates | Critical — feeds Linear Awareness Layer |
| **Calendar** (Krisp/gcal) | Time awareness, schedule conflicts | High — drives morning brief focus |
| **Search** (Exa/context7) | Research, fact-checking, docs | High — powers /research, /ambient-advisor |
| **Messaging** (Telegram) | Brief delivery, team comms | Medium — output beyond terminal |
| **Files** (filesystem) | Cross-project file access | Medium — extends reach of all skills |
| **Browser** (Playwright) | Visual verification, screenshots | Medium — visual card generation |
| **Notes** (Notion) | Knowledge base queries | Optional — depends on note system |
| **Deploy** (Netlify) | CI/CD from terminal | Optional — for web projects |
**Deferred servers** (Exa, Krisp, Playwright, context7) load on demand — no `claude mcp add` needed. Just ensure the service is available.
Show state and gaps:
```
MCP SERVERS ({count})
├─ {name} {category} ✓ configured
└─ ...
CATEGORIES: {count}/8
MISSING:
· {category} — {function} — {install hint}
```
**Do NOT run install commands directly** — show for user. They need API keys.
Show: `phase 2 complete · {count} servers · {categories} categories`
## Phase 3: Skills Installation
**Goal**: install CTRL pack + user's first custom skill.
### 3.1 Install CTRL Pack
```bash
for skill in pos-audit pos-morning pos-dashboard-gen pos-skill-factory; do
[ -f ~/.claude/skills/$skill/SKILL.md ] && echo "$skill: ✓" || echo "$skill: missing"
done
```
For missing skills:
```bash
git clone https://github.com/ai-mindset-org/pos-sprint.git /tmp/pos-sprint
bash /tmp/pos-sprint/skill-pack/install.sh
```
### 3.2 Skill Patterns (teach the user)
Skills follow 4 patterns:
| Pattern | Structure | Examples |
|---------|-----------|---------|
| **A: Audit** | scan → score → suggest | /pos-audit, vault-cleanup |
| **B: Pipeline** | detect → gather → synthesize → output | /pos-morning, daily-focus, research |
| **C: Generator** | parse input → build artifact → write | /pos-dashboard-gen, deck |
| **D: Integrator** | load MCP → payload → preview → execute | /linear-action, telegram |
Skills that use MCP ALWAYS:
1. Read `~/.claude/mcp.json` to detect servers
2. `ToolSearch: "+server_name"` to load tools
3. Call MCP functions
4. Graceful degradation: MCP unavailable → bash fallback → skip
### 3.3 First Custom Skill
After CTRL is installed, ask:
```
What's one thing you do repeatedly?
Examples from real POS setups:
· "summarize my meetings and send to telegram"
· "check my overdue tasks and nag me"
· "compress a long document to key points"
· "generate a weekly review from sessions"
```
Invoke `/pos-skill-factory` with their idea — this creates their first personal skill.
Show: `phase 3 complete · {count} skills · first custom: /{name}`
## Phase 4: Hooks Setup
**Goal**: automation triggers on session events.
### Recommended Hooks
**1. Linear Awareness (SessionStart)**
```bash
#!/bin/bash
# ~/.claude/hooks/linear-sync.sh
# Read cached Linear tasks (<200ms, no API call)
TRACKING=$(find ~/.claude/projects -name "linear-tracking.md" -type f 2>/dev/null | head -1)
[ -z "$TRACKING" ] && exit 0
IP_COUNT=$(grep -c "◐ IP" "$TRACKING" 2>/dev/null || echo 0)
TODO_COUNT=$(grep -c "○ Todo" "$TRACKING" 2>/dev/null || echo 0)
echo "--- Linear Awareness Layer ---"
echo "tasks: $IP_COUNT IP · $TODO_COUNT todo"
```
**2. Ambient Research (SessionStart)**
```bash
#!/bin/bash
# ~/.claude/hooks/ambient-advisor-start.sh
STATE="/tmp/claude-research-state.json"
[ -f "$STATE" ] && LAST=$(stat -f %m "$STATE" 2>/dev/null) || LAST=0
NOW=$(date +%s)
[ $((NOW - LAST)) -lt 600 ] && exit 0 # skip if <10min
echo "--- Ambient Advisor ---"
echo "Auto-trigger: ON. Launch background research on strategic topics."
```
**3. Open in Obsidian (PostToolUse:Write)**
```bash
#!/bin/bash
# ~/.claude/hooks/open-in-obsidian.sh
# Auto-open .md files in Obsidian after Write
FILE="$1"
VAULT_ROOT="$HOME/path/to/vault"
[[ "$FILE" == *.md ]] && [[ "$FILE" == "$VAULT_ROOT"* ]] || exit 0
REL="${FILE#$VAULT_ROOT/}"
open "obsidian://open?vault=notes&file=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$REL'))")"
```
**4. Session End Logging (SessionEnd)**
```bash
#!/bin/bash
# ~/.claude/hooks/linear-session-end.sh
# Log AIM-XXXX references from session to linear-tracking.md
```
### Setup
Ask via `AskUserQuestion` with `multiSelect: true`:
```
Which hooks? (select all that apply)
1. Linear Awareness — task context at session start (Recommended)
2. Ambient Research — auto background research on strategic topics
3. Obsidian Integration — auto-open written .md files
4. Session Logging — log Linear task references at session end
```
For each: create script in `~/.claude/hooks/`, add to hooks config, verify.
**Most users: start with just Linear Awareness** — lowest friction, highest value.
Show: `phase 4 complete · {count} hooks active`
## Phase 5: Operational Layer
**Goal**: activate daily systems — morning brief, settings, quality eval.
### 5.1 Morning Brief Demo
Run `/pos-morning` — the **"aha moment"**. All data sources synthesized into one focus sentence.
The brief auto-detects MCP servers and degrades gracefully:
- Calendar: Krisp MCP → gcal script → skip
- Tasks: Linear MCP → cache → local TODO → skip
- Messages: Telegram saved → skip
- Sessions: recent JSONL scan
### 5.2 Settings
```bash
cat ~/.claude/settings.json 2>/dev/null
```
Recommend:
| Setting | Value | Why |
|---------|-------|-----|
| `defaultMode` | `"dontAsk"` | Full autonomy for trusted tools |
| `statusLine` | `"~/.claude/statusline.sh"` | Custom project-aware statusline |
### 5.3 Auto Memory
Verify memory is working:
```bash
find ~/.claude/projects -name "MEMORY.md" -type f 2>/dev/null
```
Memory activates after a few sessions. It accumulates patterns and project context.
### 5.4 Eval Protocol (score 8+)
For advanced users, add self-evaluation to every response:
```
▫ eval: T:✓ R:✓ C:○
```
T (Text quality), R (Rules compliance), C (Code quality). Binary pass/fail.
Show: `phase 5 complete · morning: tested · settings: ✓ · memory: {status}`
## Phase 6: Dashboard Generation
Run `/pos-dashboard-gen` for a visual snapshot:
```
generating dashboard...
├─ gathering: calendar, tasks, sessions, skills, docs
├─ building: terminal aesthetic, responsive grid
└─ writing: /tmp/pos-dashboard.html
→ open /tmp/pos-dashboard.html
```
Show: `phase 6 complete · dashboard at /tmp/pos-dashboard.html`
## Final Output
```
┌─────────────────────────────────────────────────────┐
│ POS SETUP COMPLETE · {date} │
└─────────────────────────────────────────────────────┘
INFRASTRUCTURE
├─ context ~/.claude/CLAUDE.md {lines}L
├─ mcp {count} servers {categories}
├─ skills {count} installed +{custom} custom
├─ hooks {count} active {types}
├─ operations memory: ✓ morning: ✓ eval: {on|off}
└─ dashboard /tmp/pos-dashboard.html
POS SCORE: {score}/12
──────────────────────────────────────────────────
DAILY WORKFLOW:
1. /pos-morning → focus sentence for the day
2. work on tasks → Linear Awareness tracks context
3. /pos-audit → weekly health check
4. /pos-skill-factory → when you spot a repeating workflow
RESOURCES:
· skill pack: github.com/ai-mindset-org/pos-sprint/tree/main/skill-pack
· dashboard: ai-mindset-org.github.io/pos-sprint/
· community: submit skills via PR to pos-sprint repo
```
## Principles
- **Auto-detect and skip**: never repeat completed work
- **Show, don't just tell**: each phase produces a visible artifact
- **User controls execution**: show MCP commands, don't run them
- **"Aha moment"**: Phase 5 morning brief is the turning point
- **Graceful partial runs**: any subset of phases is useful
- **Real patterns**: every recommendation comes from tested practice
## Common Mistakes
| Mistake | Fix |
|---------|-----|
| Running all phases when setup exists | Always detect state first, skip completed |
| Installing MCP without asking | Show commands, user runs — they need API keys |
| Skipping first custom skill | This is the "aha moment" — POS becomes theirs |
| Generic CLAUDE.md | Ask about user's actual work, team, workflows |
| Not testing /pos-morning | The morning brief demo makes POS click |
| Treating hooks as required for beginners | Start with 0-1 hooks, add after a week |
| Hardcoded paths | Always use `~` or `$HOME` |Related Skills
writing-content
Интерактивный процесс написания текстов для вайб-маркетинга на основе Julian Shapiro framework. **Новые возможности (v2.0):** - Research & Gap Analysis (Perplexity → WebSearch fallback) - Scoring 0-5 вместо binary (Novelty + Resonance + Hook + Clarity) - AI-Slop Detection на всех этапах (10 типов patterns) - 3 варианта intro с self-scoring - Markdown export всех промежуточных результатов **Русские triggers:** "напиши пост по шапиро", "написать статью по фреймворку шапиро", "создай текст в стиле julian shapiro", "помоги написать контент по методу shapiro", "контент по julian shapiro фреймворку", "пост по julian shapiro", "напиши в стиле шапиро" **English triggers:** "write content using julian shapiro framework", "create post with shapiro method", "write article shapiro style", "help with julian shapiro writing" **Generic triggers:** "напиши статью", "помоги написать контент", "создай текст", "начать писать", "хочу написать пост", "нужна помощь с текстом", "write content", "write article", "создай контент", "придумай идею для статьи", or requests help with content creation process.
YT Transcribe — YouTube → Whisper → Obsidian
Транскрибирует YouTube-видео через mlx-whisper (Apple Silicon, Metal-native) с параллельными чанками.
/tg-saved v2 — Telegram Saved Messages → Deep Analysis → Obsidian
## Назначение
summarize-comments
Делает LLM-выжимку из комментариев менеджеров об одном или нескольких подрядчиках. Используй этот скилл когда нужно понять что говорят менеджеры о конкретном подрядчике, или получить JSON с выжимкой для дальнейшей обработки.
skill-security
This skill activates when the user mentions "security audit", "skill audit", "проверка безопасности скилла", "аудит скилла", "skill-security", "проверить скилл", "пересобрать скилл", "rebuild skill", "security check", "dual memory audit", "credential isolation check". Also activates on /skill-security command. Use this skill when the user wants to audit, validate, or rebuild any Claude Code skill for security compliance.
session-status
Statusline shown in Claude Code UI status bar via settings.json. No action needed in responses.
session-save
Compress and save current session context for handoff to next session. Use when: (1) context pressure >50%, (2) user says "сохрани сессию", "session save", "checkpoint", (3) before ending a long productive session, (4) switching to a different task mid-session. Supports named sessions: /session-save vpn-fix
continue-session
Restore context from a named or latest session checkpoint. Use when: (1) user says "продолжи", "continue", "что было в прошлой сессии", (2) starting work after a crash or context overflow, (3) "resume", "восстанови контекст", "где я остановился". Supports named sessions: /continue vpn-fix
compress
Info-Compressor: compress text/context by 60-70% without losing meaning. Use when: (1) context pressure >50%, (2) user says "сжать", "compress", "compact", (3) need to fit more context into remaining window, (4) preparing handoff blob for next session.
seo-strategist
Strategic SEO planning and analysis toolkit for site-wide optimization, keyword research, technical SEO audits, and competitive positioning. Complements content-creator's on-page SEO with strategic planning, topic cluster architecture, and SEO roadmap generation. Use for keyword strategy, technical SEO audits, SERP analysis, site architecture planning, or when user mentions SEO strategy, keyword research, technical SEO, or search rankings.
roi-razvitie-draft
Generates a draft meeting document for the weekly "Roi Развитие" (Wednesday, product Roi Navigator). Use when the user asks for a draft for the meeting, for Wednesday's doc, for "Roi Развитие", or for the weekly team meeting agenda.
project-knowledge-base
Collects, structures and maintains a Project Knowledge Base (PKB.md) in Obsidian for a marketing agency. Aggregates data from Google Drive, Gmail, Telegram (group chat and DMs via MTProto), moo.team tasks/comments, and local Obsidian meeting transcripts. Uses async parallel collection and a two-stage LLM pipeline for init. Use when the user wants to initialize, update or enrich a project's knowledge base, mentions PKB, project knowledge base, синхронизация проекта, база знаний проекта, init_project_knowledge, update_project_knowledge, or ad_hoc_add_context.