Skip to main content
skill GitHub Copilot official · GitHub

signal-write — GitHub Copilot skill: what it does, how to install

Writes agent state signals as JSON and adds them to the project journal. Use it when an operator or dashboard needs structured work updates.

Install into GitHub Copilot · Skills CLI (Vercel) All methods and platforms ↓
npx skills add github/awesome-copilot --skill signal-write
Open on GitHub

What signal-write does

signal-write lets an agent report hands-up, blocked, done, checkpoint, and partnership states. These signals cover requests for operator attention, blocked work, review-ready results, meaningful progress, and coordination quality.

The primary output is a JSON file in .signals/. It stores the signal type, subtype, timestamp, agent name, self-assessment, and notes about difficulties. The agent also adds a short marker to its journal. Use run_id to pair a signal with an independent outcome, while timestamp gives the dashboard a dependable ordering field.

Install this skill when agents need structured status data for a dashboard or journal. It is unnecessary for projects that only need ordinary chat responses.

What it helps with

  • flag a blocked task for operator input
  • mark work as ready for review
  • record a meaningful progress checkpoint
  • report coordination quality from the TA

Example prompts for the agent

  • Report that the task is blocked and write a signal to `.signals/`.
  • Mark the work as `done` and add the matching journal entry.
  • Create a `checkpoint` with a self-assessment and the current `run_id`.

How to install signal-write

1Skills CLI (Vercel)

npx skills add github/awesome-copilot --skill signal-write

2GitHub CLI

gh skill install github/awesome-copilot signal-write

3Manually: put the files in place

.github/skills/signal-write/SKILL.md

From the same set554

The whole set →
git-commit official github This skill reviews Git changes, stages related files, and creates Conventional Commits. Use it when you want an agent to make one commit or split work into separate commits. GitHub Copilot 47,165installs excalidraw-diagram-generator official github Turn a plain-language description into an Excalidraw diagram. Useful for mapping processes, system structure, and relationships between entities. GitHub Copilot 31,639installs multi-stage-dockerfile official github This skill guides GitHub Copilot in writing multi-stage Dockerfiles for different languages and frameworks. Use it when the final runtime image should contain fewer build dependencies. GitHub Copilot 29,688installs documentation-writer official github Skill that turns the agent into a technical writer following the Diátaxis framework: tutorials, how-to guides, reference, and explanation. Proposes structure before writing. GitHub Copilot 27,757installs prd official github Turns a feature idea into a structured PRD with user stories, technical requirements, and risks. Use it when planning a software feature or an AI-powered one. GitHub Copilot 24,035installs refactor official github This skill reshapes existing code without changing its external behavior. Use it for gradual cleanup of large functions, duplication, weak types, and code smells. GitHub Copilot 22,321installs java-springboot official github Gives GitHub Copilot Spring Boot development practices, from project layout to tests and security. Use it when writing or reviewing Java application code. GitHub Copilot 21,272installs create-readme official github This skill reviews a project and creates a structured README.md. Use it when the repository needs clear documentation based on its actual files and code. GitHub Copilot 19,081installs

Similar

signing-entitlements official OpenAI Diagnoses macOS code signing, App Sandbox, and Gatekeeper failures. Useful when a binary or app bundle refuses to launch on macOS. CX Codex GP ChatGPT 60installs build-run-debug official OpenAI Build, launch, and debug macOS apps through a shell-first Xcode and Swift workflow when startup or runtime failures need investigation. CX Codex GP ChatGPT 60installs appkit-interop official OpenAI Builds narrow bridges between macOS SwiftUI and AppKit. Useful when you need NSWindow access, custom panels, responder chain handling, or menu validation. CX Codex GP ChatGPT 60installs web-3d-asset-pipeline official OpenAI Guides browser-game 3D assets from Blender cleanup to GLB or glTF preparation. Use it after choosing a runtime stack, when asset quality or size is the remaining issue. CX Codex GP ChatGPT 58installs window-management official OpenAI Configures macOS 15+ SwiftUI windows and scenes: toolbar chrome, drag regions, placement, and launch restoration. CX Codex GP ChatGPT 58installs swiftpm-macos official OpenAI Builds, runs, and tests SwiftPM macOS packages and executables. Use it when Package.swift is the main entry point and no Xcode project is present. CX Codex GP ChatGPT 58installs find-skills vercel-labs Discovers and installs agent skills from skills.sh directly inside your coding assistant. Handy when you need domain-specific workflows for a project. Claude Code CX Codex Cursor +1 4,000,000installs frontend-design official anthropics This skill guides intentional visual design for new interfaces and redesigns. Use it when a generic generated UI is not enough. Claude Code Claude.ai 1,025,790installs

Questions about signal-write

How do I install signal-write in GitHub Copilot?

Run npx skills add github/awesome-copilot --skill signal-write. The skill file is placed at .github/skills/signal-write/SKILL.md.

What does signal-write do?

It writes structured agent signals as JSON files in .signals/ and adds a short marker to the journal. A dashboard can read the files to show the current work state.

Why does signal-write need a timestamp?

The dashboard sorts signals by an ISO 8601 UTC timestamp. File modification time is only a fallback, so it should not be the sole clock for signal order.

Source text

SKILL.md · MIT
---
name: signal-write
description: 'Emit structured agent signals — hands-up, blocked, done, checkpoint, partnership. Signals are written as JSON to .signals/ for dashboard consumption and noted in the journal for persistence.'
---

# Agent Signals

Emit structured signals from a desk to the operator or other desks.

## When to use

- A desk needs operator attention (hands-up, blocked)
- Work is complete and ready for review (done)
- Significant progress worth noting (checkpoint)
- Two desks disagree and can't resolve it (hands-up)
- The TA is reporting coordination quality (partnership)

## Signal types

### `hands-up`
Two desks disagree and can't settle it against external facts.
This is the system working — the operator reads where desks
*disagree*, not where they perform confidence.

### `blocked`
A desk can't proceed without input — missing access, ambiguous
scope, need a decision only the operator can make.

### `done`
Work is complete and ready for review. Artifacts are on the bench.

### `checkpoint`
Significant progress worth the operator knowing about, but work
continues. Not blocked, not done — just a marker.

### `partnership`
Used by the TA (room coordinator) to report coordination quality.
Self-assessment scores reflect coordination, not code accuracy:
- **intent** — understood what the operator needed
- **confidence** — right work went to the right desks
- **accuracy** — dispatched work produced the right outcome
- **completeness** — nothing fell through the cracks

## How to emit

### 1. Write a JSON signal file to `.signals/`

This is the primary output — it's what the dashboard reads.
Create `desks/<desk-name>/.signals/<timestamp>.json`:

```json
{
  "signal_type": "execution",
  "subtype": "checkpoint",
  "timestamp": "2026-07-19T21:30:00Z",
  "run_id": "<optional; set to pair this with an outcome signal>",
  "agent_name": "<desk-name>",
  "self_assessment": {
    "intent": 4,
    "confidence": 5,
    "accuracy": 4,
    "completeness": 3
  },
  "patterns": {
    "what_worked": "description of what went well",
    "what_was_hard": "description of challenges",
    "skill_gap": "areas for improvement"
  },
  "escalation": {
    "reason": null,
    "blocked_on": null,
    "recommendation": null
  }
}
```

### Signal type mapping

| Signal    | `signal_type`   | `subtype`      |
|-----------|-----------------|----------------|
| hands-up  | `"escalation"`  | `"hands-up"`   |
| blocked   | `"escalation"`  | `"blocked"`    |
| done      | `"execution"`   | `"done"`       |
| checkpoint| `"execution"`   | `"checkpoint"` |
| partnership| `"partnership"` | `"partnership"`|

The `subtype` field preserves the specific signal state for
dashboard consumers. `signal_type` controls sort priority
(escalation → top).

> **Note:** The signals-dashboard canvas extension reads `subtype`
> when present and falls back to `signal_type` for display. If
> consuming signals in your own tooling, prefer `subtype` for the
> specific state.

> **Ordering:** include a `timestamp` (ISO 8601 UTC). The dashboard
> orders signals by it and falls back to file mtime only when it's
> absent — a git clone/checkout resets mtimes, so mtime alone is not a
> dependable clock.

### 2. Note the signal in the journal

Also append a short marker to the desk's journal for persistence:

```markdown
## <date> — [signal:<type>] <summary>
- <key details>
```

The journal note is the trail marker. The JSON file is the
machine-readable signal.

## Outcome signals (calibration)

The signals-dashboard can pair a desk's self-assessment with an
*outcome* — an independent rating of the realized result — and show
the **honesty gap** (how far the desk's confidence was from the
delivered quality). Outcome signals are optional and are usually
emitted by a reviewer/evaluator, not the desk itself.

Write them to the **same** `.signals/` directory:

```json
{
  "signal_type": "outcome",
  "run_id": "<same run_id as the signal it rates>",
  "agent_name": "<reviewer name>",
  "quality_rating": 4,
  "effort_to_merge": "minimal",
  "issues_found": ["optional short strings"],
  "timestamp": "2026-07-19T22:00:00Z"
}
```

- **`run_id`** correlates an outcome with the execution/partnership
  signal it rates — set the same `run_id` on both. If it's absent, the
  dashboard falls back to the nearest outcome emitted shortly after the
  latest signal.
- **`quality_rating`** (0–5) is the realized quality; the dashboard
  compares it to the desk's self-assessed `confidence` to compute the
  honesty gap.
- **`effort_to_merge`** — `"minimal"`, `"moderate"`, or `"significant"`.
- **`issues_found`** — optional array of short strings.

## Principles

- Signals are structured, not chatty. Short, factual, actionable.
- hands-up is not failure — it's the most valuable signal. It
  means the system caught something one frame alone would have
  missed.
- Don't signal for routine progress. Signals are for state
  changes that affect the room, not status updates.
- blocked means truly blocked — not "I'd prefer input." If you
  can proceed with a reasonable default, proceed and note it.
- Self-assessment scores should be honest, not optimistic. A 3/5
  is fine. A 5/5 on everything is suspicious.

© github · MIT · github/awesome-copilot

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor