ops-dashboard
Generate operational status pages for Briefing Book
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Generate operational status pages for Briefing Book
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Meeting-to-closure decision tracking -- harvest decisions actually made in the last week's meetings (the weekly priorities forum first), maintain a persistent ledger, verify downstream follow-through evidence, and surface quietly-dying decisions at the two-week mark.
Monthly red-team pass over the user's active big bets -- build the strongest evidence-backed case AGAINST each position they're invested in (steelman opposition, not strawman compliance), ending each bet with an honest KILL / HEDGE / PROCEED-EYES-OPEN verdict.
Weekly knowledge-graph curation loop -- freshness sweep against the week's reality, stale-edge invalidation, pending-merge queue drain, and org-chart temporal completeness against your authority model.
PM Weekly Triage
Decision radar + dossier generator -- detect decisions approaching the user in the next few days and build evidence-backed dossiers (prior positions, stakeholder map, constraining commitments, what it gates) before the moment arrives.
Draft-first email posture -- high-priority emails and key-contact unreplied threads arrive each morning WITH a reply already drafted in the user's voice. The user edits-and-sends or discards instead of starting cold. Drafts only, never sends.
| name | ops-dashboard |
| description | Generate operational status pages for Briefing Book |
You are Edwin, generating the operations dashboard -- 4 status pages covering pipeline health, indexing coverage, memory systems, and capability inventory.
Write 4 files into ~/Edwin/briefing-book/docs/11. Operations/:
Frontmatter:
---
date: <today YYYY-MM-DD>
type: ops-dashboard
auto-updated: hourly
---
For each connector (o365, google, imessage, limitless, browser, notes, sessions, atlassian, fireflies, calls, screentime, photos, documents):
~/Edwin/data/<connector>/find ~/Edwin/data/<connector>/<subtype>/ -name "*.md" | wc -lfind <dir> -name "*.md" -exec stat -f '%m %N' {} + | sort -rn | head -1 then convert epoch with date -r <epoch>Format:
## Pipeline Status
*Generated: <timestamp>*
| Source | Sub-type | Files | Last Sync | Status |
|--------|----------|------:|-----------|--------|
| o365 | mail | 4,546 | 2026-04-05 09:28 | Fresh |
...
Parse ~/Edwin/tools/indexer/.index-state.json:
files key maps relative paths to objects with {hash, chunks, indexed_at, context_done}o365, google, imessage)context_done is true (these have LLM context prefixes)Also count total markdown files on disk per source to compute embedding coverage %.
The page should have TWO tables:
Table 1: Embedding Coverage (are files in Qdrant?)
| Source | Indexed Files | Disk Files | Chunks | Embedding Coverage |
Table 2: Context Coverage (do chunks have LLM-generated context prefixes?) This is the critical quality metric. Context prefixes dramatically improve search relevance.
| Source | Files | Context Done | Context % | Chunks | Est. Context Chunks |
Format:
## Indexing Status
*Generated: <timestamp> | Embedding model: configured in indexer | Context: LLM context prefixes*
### Embedding Coverage
| Source | Indexed Files | Disk Files | Chunks | Coverage |
|--------|-------------:|----------:|-------:|---------:|
| o365 | 8,197 | 8,197 | 20,369 | 100% |
...
**Totals:** X files indexed / Y on disk -- N chunks
### Context Prefix Coverage
| Source | Files | Context Done | Context % | Priority |
|--------|------:|------------:|---------:|----------|
| fireflies | 177 | 177 | 100% | -- |
| imessage | 1,385 | 1,111 | 80% | HIGH |
...
**Totals:** X / Y files with context (Z%)
**Priority targets:** List sources under 90% that are high-value (conversational data: imessage, limitless, teams, sessions, fireflies).
Query each system:
Qdrant:
curl -s localhost:6333/collections/edwin-memory
Extract: points_count, status, segment count, vector config.
Neo4j:
curl -s -u neo4j:<password> -H "Content-Type: application/json" \
-d '{"statements":[{"statement":"MATCH (n) RETURN count(n) as nodes"},{"statement":"MATCH ()-[r]->() RETURN count(r) as rels"},{"statement":"MATCH (n) RETURN DISTINCT labels(n) as label, count(n) as cnt ORDER BY cnt DESC LIMIT 10"}]}' \
http://localhost:7474/db/neo4j/tx/commit
Ollama:
curl -s localhost:11434/api/tags
PM: Use pm_list MCP tool to get all items, then count by status and type.
Format:
## Memory Health
*Generated: <timestamp>*
### Qdrant (Vector Store)
| Metric | Value |
|--------|-------|
| Points | 153,256 |
| Status | green |
...
### Neo4j (Knowledge Graph)
| Metric | Value |
|--------|-------|
| Nodes | 751 |
| Relationships | 3,394 |
...
### Ollama (Embeddings)
| Model | Size |
|-------|------|
| qwen3-embedding:8b | 4.7 GB |
### Prospective Memory
| Status | Count |
|--------|------:|
| open | X |
| done | Y |
...
Skills: Read ~/Edwin/docs/SKILLS.md and list each skill with its trigger.
Plombery Pipelines: Read ~/Edwin/tools/plombery/app.py and extract all register_pipeline() calls. List id, name, and trigger schedule.
MCP Servers: List available local servers (Qdrant, Neo4j, PM, etc.) plus cloud servers.
PM Stats: Reuse the PM data from Page 3 -- total items, open, overdue, by type.
Format:
## Capabilities
*Generated: <timestamp>*
### Skills
| Skill | Purpose | Trigger |
|-------|---------|---------|
...
### Plombery Pipelines
| ID | Name | Schedule |
|----|------|----------|
...
### MCP Servers
**Local:**
- Qdrant (localhost:6333) -- semantic memory
...
**Cloud:**
- Atlassian -- Jira, Confluence, Bitbucket
...
### PM Summary
| Type | Open | Done | Total |
|------|-----:|-----:|------:|
...
After writing all 4 pages:
cd ~/Edwin/briefing-book && python3 scripts/obsidian-publish --all
SKILL_COMPLETE: ops-dashboard
STATUS: success | partial | error
ARTIFACTS: 4 pages in 11. Operations/
PUBLISHED: yes | no
NEEDS_ATTENTION: [any issues, or "none"]
ERRORS: [any errors, or "none"]