Open a desk
Create a workshop desk by making its folder, persistent journal, and structured signal directory so a future independent GitHub Copilot session can sit down, read the trail, and continue the workstream.
When to invoke
- "Open a new desk for this workstream."
- "This topic needs its own desk and journal."
- "Create a desk for the security scan."
- "Start a separate frame for ops work."
Desk model
| Element |
Path |
Purpose |
| Desk root |
desks/<desk-name>/ |
Stable home for one focused workstream. |
| Journal |
desks/<desk-name>/journal.md |
Persistent memory; read at session start and written at session end. |
| Signals |
desks/<desk-name>/.signals/ |
Structured JSON signal output consumed by a dashboard. |
A desk is long-running in state, not runtime. The journal carries history forward; each GitHub Copilot session is independent and becomes associated with a desk only by reading and writing that desk's files.
Procedure
- Choose a short, descriptive kebab-case name such as
security-scan, api-review, ops, or cloud-workshop.
- Check whether
desks/<desk-name>/journal.md already exists.
- If the journal exists, do not overwrite it. Resume the desk by reading the journal, unless the operator explicitly renames or archives the existing desk first.
- If the desk is new, create
desks/<desk-name>/journal.md and desks/<desk-name>/.signals/.
- Write the first journal entry with purpose, scope, initial context, and next step.
- Announce the created paths and the desk focus.
Journal requirements
The first entry must be useful to a session starting from zero.
| Field |
What to record |
| Purpose |
The desk's specific focus and why it exists. |
| Scope |
Repositories, domains, systems, or workstreams covered by this desk. |
| Initial context |
Known constraints, assumptions, relevant links inside the repository, or starting state. |
| Next step |
The first concrete action the next session should take. |
When migrating older notes, map any focus/purpose wording into the Purpose field.
Use this exact starting shape:
# <Desk Name> — Journal
## <date> — Desk opened
- **Purpose:** <what this desk focuses on>
- **Scope:** <repos, areas, or work this desk covers>
- **Next step:** <what the first session should do>
Session orientation
- The operator or TA starts a session and says "sit at the
<desk-name> desk".
- The session reads
desks/<desk-name>/journal.md to load priors.
- Work happens; the session uses
signal-write to emit signals and desk-journal to persist state at the end.
- The next session repeats from step 2.
Principles
- A desk is a peer, not a sub-agent. It has equal standing to disagree with other desks.
- The journal is the memory. Without it, the next session starts blind.
- One desk, one focus. If the scope is too broad, open two desks.
- The desk identity comes from the journal that was read, not from a persistent process.
Gotchas
- Never overwrite a live desk: an existing
journal.md means the desk already has state.
- Do not use vague names:
misc and work make future routing worse; use a topic or system name.
- Do not create runtime expectations: opening a desk initializes storage only; it does not launch or keep a process alive.
Output template
## Desk opened
**Status:** created | resumed | blocked
**Desk:** `desks/<desk-name>/`
**Journal:** `desks/<desk-name>/journal.md`
**Signals:** `desks/<desk-name>/.signals/`
### Focus
- Purpose: <desk purpose>
- Scope: <repos, systems, or topics>
- Next step: <first action>
### Notes
- <existing desk handling, archive requirement, or other important detail>
Quality gate
1---2name: desk-open-33description: Create and open a new workshop desk with a journal and .signals directory. Use when the operator wants to start a new workstream, work does not belong to an existing desk, or a topic needs its own durable frame, history, priors, and signal trail.4---56<!-- Generated from harness/github-copilot/plugins/the-workshop/skills/desk-open/SKILL.md by harness/claude-code/scripts/convert_from_copilot.py. Edit the source, not this file. -->78# Open a desk910Create a workshop desk by making its folder, persistent journal, and structured signal directory so a future independent GitHub Copilot session can sit down, read the trail, and continue the workstream.1112## When to invoke1314- "Open a new desk for this workstream."15- "This topic needs its own desk and journal."16- "Create a desk for the security scan."17- "Start a separate frame for ops work."1819## Desk model2021| Element | Path | Purpose |22| --- | --- | --- |23| Desk root | `desks/<desk-name>/` | Stable home for one focused workstream. |24| Journal | `desks/<desk-name>/journal.md` | Persistent memory; read at session start and written at session end. |25| Signals | `desks/<desk-name>/.signals/` | Structured JSON signal output consumed by a dashboard. |2627A desk is long-running in state, not runtime. The journal carries history forward; each GitHub Copilot session is independent and becomes associated with a desk only by reading and writing that desk's files.2829## Procedure30311. Choose a short, descriptive kebab-case name such as `security-scan`, `api-review`, `ops`, or `cloud-workshop`.322. Check whether `desks/<desk-name>/journal.md` already exists.333. If the journal exists, do not overwrite it. Resume the desk by reading the journal, unless the operator explicitly renames or archives the existing desk first.344. If the desk is new, create `desks/<desk-name>/journal.md` and `desks/<desk-name>/.signals/`.355. Write the first journal entry with purpose, scope, initial context, and next step.366. Announce the created paths and the desk focus.3738## Journal requirements3940The first entry must be useful to a session starting from zero.4142| Field | What to record |43| --- | --- |44| Purpose | The desk's specific focus and why it exists. |45| Scope | Repositories, domains, systems, or workstreams covered by this desk. |46| Initial context | Known constraints, assumptions, relevant links inside the repository, or starting state. |47| Next step | The first concrete action the next session should take. |4849When migrating older notes, map any `focus/purpose` wording into the Purpose field.5051Use this exact starting shape:5253```markdown54# <Desk Name> — Journal5556## <date> — Desk opened57- **Purpose:** <what this desk focuses on>58- **Scope:** <repos, areas, or work this desk covers>59- **Next step:** <what the first session should do>60```6162## Session orientation63641. The operator or TA starts a session and says "sit at the `<desk-name>` desk".652. The session reads `desks/<desk-name>/journal.md` to load priors.663. Work happens; the session uses `signal-write` to emit signals and `desk-journal` to persist state at the end.674. The next session repeats from step 2.6869## Principles7071- A desk is a peer, not a sub-agent. It has equal standing to disagree with other desks.72- The journal is the memory. Without it, the next session starts blind.73- One desk, one focus. If the scope is too broad, open two desks.74- The desk identity comes from the journal that was read, not from a persistent process.7576## Gotchas7778- **Never overwrite a live desk**: an existing `journal.md` means the desk already has state.79- **Do not use vague names**: `misc` and `work` make future routing worse; use a topic or system name.80- **Do not create runtime expectations**: opening a desk initializes storage only; it does not launch or keep a process alive.8182## Output template8384```markdown85## Desk opened8687**Status:** created | resumed | blocked88**Desk:** `desks/<desk-name>/`89**Journal:** `desks/<desk-name>/journal.md`90**Signals:** `desks/<desk-name>/.signals/`9192### Focus93- Purpose: <desk purpose>94- Scope: <repos, systems, or topics>95- Next step: <first action>9697### Notes98- <existing desk handling, archive requirement, or other important detail>99```100101## Quality gate102103- [ ] The desk name is short, descriptive, and kebab-case.104- [ ] Existing `desks/<desk-name>/journal.md` was checked before writing.105- [ ] A live desk was not overwritten.106- [ ] New desks include both `journal.md` and `.signals/`.107- [ ] The first journal entry records purpose, scope, and next step.108- [ ] The final response states whether the desk was created, resumed, or blocked.