A real, step-by-step build with Claude Code and the tools you already use — GitHub, GitHub Projects, Slack, Google Drive, and Notion. Each step has the prompt you paste, the file it produces, and the technical why. No Intelligence Hub required; this runs today.
Since there's no Hub yet, we map the three concepts onto Claude Code primitives you can use right now. Here's the repo you'll have at the end — your context, workers, and workflow all in version control:
atlas/ ← your git repo = the context home ├── CLAUDE.md ← imports the Frames (auto-loaded every session) ├── .mcp.json ← GitHub · Slack · Drive · Notion connectors ├── frames/ │ ├── company.frame.md ← parent Frame (inherited) │ └── atlas-program.frame.md ← FRAME · your context ├── .claude/ │ ├── agents/ │ │ ├── status-report.md ← COG · briefed worker │ │ └── risk-triage.md ← COG · briefed worker │ └── commands/ │ └── weekly-status.md ← OP · orchestration + your gate └── status/ └── 2026-W39.md ← drafted output (git history = memory)
Every Monday you open six tabs — GitHub PRs and issues, the Projects board, the Slack workstream channels, the latest Drive meeting transcript, the Notion notes — and reconcile it all into a RAG deck. The context that says what "amber" means, which workstreams exist, and who owns what lives in your head. The goal of this guide: make that context explicit and the gather repeatable — without giving up your sign-off.
One decision up front: pick a git repo to be the home for all of this. Everything we add lives in version control — that's what makes your context inheritable and your runs auditable (your stand-in for Organizational Memory until you have a Hub).
$ mkdir atlas && cd atlas && git init
$ mkdir -p frames .claude/agents .claude/commands status logs
Claude Code reaches your tools through MCP servers. Add one connector per source, each authenticated with a read-only token — least-privilege scoping is your governance layer today. This is the "tools" half of a Cog, set up once for the whole repo.
# GitHub — PRs, issues, and Projects v2 (read-only PAT)
$ claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
--header "Authorization: Bearer $GITHUB_TOKEN"
# Notion — hosted connector (read access to the Atlas workspace)
$ claude mcp add --transport http notion https://mcp.notion.com/mcp
# Slack — project channels (bot token, channels:history scope)
$ claude mcp add slack --env SLACK_BOT_TOKEN=$SLACK_BOT_TOKEN \
-- npx -y @modelcontextprotocol/server-slack
# Google Drive — meeting transcripts & docs (read-only)
$ claude mcp add gdrive -- npx -y @modelcontextprotocol/server-gdrive
$ claude mcp list # confirm all four are connected
A Frame is just a versioned markdown file that captures your context. The fastest way to write the first one is to have Claude Code read what you already produce and draft it — your past status docs and notes already encode the vocabulary and format.
Review what it drafts, fix anything wrong, and you've got your Frame:
scope: program
name: Project Atlas
version: 0.1.0
extends: frame://acme/company # parent frame, inherited
---
## Goals
Migrate billing to the new platform by Dec 15 with zero customer-facing downtime.
## Workstreams
- platform — owner: Lena (the migration itself)
- data — owner: Omar (backfill + reconciliation)
- frontend — owner: Priya (checkout UI)
## Terminology
"Milestone" = a dated, owner-bound deliverable on the critical path.
"Slip" = a milestone moved more than 3 business days.
RAG: green = on track; amber = at-risk with a recovery plan; red = blocked or slipped, needs a decision.
## Status format
RAG per workstream + top-3 risks + decisions needed. One screen, no prose.
## Norms
Status drafts Monday 9am. Blockers escalate same-day, never held for the readout.
## Sources
- platform: github://acme/billing-svc · project:Atlas/Status · slack://atlas-eng · drive://Atlas/Transcripts · notion://Atlas/Platform
- data: github://acme/billing-data · project:Atlas/Status · slack://atlas-data · drive://Atlas/Transcripts · notion://Atlas/Data
- frontend: github://acme/checkout-ui · project:Atlas/Status · slack://atlas-product · drive://Atlas/Transcripts · notion://Atlas/Frontend
Now make it inherited: Claude Code auto-loads CLAUDE.md in every session, and @-imports pull in your Frame files. After this, every session in the repo is already oriented — no re-explaining.
# CLAUDE.md — auto-loaded into every Claude Code session in this repo
@frames/company.frame.md
@frames/atlas-program.frame.md
$ git add frames CLAUDE.md && git commit -m "frame: Atlas v0.1.0" # git history = your audit trail
A Cog is a Claude Code subagent — its own system prompt, its own tool allowlist, oriented by the Frame. We'll build two: status-report (gathers signal, assigns RAG) and risk-triage (scores and de-dupes risks, assigns owners). The tools: allowlist is the governance fence; "draft only" is the rule baked into the prompt.
---
name: status-report
description: Drafts the weekly RAG status for Project Atlas from GitHub, Projects, Slack, Drive transcripts, and Notion. Use for the weekly status only.
tools: Read, Write, mcp__github__list_pull_requests, mcp__github__list_issues, mcp__github__list_project_items, mcp__slack__conversations_history, mcp__gdrive__search, mcp__gdrive__read_file, mcp__notion__search
model: sonnet
---
You are the Status-Report Cog for Project Atlas. You are oriented by
frames/atlas-program.frame.md — follow its vocabulary, RAG criteria, and status
format exactly.
Reporting window: the last 7 days ending today.
For each workstream in the frame's Sources map:
1. GitHub: merged PRs, open PRs, issues opened/closed in the window.
2. Projects: items whose status changed; flag any item past its target date.
3. Slack: scan the workstream channel for async updates and the word "blocked".
4. Drive: open the most recent transcript; extract decisions and risks.
5. Notion: read the workstream's notes page for context.
Assign RAG per workstream per the frame's criteria. Surface the top-3 risks and the
decisions needed.
Rules:
- DRAFT ONLY. Never post to Slack, Notion, or Drive. Write only under status/.
- Cite evidence for every RAG call (PR #, message link, transcript line).
- If a workstream has no signal, mark it "no-signal" — never invent status.
Everything below the frontmatter is the Cog's runtime system prompt — what orients it on every run. The tools: line is its governance boundary.
The second Cog is smaller — it only reasons over the risks the first one surfaced:
---
name: risk-triage
description: Scores, de-dupes, and assigns owners to Project Atlas risks. Invoked by the weekly-status Op.
tools: Read, mcp__github__list_issues, mcp__github__list_project_items
model: sonnet
---
You are the Risk-Triage Cog for Project Atlas, oriented by frames/atlas-program.frame.md.
Given a set of candidate risks, you:
- merge duplicates and phrase each as "risk -> impact -> next step"
- score severity (high / med / low) using the frame's definitions of "slip" and "blocked"
- assign an owner from the workstream's owner in the frame
- output the top-3 by severity
You are read-only: you never modify issues or post anywhere.
Test a Cog in isolation before wiring it in — check its RAG calls cite real evidence:
$ claude
> Use the status-report subagent to draft this week's status for the platform workstream only.
The Op is the orchestration plus your gate. In Claude Code that's a slash command that runs both Cogs, composes their output into your format, writes a draft for review, and stops. No auto-publish — that's the human checkpoint you asked to keep.
---
description: Draft this week's Project Atlas status for review (no publish)
allowed-tools: Read, Write, Task
---
Compose the Project Atlas weekly status for the window: the last 7 days ending today.
1. Use the status-report subagent to gather signal and produce RAG-per-workstream.
2. Use the risk-triage subagent to score, de-dupe, and assign owners to the risks.
3. Merge into the format defined in frames/atlas-program.frame.md:
- a RAG table per workstream, each call linked to its evidence
- the top-3 risks (severity · owner · next step)
- decisions needed
4. Write the result to status/$(date +%G-W%V).md as a DRAFT.
5. Print a 3-line summary, then STOP. Do not post to Slack, Notion, or Drive.
Run it, and review the draft it leaves behind:
$ claude
> /weekly-status
# drafts status/2026-W39.md, prints a 3-line summary, and stops. You review, edit, publish.
Want it ready before standup? Schedule a headless draft — the gate never moves, because it only ever writes the file:
# Monday 9am: draft only — leaves the file in status/ for you to review.
0 9 * * 1 cd ~/atlas && claude -p "/weekly-status" >> logs/status.log 2>&1
Here's what /weekly-status drops into status/ for your Monday review — in exactly the format your Frame defines, with evidence behind every call:
# Project Atlas — Weekly Status · 2026-W39
## RAG by workstream
- platform GREEN — on track. billing-svc cutover PR #482 merged; staging green (transcript 09-21).
- data AMBER — at-risk. backfill 2 days behind; recovery plan posted in slack://atlas-data (Omar).
- frontend RED — blocked. checkout-ui waiting on the data contract; decision needed.
## Top-3 risks
1. [HIGH] Data contract unresolved blocks frontend -> owner Omar -> lock the schema by Wed
2. [MED] Backfill slip threatens the Dec 15 milestone -> owner Omar -> add a second runner
3. [MED] Load test not yet scheduled -> owner Lena -> book a window this week
## Decisions needed
- Approve the schema freeze for the billing data contract — frontend is blocked on it.
You just built the whole execution layer — using only Claude Code and your existing tools:
| Concept | What it is here | Lives in |
|---|---|---|
| Frame | Versioned context, inherited every session. | frames/*.frame.md + CLAUDE.md |
| Cog | A briefed subagent, fenced by a tool allowlist. | .claude/agents/*.md |
| Op | Orchestration of Cogs + your review gate. | .claude/commands/weekly-status.md |
| Tools | MCP connectors, read-only. | .mcp.json |
| Org Memory | Audit trail + accumulated context. | git history of frames/ + status/ |
| Human gate | You review the draft before it ships. | the "STOP for review" step in the Op |
A functional weekly-status Op, today, with no Hub. When you stand one up later, these artifacts port cleanly: the Frame file becomes a real Frame, the subagents become Cogs, and the slash command becomes an installable Op. Same shapes — more governance and reproducibility around them.
Sensible next steps:
compliance.frame.md and import it in CLAUDE.md — the Cogs inherit it automatically.exec-brief Cog and a /qbr-pack Op for the quarterly review.New to the concepts? Start with the PM playbook or the engineer's field guide →