the-agent

What we’re building — and why it’s read-only

standup — the morning briefing agent
Read-only tools · GitHub MCP · One command: /standup
Read-Only by Design Team-Shareable Schedulable

The agent pulls four things through the GitHub MCP server: commits merged to main in the last 24 hours, PRs opened / merged / still waiting on review, issues that changed state, and CI failures. Then it writes a standup in your format — yesterday / today / blockers — grounded in what actually happened, not what you remember happening.

One design decision matters more than any prompt wording: the agent gets read-only tools. No file editing, no terminal. A briefing agent that can’t change anything is an agent you can run on autopilot without a second thought — and that’s what makes it schedulable.


file-01

The agent file — .github/agents/standup.agent.md

This is the Copilot-native version. Drop it in your repo and it appears in the agent picker; typing /agent standup works in the Copilot CLI too.

.github/agents/standup.agent.md

description: “Morning standup briefing from the last 24h of repo activity”
model: claude-sonnet-4-6
tools: [“github”, “codeSearch”, “readFile”]


You are a standup briefing agent. You are READ-ONLY: never edit files, never run commands, never create issues or comments.

When invoked, gather from the GitHub MCP server for the last 24 hours:
1. Commits merged to the default branch (group by area/module, not by commit)
2. PRs: opened, merged, and awaiting review (name the reviewer it’s waiting on)
3. Issues that changed state (opened, closed, reassigned)
4. CI/Actions failures on the default branch

Then produce EXACTLY this format:

**Yesterday:** 2-4 bullets, grouped by area, plain language, no commit hashes
**Today (suggested):** 1-3 bullets inferred from open PRs and assigned issues
**Blockers:** PRs waiting >24h on review, red CI, or issues labeled “blocked” — say NONE if none

Rules: under 15 lines total. No preamble. If a change touches auth, payments, or infra, prefix it with ⚠. Write like a developer, not a press release.
✦ Why the format is in the agent, not the prompt: the output format is the contract. Locking it in the agent file means every teammate gets identical structure — which makes the briefings scannable in Slack, day after day.

file-02

The trigger — .github/prompts/standup.prompt.md

The prompt file gives everyone the one-word trigger: type /standup in Copilot Chat and it runs inside the agent above, inheriting its read-only toolset.

.github/prompts/standup.prompt.md

description: “Generate my morning standup from repo activity”
agent: standup


Generate my standup briefing for the last 24 hours. If it’s Monday, cover the weekend too (last 72 hours). Attribute work to me where I’m the author; summarize teammates’ work in one line each.

file-03

The portable version — .github/skills/standup/SKILL.md

Here’s the part that makes this “Agent of the Day” and not “Copilot Tip of the Day”: the same behavior packaged as a SKILL.md, which Claude Code, Codex, Gemini CLI, Copilot Agent Mode, and Cursor all read. One skill, every agent.

.github/skills/standup/SKILL.md

name: standup
description: “Generate a morning standup briefing from the last 24h of git and GitHub activity. Use when asked for a standup, morning briefing, or ‘what happened yesterday’.”


# Standup Briefing Skill

You are READ-ONLY for this task: no file edits, no state-changing commands.

## Steps
1. Run `git log –since=”24 hours ago” –oneline –no-merges` for local history
2. Query the GitHub MCP server for PRs and issues updated in the last 24h
3. Check the latest CI run status on the default branch
4. Group findings by area (api/, frontend/, infra/, docs/)

## Output contract
**Yesterday:** / **Today (suggested):** / **Blockers:**
Under 15 lines. ⚠ prefix for auth, payments, or infra changes. “Blockers: NONE” when clean.

In Claude Code, invoke it conversationally (“run my standup”) — or go one step further and schedule it with a Routine so the briefing is waiting for you at 8:45 every weekday:

Claude Code — schedule it with a Routine
claude
> Create a routine named morning-standup that runs weekdays at 8:45am:
  use the standup skill and write the output to standup/today.md

install

Install — three files, one commit

your-repo/ └── .github/ ├── agents/ │ └── standup.agent.md # the persona + read-only tools (File 1) ├── prompts/ │ └── standup.prompt.md # the /standup trigger (File 2) └── skills/ └── standup/ └── SKILL.md # portable version — every agent (File 3)
Terminal — commit and share with the team
git checkout -b feat/standup-agent
git add .github/agents .github/prompts .github/skills
git commit -m "feat: add standup briefing agent (read-only)"
git push -u origin feat/standup-agent

# From tomorrow morning, in Copilot Chat:
/standup

# Or in Claude Code / Codex / opencode:
> run my standup

level-up

Three variations worth stealing

For Leads
Team mode
Change the attribution rule to “one line per teammate, flag anyone with zero activity AND an in-progress issue” — a gentle early-warning for silently stuck work. Keep it private to you.
Visibility1:1 Prep
For Fridays
Weekly digest mode
Same skill, 7-day window, add a “Shipped this week” section — and you have your sprint review notes and your LinkedIn build-in-public post from the same run.
Sprint ReviewContent
For Data Teams
Pipeline health mode
Add a step: query your orchestrator (Dagster/Airflow MCP or CLI) for failed runs overnight. Your standup now covers code AND data — the first question every data-platform standup asks anyway.
DagsterData Platform

summary

Why this one works

It’s read-only, so it’s trustable

The fastest way to get comfortable with agents is to start where the blast radius is zero. A briefing agent can’t break anything — which is why it’s the right first agent for a skeptical team.

It’s portable, so it’s durable

The SKILL.md version survives your next tool switch. Write the behavior once; let Copilot, Claude Code, Codex, and opencode all run it.

It compounds

Fifteen minutes a morning is 60+ hours a year — per developer. And the format contract means the whole team’s standups become scannable, consistent, and grounded in what the repo actually says happened.

VG
Vijay Gokarn
Follow