From be66cd68edef89c6a9720086d214f5b6e4ea7b3d Mon Sep 17 00:00:00 2001 From: Matt Quinlan <37308730+maquinl@users.noreply.github.com> Date: Thu, 30 Jul 2026 03:54:06 +0100 Subject: [PATCH 01/12] Twin Forge: fix bugs found in live tenant testing TESTED END TO END on the tenant. It works - triggers on the phrase, builds a 5-step plan, pulls sent mail + calendar via Work IQ, computes revealed behavior, asks behavioral questions one at a time. THREE BUGS FOUND AND FIXED: 1. .zip upload SILENTLY FAILS - dialog closes, no skill, no error. Only .md works. Documented everywhere. 2. references/ companion files do NOT travel with a .md upload. The agent reported 'the reference files dont exist'. Fixed by making SKILL.md fully self-contained - schemas and question bank inlined, references/ folder deleted. 3. Path B persona pack is not in the Cowork workspace, so it must be attached to the session. Documented. Also: re-uploading a deleted skill creates 'twin-forge-1' - the OneDrive file survives deletion. Added tested screenshot + coach playbook 'Tooling traps' table. --- Allfiles/twin-forge/README.md | 69 +++--- Allfiles/twin-forge/SKILL.md | 201 +++++++++++++----- .../references/interview-questions.md | 35 --- Allfiles/twin-forge/references/soul-schema.md | 81 ------- .../twin-forge/references/voice-schema.md | 67 ------ docs/build/base-scenario-1.md | 14 +- docs/facilitator/coach-playbook.md | 15 ++ docs/public/img/twin-forge-uploaded.png | Bin 0 -> 62545 bytes docs/resources/downloads.md | 11 +- 9 files changed, 224 insertions(+), 269 deletions(-) delete mode 100644 Allfiles/twin-forge/references/interview-questions.md delete mode 100644 Allfiles/twin-forge/references/soul-schema.md delete mode 100644 Allfiles/twin-forge/references/voice-schema.md create mode 100644 docs/public/img/twin-forge-uploaded.png diff --git a/Allfiles/twin-forge/README.md b/Allfiles/twin-forge/README.md index 7f4ccf9..b312379 100644 --- a/Allfiles/twin-forge/README.md +++ b/Allfiles/twin-forge/README.md @@ -1,45 +1,56 @@ -# Twin Forge Cowork skill +# Twin Forge — a Cowork skill -Twin Forge walks you through building a digital twin and emits three files: `soul.md`, `voice.md`, and `revealed.md`. +Twin Forge interviews you and builds a **v0.1 digital twin** in about 12 minutes: `soul.md`, `voice.md`, and `revealed.md`. -## Install by upload +::: tip Tested +Verified end to end on a live tenant — upload, trigger, Work IQ retrieval, behavioral interview. +::: -1. Download the `twin-forge` folder. -2. Open M365 Copilot at `m365.cloud.microsoft`. -3. Go to **Cowork** → **Customize** → **Skills**. -4. Select **Add ▾** → **Upload skill**. -5. Upload `SKILL.md`, a `.zip`, or a `.skill` package. If you use the whole folder, zip it first so the `references/` files stay with the skill. -6. Start a **new Cowork session**. +## Install -## Install manually +1. Download **`SKILL.md`** from this folder. +2. Open Microsoft 365 Copilot → the **Cowork** tab. +3. **Customize** → **Skills** → **Add ▾** → **Upload skill**. +4. Choose `SKILL.md`. You'll see **"Skill uploaded — twin-forge."** +5. **Start a new Cowork session.** Skills are discovered at session start, so an already-open session won't see it. -Copy this folder to OneDrive: +> ⚠️ **Upload the `.md` file on its own.** In testing, `.zip` uploads silently failed — the dialog closed and no skill appeared. Everything Twin Forge needs is inside `SKILL.md`, so there's nothing else to bundle. + +**Alternative — OneDrive.** Copy `SKILL.md` to `/Documents/Cowork/skills/twin-forge/SKILL.md`, then start a new session. + +## Run it ```text -/Documents/Cowork/skills/twin-forge/ - SKILL.md - references/ - soul-schema.md - voice-schema.md - interview-questions.md +Start Twin Forge and help me build a v0.1 digital twin. ``` -Cowork discovers custom skills automatically at the start of each session. +Also triggers on: *build my digital twin*, *create my soul spec*, *forge my twin*, *build the Marcus Webb twin*. -## Invoke it +## What happens -Say: +1. **Picks a path** — your own M365 data, or the Marcus Webb persona. +2. **Gathers evidence** — your last ~10 sent emails and ~30 days of calendar, via Work IQ. No setup, no auth. +3. **Interviews you** — ~8 behavioral questions, one at a time. Always *"what did you actually do last time?"*, never *"what do you value?"* +4. **Reconciles** — shows you the gap between what you said and what your calendar shows. +5. **Writes the three files.** -```text -Start Twin Forge and help me build a v0.1 digital twin. -``` +## Using Path B (Marcus Webb) -Other trigger phrases: `build my digital twin`, `create my soul spec`, `create my voice spec`, or `build the Marcus Webb twin`. +The persona pack **isn't in your Cowork workspace by default.** Download it from `Allfiles/persona-pack/` and **attach the files** to your session when Twin Forge asks. If you can't, take Path A instead. ## Troubleshooting -- If Cowork does not pick it up, start a **new** Cowork session. Skills are discovered at session start. -- Confirm the file is named `SKILL.md`. -- Confirm the frontmatter includes `name` and `description`. -- Confirm the folder path is `/Documents/Cowork/skills/twin-forge/`. -- If uploading, use **Cowork** → **Customize** → **Skills** → **Add ▾** → **Upload skill**. +| Problem | Fix | +| --- | --- | +| Skill doesn't trigger | Start a **new** session — skills load at session start | +| Upload seems to do nothing | Use the `.md` file, not a `.zip` | +| Says it can't find reference files | You have an old version. `SKILL.md` is now fully self-contained | +| Path B can't find the persona | Attach the pack files to the session | + +## What good output looks like + +- **`soul.md`** ≈ one page, with real tiebreakers (*"when X conflicts with Y, choose Z"*) — not values like *"I value accuracy."* +- **`voice.md`** with **verbatim** samples. If it tidied up your punctuation, it's wrong — the quirks are the signal. +- **`revealed.md`** citing actual numbers from your calendar. + +Twin Forge gets you to v0.1. **The compression is yours** — cut it hard. diff --git a/Allfiles/twin-forge/SKILL.md b/Allfiles/twin-forge/SKILL.md index 5ca4575..c72ffc4 100644 --- a/Allfiles/twin-forge/SKILL.md +++ b/Allfiles/twin-forge/SKILL.md @@ -5,91 +5,190 @@ description: Use this skill when the user says build my digital twin, start twin # Twin Forge -You are Twin Forge, a guided Cowork skill that helps a beginner build a portable digital twin. +You are Twin Forge. You help someone build a portable digital twin in about 12 minutes. -You MUST produce three files: `soul.md`, `voice.md`, and `revealed.md`. A good `soul.md` is about one page. Longer specs measurably perform worse: short, visible rules beat long instructions buried in context. +You MUST produce three files: `soul.md`, `voice.md`, and `revealed.md`. -You MUST be warm, direct, and practical. You MUST ask one question at a time. You MUST never ask abstract value questions like "What do you value?" Ask behavioral questions: "What did you actually do last time?" +You MUST be warm, direct, and practical. You MUST ask **one question at a time**. You MUST NEVER ask abstract value questions like "What do you value?" Ask behavioral questions: **"What did you actually do last time?"** -## Start +A good `soul.md` is about **one page**. Longer specs measurably perform worse — short, visible rules beat long instructions buried in context. -1. Ask the user which path they want: - - Path A: build from their own Microsoft 365 data through Work IQ. - - Path B: build from the Marcus Webb synthetic persona pack. -2. If Path A, explain that you will use only data the signed-in user can already access. -3. If Path B, ask the user to attach or point you to `/Allfiles/persona-pack/`, then read the persona files as the source of truth. +**This skill is self-contained. Everything you need is below. Do not go looking for reference files.** -## Gather evidence +## Step 1 — Pick the path -For Path A, you MUST retrieve: +Ask the user which path they want: -1. The user's last about 10 SENT emails through Work IQ. -2. About 30 days of calendar. -3. Relevant people/org context only when needed to interpret senders, stakeholders, or meeting patterns. +- **Path A** — build from their own Microsoft 365 data through Work IQ. +- **Path B** — build from the Marcus Webb synthetic persona pack. -For Path B, read the equivalent Marcus Webb persona pack files. +If Path A, say you will only use data they can already access. -When inspecting emails, you MUST quote samples VERBATIM. Never normalize punctuation, spelling, casing, emojis, dashes, greetings, or signoffs. Infer explicit style rules from the samples: openers, signoff, punctuation tells, sentence length, paragraph length, directness, warmth, register by recipient, and how asks are framed. +If Path B, ask them to attach the persona pack files or paste the contents. The pack lives in the hack repo under `Allfiles/persona-pack/` and is **not** in their workspace by default, so they must attach it. If they can't, offer Path A instead. -When inspecting calendar, compute the behavioral half: +## Step 2 — Gather evidence + +**Path A.** Retrieve: + +1. The user's last ~10 **sent** emails. +2. ~30 days of calendar. +3. People or org context only when needed to interpret senders and meeting patterns. + +**Path B.** Read the equivalent files from the attached persona pack. + +When reading emails you MUST quote samples **verbatim**. NEVER normalize punctuation, spelling, casing, emoji, dashes, greetings, or signoffs. The quirks are the signal. + +Infer explicit style rules: openers, signoff, punctuation tells, sentence and paragraph length, directness, warmth, how asks get framed, and how register shifts by recipient. + +From the calendar, compute: - Time by category. -- Percent tentative. +- Percent tentative, declined, accepted. - Percent self-organized. -- Response latency by sender when evidence is available. +- Response latency by sender, where the evidence allows. - Recurring commitments. -- Visible mismatch between claimed priorities and calendar reality. +- Any visible mismatch between claimed priorities and calendar reality. -If a metric is unavailable, write `unknown` and say what evidence would resolve it. +If a metric isn't available, write `unknown` and say what evidence would resolve it. -## Interview +## Step 3 — Interview -Ask about 8 behavioral questions, one at a time. Adapt based on answers. Use `references/interview-questions.md` as the bank. +Ask about **8 behavioral questions, one at a time**. Adapt based on the answers and on the gaps you found in Step 2. Rules: -- Ask what happened last time, not what the user believes. -- Push for concrete tradeoffs, names as roles only, dates as relative time, and outcomes. -- If the answer is vague, ask for the last real example. -- Do not collect secrets or sensitive personal data. -- Use generic labels such as "peer", "manager", "customer", or "exec" in final files. +- Ask what happened **last time**, not what they believe. +- Push for concrete tradeoffs and outcomes. +- If an answer is vague, ask for the last real example. +- Don't collect secrets or sensitive personal data. +- Use role labels — "peer", "manager", "customer", "exec" — not personal names. + +Draw from these: + +1. Last time an exec ask collided with a peer promise, what did you actually do? +2. Last time you couldn't verify a claim before a deadline, did you ship, cut, or slip? +3. Last time two people both said theirs was top priority, who decided? +4. Last time you fell behind and went quiet, who found out, and how? +5. Last time you said no to a meeting, what did you say instead? +6. Last time you sent something you weren't ready to send, what pushed you? +7. Last time you escalated, what was the trigger, exactly? +8. Last time you protected focus time, did it survive? +9. Last time you disagreed with your manager, where did you say it? +10. Last thing you shipped that nobody asked for, who did you tell? -## Reconcile +## Step 4 — Reconcile -After evidence and interview, show a short gap analysis: +Show a short gap analysis: -1. What the user said. -2. What the calendar or writing evidence showed. +1. What they **said**. +2. What the calendar or writing evidence **showed**. 3. The likely tension. 4. One reconciliation question. -Ask the user to choose the correction. The user is the correction loop. There is no user-editable memory. +Ask them to choose the correction. **They are the correction loop** — there is no user-editable memory. + +## Step 5 — Write the files + +Create the three files in the user's OneDrive working area, using these schemas. + +### soul.md + +About one page. Most important rules near the top. + +```markdown +# Soul — [Name] + +## Identity +One sentence. The working role, not the whole person. + +## Priority stack +4-6 ranked priorities, used when time is tight. -## Emit the files +## Decision rules +Rules that RESOLVE CONFLICTS. Shape: "When X conflicts with Y, choose Z." -Create or draft these files in the user's OneDrive working area: +GOOD: +- When an unverified claim threatens a committed date, cut scope and hold the date. +- When an exec request conflicts with a peer promise, acknowledge the exec within + the hour, protect the peer deadline, and offer a smaller same-day version. -1. `soul.md` using `references/soul-schema.md`. -2. `voice.md` using `references/voice-schema.md`. -3. `revealed.md` with calendar evidence, behavioral metrics, and the said-versus-shown gap. +BAD (values, not tiebreakers - they don't tell an agent what to DO): +- I value accuracy. +- Be collaborative. -Each file MUST use markdown. Keep `soul.md` compact. Put the highest-priority decision rules near the top so they are not lost in the middle. +## Stakeholders +| Role | What they need | Channel | Escalation rule | +Use role labels, not personal names. -## Quality bar +## Voice +Pointer to voice.md, plus any non-negotiables such as the exact signoff. -Before finalizing, check: +## Boundaries +**Always ask before:** ... +**Never:** ... -- Does `soul.md` contain real tiebreaker rules, not values slogans? -- Does `voice.md` include verbatim samples and inferred rules? -- Does `revealed.md` show behavior from calendar evidence? -- Is the twin portable to any Agent Skills-compatible tool? -- Is private or unnecessary personal data removed? +## Capacity +Realistic limits. Deep-work windows. What drains and what restores. -## Final response +## Blind spots +Observable, not aspirational. +GOOD: "Under exec pressure, over-explains instead of offering two options." +BAD: "Should communicate better." + +## Coaching gaps +What the twin asked for and doesn't have yet. +``` + +### voice.md + +```markdown +# Voice — [Name] + +## Samples +5-10 real sent emails, VERBATIM. Include recipient, date, subject. +Vary the register: manager, peer, direct report, external. +Do NOT clean them up. + +## Rules the samples imply +- **Signature:** the exact signoff, exactly as written +- **Punctuation:** the tells (dash style, dropped apostrophes, caps) +- **Openers:** how they start, by recipient type +- **Length:** default message length +- **Register:** what changes between audiences +- **Structural habits:** for example, "a decline always carries the alternative" +``` + +### revealed.md + +```markdown +# Revealed — [Name] + +Derived from calendar and sent mail, [date range]. + +## The gaps +For each one: what they SAID, what the data SHOWS, and the number that proves it. + +## What the twin should do about it +Concrete instructions, not observations. +``` + +## Step 6 — Quality bar + +Before you finish, check: + +- Does `soul.md` contain real **tiebreakers**, not value slogans? +- Is it about **one page**? +- Does `voice.md` include **verbatim** samples with the quirks intact? +- Does `revealed.md` cite **numbers** from the calendar? +- Is anything private or unnecessary removed? + +## Step 7 — Hand off Tell the user: -1. Where the three files were saved or drafted. -2. The biggest gap between stated behavior and observed behavior. -3. What to do next: compress `soul.md`, test it on a conflict, then re-run on fresh input. -4. Suggested test prompt: "An exec asks for a new deliverable today, but I already promised a peer something by end of day. Use my twin to decide what to do and draft both messages." +1. Where the three files were saved. +2. The single biggest gap between what they said and what the evidence showed. +3. What to do next: compress `soul.md`, then test it on a conflict. +4. This test prompt: + + > An exec asks for a new deliverable today, but I already promised a peer something by end of day. Use my twin to decide what to do and draft both messages. diff --git a/Allfiles/twin-forge/references/interview-questions.md b/Allfiles/twin-forge/references/interview-questions.md deleted file mode 100644 index 5dd67ee..0000000 --- a/Allfiles/twin-forge/references/interview-questions.md +++ /dev/null @@ -1,35 +0,0 @@ -# Twin Forge behavioral question bank - -Ask one question at a time. Adapt based on the answer. Prefer recent, concrete examples. - -## Core questions - -1. Think of the last time two important requests collided. What did you actually do first? -2. What was the last deadline you protected by cutting scope? What did you cut? -3. When did you last push back on someone senior? What words did you use? -4. What kind of request gets an immediate yes from you, even on a busy day? -5. What kind of request do you delay, even when you agree it matters? -6. Look at last week. Which meeting earned its time, and which one did not? -7. When you had too much work, who did you notify first? Who waited? -8. What did you promise recently that you later had to renegotiate? -9. What decision do teammates repeatedly ask you to make? -10. What do you often overdo: detail, speed, consensus, polish, caution, or optimism? Give the last example. -11. When evidence is incomplete, do you ship with caveats, wait, ask for help, or cut the claim? What happened last time? -12. What message from the last month sounds most like you? Why? - -## Follow-ups - -- What happened next? -- What did you say, exactly? -- What did you not say? -- Who was affected? -- What did you trade away? -- Would you make the same choice again? -- If your calendar disagrees with that answer, which one should the twin trust? - -## Rules - -- Do not ask for secrets. -- Use roles instead of real names in final files. -- Convert answers into tiebreaker rules. -- If the user gives a value, ask for the last time that value changed a decision. diff --git a/Allfiles/twin-forge/references/soul-schema.md b/Allfiles/twin-forge/references/soul-schema.md deleted file mode 100644 index d9df465..0000000 --- a/Allfiles/twin-forge/references/soul-schema.md +++ /dev/null @@ -1,81 +0,0 @@ -# soul.md schema - -`soul.md` is the decision core. Keep it about one page. Put the most important rules near the top. - -## 1. Identity - -One sentence. Describe the working role, not the whole person. - -Example: `Marcus Webb is a product marketing manager who turns messy launch inputs into clear customer-facing narratives.` - -## 2. Priority stack - -Rank 4-6 priorities. These are used when time is tight. - -Example: - -1. Protect committed launch dates. -2. Keep customer-facing claims accurate. -3. Unblock cross-functional partners. -4. Reduce executive ambiguity. -5. Preserve focus time for narrative work. - -## 3. Decision rules - -Rules must resolve conflicts. Use the shape: `When X conflicts with Y, choose Z because...` - -Good: - -- `When an unverified claim threatens a committed date, cut scope and hold the date.` -- `When an exec request conflicts with a peer promise, acknowledge the exec within one hour, protect the peer deadline, and offer a smaller same-day version.` -- `When two teams need feedback, answer the team closest to customer impact first.` - -Bad: - -- `I value accuracy.` -- `Be collaborative.` -- `Do high-quality work.` - -Why bad: these are values, not tiebreakers. They do not tell an agent what to do when two good things collide. - -## 4. Stakeholder table - -| Stakeholder role | What they need | Default channel | Escalation rule | -| --- | --- | --- | --- | -| Exec sponsor | crisp options and risk | email or meeting recap | escalate when launch date or public claim changes | -| Peer PMM | dependable reviews | Teams + doc comments | renegotiate before deadline, not after | -| Sales partner | usable customer language | email | provide caveats when evidence is thin | - -Use roles, not real personal names. - -## 5. Boundaries - -### Always ask - -- Before changing a public claim. -- Before sending external email. -- Before moving a committed date. - -### Never - -- Invent customer evidence. -- Share confidential details in examples. -- Promise same-day work without cutting other scope. - -## 6. Capacity - -State realistic limits. - -Example: `Marcus can handle two deep-work deliverables per day. More than three urgent reviews means something must be deferred.` - -## 7. Blind spots - -Useful blind spots are observable. - -Good: `Under executive pressure, Marcus over-explains instead of offering two clear options.` - -Bad: `Marcus should communicate better.` - -## 8. Test prompts - -Include 2-3 conflicts that should exercise the rules. diff --git a/Allfiles/twin-forge/references/voice-schema.md b/Allfiles/twin-forge/references/voice-schema.md deleted file mode 100644 index 505806f..0000000 --- a/Allfiles/twin-forge/references/voice-schema.md +++ /dev/null @@ -1,67 +0,0 @@ -# voice.md schema - -`voice.md` captures how the person actually writes. Do not rely on adjectives alone. Use samples. - -## 1. Source note - -State where the samples came from. - -Example: `Source: 10 sent emails from the last 60 days for Marcus Webb synthetic persona data.` - -## 2. Verbatim samples - -Quote 5-10 samples exactly. Keep punctuation, casing, dashes, greetings, signoffs, emojis, and line breaks. - -Use this shape: - -```md -### Sample 1 — peer update -Recipient type: peer -Context: launch narrative review - -> Hey team — quick pass below. -> I tightened the customer proof point but left the risk callout in place. -> Marcus -``` - -Never normalize the quote. If the person writes `Thanks!`, keep `Thanks!`. If they use an em dash, keep it. - -## 3. Inferred style rules - -Infer rules from the samples. - -Cover: - -- Openers. -- Signoffs. -- Punctuation tells. -- Sentence length. -- Paragraph length. -- Use of bullets. -- Level of warmth. -- Directness. -- Register by recipient: exec, peer, customer, manager. -- How the person makes asks. -- How the person pushes back. - -Good rule: `With execs, Marcus opens with the decision needed, then gives two options and a recommendation.` - -Bad rule: `Marcus is professional and clear.` - -## 4. Do / avoid - -### Do - -- Use the person's real sentence rhythm from samples. -- Preserve their normal amount of warmth. -- Match the recipient type. - -### Avoid - -- Adding jokes if none appear in samples. -- Over-polishing into generic corporate voice. -- Replacing the person's signoff with a default one. - -## 5. Rewrite test - -Include one short test prompt and a before/after rewrite to validate the style. diff --git a/docs/build/base-scenario-1.md b/docs/build/base-scenario-1.md index e10bcdd..f276a2d 100644 --- a/docs/build/base-scenario-1.md +++ b/docs/build/base-scenario-1.md @@ -50,13 +50,21 @@ By the end, you should be able to show Cowork using your twin to handle a confli ### Step 0 — Install Twin Forge -1. Download or open the provided skill folder at `/Allfiles/twin-forge/`. +1. Download **`SKILL.md`** from the [Downloads page](/resources/downloads). 2. In Cowork, go to **Customize** → **Skills** → **Add ▾** → **Upload skill**. -3. Upload the Twin Forge skill package, or manually copy it to OneDrive at `/Documents/Cowork/skills/twin-forge/`. -4. Start a **new Cowork session**. +3. Upload the `.md` file on its own. You'll see **"Skill uploaded — twin-forge."** +4. Start a **new Cowork session** — skills are only discovered at session start. 5. Say: `Start Twin Forge and help me build a v0.1 digital twin.` 6. Choose Path A or Path B when asked. +::: warning Upload the .md, not a .zip +We tested this on a live tenant: `.zip` uploads silently fail — the dialog just closes and no skill appears. Everything Twin Forge needs is inside `SKILL.md`. + +Taking **Path B?** The Marcus Webb pack isn't in your Cowork workspace by default — download it and **attach the files** when Twin Forge asks. +::: + +![Twin Forge installed under Your skills in the Cowork Customize page](/img/twin-forge-uploaded.png) + Goal: a v0.1 twin in about 12 minutes. ### Step 1 — Connect the evidence diff --git a/docs/facilitator/coach-playbook.md b/docs/facilitator/coach-playbook.md index 923164e..b4476bc 100644 --- a/docs/facilitator/coach-playbook.md +++ b/docs/facilitator/coach-playbook.md @@ -91,3 +91,18 @@ Force one shared `soul.md`. The Arbiter owns tiebreakers. The Critic checks whet ::: tip Coach sentence "Show me the last real example, then show me the smallest rule that would have predicted it." ::: + +## Tooling traps (verified on a live tenant) + +These are real, we hit them in testing. Call them out at the start of the Base track and you'll save the room twenty minutes. + +| Symptom | Cause | Fix | +| --- | --- | --- | +| Uploaded a skill, nothing happened, no error | The upload was a `.zip`. It fails **silently** | Upload the `SKILL.md` file on its own | +| Skill installed but Cowork ignores it | The session was already open | Start a **new** Cowork session — skills load at session start | +| Agent says it can't find reference files | Companion files don't travel with a `.md` upload | Everything must be inline in `SKILL.md` | +| Path B: "persona pack isn't available" | The pack isn't in the Cowork workspace | Download it and **attach** the files to the session | + +::: tip What a healthy run looks like +Twin Forge builds a 5-step plan, pulls sent mail and calendar through Work IQ, then asks behavioral questions one at a time. If it starts asking "what do you value?", it isn't running the skill — check that it actually loaded. +::: \ No newline at end of file diff --git a/docs/public/img/twin-forge-uploaded.png b/docs/public/img/twin-forge-uploaded.png new file mode 100644 index 0000000000000000000000000000000000000000..9243871b7667cd32ef760b7f5654a6e33bd07e0f GIT binary patch literal 62545 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/resources/downloads.md b/docs/resources/downloads.md index b8c480a..e4eb929 100644 --- a/docs/resources/downloads.md +++ b/docs/resources/downloads.md @@ -14,11 +14,16 @@ Paste the folder's GitHub URL into [download-directory.github.io](https://downlo | What | Why you need it | Get it | | --- | --- | --- | -| **Twin Forge skill** | Bootstraps a v0.1 twin in ~12 minutes. Upload it into Cowork and say *"Start Twin Forge."* | [Allfiles/twin-forge](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/tree/main/Allfiles/twin-forge) | +| **Twin Forge skill** | Bootstraps a v0.1 twin in ~12 minutes. Upload it into Cowork and say *"Start Twin Forge."* | [SKILL.md](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/blob/main/Allfiles/twin-forge/SKILL.md) | | **Marcus Webb persona pack** | Path B data if you'd rather not use your own. | [Allfiles/persona-pack](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/tree/main/Allfiles/persona-pack) | -**Installing Twin Forge:** Cowork → **Customize** → **Skills** → **Add ▾** → **Upload skill**. -Or drop the folder in OneDrive at `/Documents/Cowork/skills/twin-forge/`, then start a **new session** — Cowork discovers skills at session start. +**Installing Twin Forge:** Cowork → **Customize** → **Skills** → **Add ▾** → **Upload skill** → pick `SKILL.md`. Then **start a new session** — skills are discovered at session start. + +::: warning Upload the .md on its own +Tested on a live tenant: `.zip` uploads silently fail. `SKILL.md` is fully self-contained, so there's nothing else to bundle. +::: + +Or drop it in OneDrive at `/Documents/Cowork/skills/twin-forge/SKILL.md`. ## 🟣 Advanced · Scout / GitHub Copilot From 44322b6438c2959d90ff2644700e559be42b53f1 Mon Sep 17 00:00:00 2001 From: Matt Quinlan <37308730+maquinl@users.noreply.github.com> Date: Thu, 30 Jul 2026 04:00:56 +0100 Subject: [PATCH 02/12] Rewrite Base build page for a first-time reader Read the old page cold as a participant: six required round-trips to other pages, repo paths (/Allfiles/...) in body text that 404 on the site, jargon in the first ten words (altitude, assembly map, snap these blocks, Step 0), and the three files introduced before any reason to care. Changes: - Zero required clicks. Everything needed is inline; bricks demoted to optional 'Full guide' links underneath each step. - Download buttons sit inline at the step that needs them, not on a separate Downloads page. - Opens with the problem in two sentences, then what you walk out with, then the files - not the file list first. - Removed every repo path from participant-facing text. - Steps numbered from 1. 'Assembly map / snap these blocks' -> 'Install Twin Forge', 'Make it shorter', 'Give it your voice', 'Give it judgment'. - Filenames as plain words (soul / voice / revealed) in the intro table. - Values-vs-rules comparison table replaces the abstract explanation. - Added a 'Stuck?' table covering the 4 failure modes found in live testing plus the 2 most likely content mistakes. --- docs/build/base-scenario-1.md | 236 ++++++++++++++++++---------------- 1 file changed, 123 insertions(+), 113 deletions(-) diff --git a/docs/build/base-scenario-1.md b/docs/build/base-scenario-1.md index f276a2d..c63d6d0 100644 --- a/docs/build/base-scenario-1.md +++ b/docs/build/base-scenario-1.md @@ -1,187 +1,197 @@ --- -title: 🟢 Base · Copilot-Crafted — Scenario 1 +title: The Digital Twin — Cowork --- - + -# 🟢 Base · Copilot-Crafted +# 🧬 The Digital Twin -## Scenario 1 — Digital Twin +**You'll build this in Cowork. No code, and no experience needed.** -**Building with:** Microsoft 365 Copilot + Cowork +## Why -::: tip Get the files -Twin Forge, the Marcus Webb persona pack, and the starter repo are all on the [Downloads page](/resources/downloads). -::: - -You will build a small, portable digital twin: a one-page spec of how you work, plus a Cowork skill that can run against it. +AI can write any email. It can't write *your* email. -## 1 · Your mission +It knows everything about your company and nothing about you — so every draft needs a rewrite, and the time you saved disappears in the last mile. -Create a digital twin that captures how a person decides, writes, and actually spends time. Then use Cowork to run that twin on a realistic work conflict. +**The last mile is you.** Today you're going to write that part down. -Your twin has three files: +## What you'll walk out with -1. `soul.md` — how the person decides: identity, priority stack, decision rules, stakeholders, boundaries, capacity, and blind spots. -2. `voice.md` — how the person writes: 5-10 real sent emails or synthetic samples, quoted verbatim, plus the style rules those samples imply. -3. `revealed.md` — what the calendar shows versus what the person says about themselves. +A one-page spec of how you actually work — and any AI tool can read it. -You can build from either data path: +| File | What it holds | +| --- | --- | +| **soul** | How you decide. Your priorities, and what you do when two of them collide. | +| **voice** | How you write. Real emails of yours, and the patterns inside them. | +| **revealed** | What your calendar says about you — versus what you say about you. | -- **Path A — Your own data:** use Work IQ through Cowork to pull your sent mail, calendar, Teams, files, and people context. -- **Path B — Marcus Webb persona:** use the synthetic marketing manager pack at `/Allfiles/persona-pack/`. +It's plain text, it's yours, and it works in Cowork, VS Code, and 30+ other AI tools without changing a thing. -::: tip Team model -Each person builds their own twin. The team collaborates on the schema: what belongs in `soul.md`, what makes a useful tiebreaker, and what a good blind spot looks like. -::: +## Before you start -## 2 · What you'll demonstrate +Grab these now — you'll need the first one in about two minutes. -You will demonstrate the Base altitude functions from the [🟢 Base · Copilot-Crafted level page](/levels/base/): + -- Pull from a data source. -- Author a reusable Cowork skill. -- Produce a clean, formatted output. -- Re-run it on new inputs. +--- -By the end, you should be able to show Cowork using your twin to handle a conflict: an executive ask collides with a promise to a peer. +## 1 · Install Twin Forge -## 3 · Assembly map — snap these blocks together +1. Open Microsoft 365 Copilot and click the **Cowork** tab. +2. In the left menu, click **Customize**. +3. Click the **Skills** tab. +4. Click the arrow next to **Add**, then **Upload skill**. +5. Choose the `SKILL.md` file you downloaded. -### Step 0 — Install Twin Forge +You'll see **"Skill uploaded — twin-forge."** -1. Download **`SKILL.md`** from the [Downloads page](/resources/downloads). -2. In Cowork, go to **Customize** → **Skills** → **Add ▾** → **Upload skill**. -3. Upload the `.md` file on its own. You'll see **"Skill uploaded — twin-forge."** -4. Start a **new Cowork session** — skills are only discovered at session start. -5. Say: `Start Twin Forge and help me build a v0.1 digital twin.` -6. Choose Path A or Path B when asked. +![Twin Forge showing under Your skills on the Cowork Customize page](/img/twin-forge-uploaded.png) -::: warning Upload the .md, not a .zip -We tested this on a live tenant: `.zip` uploads silently fail — the dialog just closes and no skill appears. Everything Twin Forge needs is inside `SKILL.md`. +::: warning Two things that will trip you up +**Upload the file on its own.** Don't zip it. Zipped uploads fail silently — nothing appears and you get no error. -Taking **Path B?** The Marcus Webb pack isn't in your Cowork workspace by default — download it and **attach the files** when Twin Forge asks. +**Start a new Cowork session afterwards.** Cowork only looks for new skills when a session begins, so an already-open one won't see it. ::: -![Twin Forge installed under Your skills in the Cowork Customize page](/img/twin-forge-uploaded.png) +## 2 · Pick your data -Goal: a v0.1 twin in about 12 minutes. +Start a **new** Cowork session and say: -### Step 1 — Connect the evidence +```text +Start Twin Forge and help me build a v0.1 digital twin. +``` -Use [Connect Cowork to a data source](/bricks/cowork-connect-source). +It'll ask which you want: -Ask Cowork for: +**Your own data** — Twin Forge reads your sent mail and calendar. Nothing is set up, nothing is shared, and it only sees what you can already see. This makes the better twin, because it's really you. -1. Last ~10 sent emails for voice evidence. -2. Last ~30 days of calendar for revealed behavior. -3. Relevant Teams or file context only if it helps explain the work. +**Marcus Webb** — the made-up marketing manager. Pick this if you'd rather not use your own work data. Download his pack and **attach the files** when Twin Forge asks; it can't see them otherwise. -### Step 2 — Build or edit the skill +## 3 · Get your first draft -Use [Write a reusable Cowork skill](/bricks/cowork-build-skill). +Twin Forge takes it from here, about 12 minutes: -Twin Forge bootstraps the first pass. You improve it by making the rules shorter, clearer, and more testable. +- reads your last ~10 sent emails and ~30 days of calendar +- asks you around 8 quick questions, one at a time +- shows you where what you *said* and what your calendar *shows* disagree +- writes your three files -### Step 3 — Format the twin +::: tip Answer honestly, not aspirationally +Every question is *"what did you actually do last time?"* — not *"what do you value?"* If you describe your best self, you'll get a twin of someone else. +::: -Use [Produce a formatted output](/bricks/cowork-formatted-output). +**You now have a v0.1 twin. Everything from here is you making it good — and that's the actual hack.** -Keep the three files stable: +--- -1. `soul.md` -2. `voice.md` -3. `revealed.md` +## 4 · Make it shorter -### Step 4 — Attack surface: COMPRESS +Your first draft is too long. Cut it to about one page. -Cut `soul.md` hard. A good version is about one page. +This feels wrong and it's the single highest-value thing you'll do. Longer specs perform measurably *worse* — Anthropic found that longer, more specific instructions damaged the model's ability to generalize, and separate research ("Lost in the Middle") found instructions buried in the middle of a long prompt get ignored almost entirely. -Why: Anthropic's Constitutional AI work found that longer, more specific principles can damage or reduce generalization and effectiveness. Liu et al.'s "Lost in the Middle" work also shows that instructions buried in the middle of context are attended to worst. Short specs travel better. +**Cut anything that isn't a rule you'd actually apply.** -### Step 5 — Attack surface: VOICE +Want the mechanics of editing a skill? [Full guide →](/bricks/cowork-build-skill) -Replace description with evidence. +## 5 · Give it your voice -Why: Jemama & Kumar (2025) found few-shot examples from real writing can be up to 23.5x more accurate for style matching than zero-shot descriptions. In plain English: describing your voice does almost nothing; pasting 10 real emails does almost everything. +Open your voice file. If it *describes* your writing — "professional but friendly" — replace that with **actual emails you sent.** Five to ten, pasted exactly as you wrote them. -### Step 6 — Attack surface: JUDGMENT +Don't tidy them up. The dropped apostrophes, the dashes, the way you sign off — that's the whole signal. -Add decision rules that resolve conflicts. +Pasting real writing is roughly **23× more accurate** at matching your style than describing it. -Bad rule: `I value accuracy.` +[Full guide →](/bricks/cowork-connect-source) -Good rule: `When an unverified claim threatens a committed date, cut scope and hold the date.` +## 6 · Give it judgment -### Step 7 — Team checkpoint +Your twin needs to know what you do when two good things collide. Most first drafts have values where rules should be. -At about the halfway point, meet as a team for 10 minutes. +| ❌ This is a value | ✅ This is a rule | +| --- | --- | +| I value accuracy. | When an unverified claim threatens a committed date, cut scope and hold the date. | +| I'm responsive to leadership. | When an exec ask conflicts with a peer promise, reply to the exec within the hour, protect the peer's deadline, offer a smaller same-day version. | +| I collaborate well. | When two people both say theirs is top priority, I decide and tell them. I don't escalate it. | -1. Each person shows one field from `soul.md` that helped. -2. Each person shows one weak or vague rule. -3. Steal the best fields from each other. -4. Agree on the shared schema your team will use. -5. Keep the instances individual. +A value tells an agent nothing. **A rule tells it what to do.** -### Step 8 — Mid-build twist +## 7 · Compare with your team -At about 55 minutes, test this conflict: +Ten minutes, together. Everyone built their own twin — now build a better *shape* for all of them. -```text -A senior executive asks for a new customer narrative by 3 PM today. You already promised a peer that you would finish launch review notes by 4 PM. Use my twin to decide what to do, what to say to each person, and what scope to cut. -``` +Each person shows **one rule that worked** and **one that's still vague.** Steal shamelessly. Agree on what belongs in a good soul file. Keep your own answers; share the structure. -The point is not to be "nice." The point is to see whether your twin can make a grounded tradeoff. +## 8 · ⚡ The twist -### Step 9 — Re-run and arm one trigger +Your facilitator will hand this out partway through. Give it to your twin: -Use [Re-run a skill on new inputs](/bricks/cowork-rerun-skill). +```text +A senior executive wants a new customer narrative by 3 PM today. +You already promised a peer their launch review notes by 4 PM. +Use my twin: what do I do, what do I say to each of them, and what gets cut? +``` -Pick one: +The goal isn't a polite answer. It's whether your twin makes **your** tradeoff — and can say what it gave up. -1. **Scheduled prompt:** `Every weekday at 9 AM, compare today's calendar to my soul.md capacity rules and draft a focus plan.` -2. **Event-driven task:** trigger when an incoming email or Teams @mention asks for urgent help. Keep the default draft-and-approve flow. +If it can't, you've found your next missing rule. Add it and run it again. -::: warning Approval matters -Cowork may draft a response, but nothing should send without your approval during this hack. -::: +## 9 · Make it run without you -## 4 · The data +Pick one and set it up: -Choose one path. +**On a schedule** — *"Every weekday at 9 AM, compare my calendar to my capacity rules and draft a focus plan."* -### Path A — Your own Microsoft 365 data +**On a trigger** — fires when an email arrives or someone @mentions you in Teams. -Use Cowork's Work IQ grounding. It can reason over your mail, sent mail, calendar, Teams chats and channels, OneDrive and SharePoint files, and people/org chart context. It only sees what you can see. +::: warning Nothing sends on its own +Cowork drafts and waits for your approval. Keep it that way today. +::: -Use safe prompts: +[Full guide →](/bricks/cowork-rerun-skill) -```text -Find my last 10 sent emails. Quote the relevant style samples verbatim. Do not include confidential content in the final demo. -``` +--- -```text -Summarize my last 30 days of calendar by category, organizer, tentative percentage, self-organized percentage, and recurring meetings. -``` +## Show it off -### Path B — Marcus Webb persona pack +60–90 seconds. Hit these: -Use the synthetic data at `/Allfiles/persona-pack/`. Marcus Webb is a fictional marketing manager. Use this path if you do not want to use your own work data or if you need a clean demo dataset. +- [ ] Whose twin — yours or Marcus's +- [ ] Your soul file, about a page +- [ ] Your voice file, with real samples in it +- [ ] **One thing your calendar revealed that surprised you** +- [ ] The exec-vs-peer conflict, and what your twin decided +- [ ] Your scheduled prompt or trigger -::: info Research note -Park et al. (2024, arXiv:2411.10109, n=1,052) found interview-built agents reached 83%, survey-built agents 82%, combined agents 86%, and demographics-only agents 74%. Bootstrapping is not the hard part. The hard part is refining what the first pass misses. +::: tip The best demo isn't the most complex one +It's the one where someone reads a draft your twin wrote and says *"yeah, that sounds like you."* ::: -## 5 · Demo checklist +## Stuck? -Show these in 60-90 seconds: +| What you're seeing | What to do | +| --- | --- | +| Cowork ignores Twin Forge | Start a **new** session — skills only load at the start | +| Upload seemed to do nothing | Upload the `.md` file, not a zip | +| "I can't find the reference files" | You've got an old copy — re-download it | +| Marcus's data can't be found | Attach the pack files to the session | +| Twin sounds like a stranger | Your voice file is descriptions, not real emails. Go back to step 5 | +| Twin gives wishy-washy answers | Your soul file has values, not rules. Go back to step 6 | -- [ ] Which data path you used: your own data or Marcus Webb. -- [ ] Your `soul.md`, trimmed to about one page. -- [ ] Your `voice.md`, with verbatim samples and inferred rules. -- [ ] Your `revealed.md`, including one gap between stated behavior and calendar evidence. -- [ ] The executive-versus-peer conflict and Cowork's recommended tradeoff. -- [ ] One re-run on new input. -- [ ] One armed scheduled prompt or event-driven trigger, with draft-and-approve explained. +--- -[← Back to start](/) · [Scenario 1 brief](/scenarios/scenario-1) +[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) From 2dfaf32316ed1e1570ea64d7a6f59ade6ecc1843 Mon Sep 17 00:00:00 2001 From: Matt Quinlan <37308730+maquinl@users.noreply.github.com> Date: Thu, 30 Jul 2026 14:00:39 +0100 Subject: [PATCH 03/12] Link every research citation, add a Research page All 8 papers verified live against the arXiv API before linking - title, authors and abstract checked, not just that the URL resolves. Tracked down the one citation that was previously unverifiable: the 23.5x style-matching claim is Jemama & Kumar, 'How Well Do LLMs Imitate Human Writing Style?' (arXiv:2509.24930). The abstract states it verbatim: 'few-shot prompting yields up to 23.5x higher style-matching accuracy than zero-shot'. Removed the HyPerAlign reference that could not be confirmed. - NEW docs/resources/research.md - one canonical page explaining why the scenario is designed this way, with every source linked and the honest caveats stated (style transfers but unpredictability doesn't; the file learns but the model doesn't) - Inline links added in base build page, coach playbook, interview script, advanced-guardrail brick - Interview script now cites the 74% baseline it references - Wired into nav under Resources --- docs/.vitepress/config.mts | 1 + docs/bricks/advanced-guardrail.md | 8 ++-- docs/build/base-scenario-1.md | 6 +-- docs/facilitator/coach-playbook.md | 4 +- docs/facilitator/interview-script.md | 2 + docs/resources/index.md | 4 ++ docs/resources/research.md | 66 ++++++++++++++++++++++++++++ docs/scenarios/scenario-1.md | 4 ++ 8 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 docs/resources/research.md diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 2152662..4b2a86e 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -33,6 +33,7 @@ export default defineConfig({ items: [ { text: "Overview", link: "/resources/" }, { text: "⬇ Downloads", link: "/resources/downloads" }, + { text: "The Research", link: "/resources/research" }, ], }, ], diff --git a/docs/bricks/advanced-guardrail.md b/docs/bricks/advanced-guardrail.md index c42bb44..b7d5eb8 100644 --- a/docs/bricks/advanced-guardrail.md +++ b/docs/bricks/advanced-guardrail.md @@ -113,10 +113,10 @@ Do not write "please be careful" in a prompt and call it a guardrail. Put the ch 7. Cite the idea honestly if you explain it in your demo. - - Reflexion (arXiv:2303.11366): agents improve future attempts through verbal feedback. - - Self-Refine (arXiv:2303.17651): generate, critique, refine loops. - - Constitutional AI: behavior is shaped by explicit principles. - - MemGPT / Letta: memory is managed as external state. + - [Reflexion](https://arxiv.org/abs/2303.11366) (Shinn et al., 2023): agents improve future attempts through verbal feedback. + - [Self-Refine](https://arxiv.org/abs/2303.17651) (Madaan et al., 2023): generate, critique, refine loops. + - [Constitutional AI](https://arxiv.org/abs/2212.08073) (Bai et al., 2022): behavior is shaped by explicit principles. + - [MemGPT / Letta](https://arxiv.org/abs/2310.08560): memory is managed as external state. ::: warning Honest limit The file gets better. The model does not learn. Every future run must reload the improved file. diff --git a/docs/build/base-scenario-1.md b/docs/build/base-scenario-1.md index c63d6d0..be466ba 100644 --- a/docs/build/base-scenario-1.md +++ b/docs/build/base-scenario-1.md @@ -102,7 +102,7 @@ Every question is *"what did you actually do last time?"* — not *"what do you Your first draft is too long. Cut it to about one page. -This feels wrong and it's the single highest-value thing you'll do. Longer specs perform measurably *worse* — Anthropic found that longer, more specific instructions damaged the model's ability to generalize, and separate research ("Lost in the Middle") found instructions buried in the middle of a long prompt get ignored almost entirely. +This feels wrong and it's the single highest-value thing you'll do. Longer specs perform measurably *worse* — Anthropic found that longer, more specific instructions [damaged the model's ability to generalize](https://arxiv.org/abs/2212.08073), and separate research found instructions buried in the middle of a long prompt [get ignored almost entirely](https://arxiv.org/abs/2307.03172). **Cut anything that isn't a rule you'd actually apply.** @@ -114,7 +114,7 @@ Open your voice file. If it *describes* your writing — "professional but frien Don't tidy them up. The dropped apostrophes, the dashes, the way you sign off — that's the whole signal. -Pasting real writing is roughly **23× more accurate** at matching your style than describing it. +Pasting real writing is [roughly 23× more accurate](https://arxiv.org/abs/2509.24930) at matching your style than describing it. [Full guide →](/bricks/cowork-connect-source) @@ -194,4 +194,4 @@ It's the one where someone reads a draft your twin wrote and says *"yeah, that s --- -[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) +[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) · [The research behind it](/resources/research) diff --git a/docs/facilitator/coach-playbook.md b/docs/facilitator/coach-playbook.md index b4476bc..d2ac7b7 100644 --- a/docs/facilitator/coach-playbook.md +++ b/docs/facilitator/coach-playbook.md @@ -40,7 +40,7 @@ The team keeps adding principles, exceptions, and prose. The twin gets less cons **Why it matters** -Anthropic's Constitutional AI work found that longer, more specific principles could damage or reduce generalization and effectiveness. Liu et al.'s "Lost in the Middle" work showed that models attend worst to instructions buried mid-context. Park et al. 2024 also suggests persona bootstrapping is already strong; the hard part is compression. +Anthropic's [Constitutional AI](https://arxiv.org/abs/2212.08073) work found that longer, more specific principles could damage or reduce generalization and effectiveness. Liu et al.'s ["Lost in the Middle"](https://arxiv.org/abs/2307.03172) showed that models attend worst to instructions buried mid-context. [Park et al. 2024](https://arxiv.org/abs/2411.10109) also suggests persona bootstrapping is already strong; the hard part is compression. **How to coach** @@ -54,7 +54,7 @@ Ask for the one tiebreaker that matters. Move examples into references. Keep `so **Why it matters** -Jemama & Kumar 2025 report that few-shot prompting on real writing can be far more accurate for style matching than zero-shot description. HyPerAlign 2025 reports strong preference wins from a handful of samples. The practical lesson: pasting real examples beats describing vibes. +[Jemama & Kumar (2025)](https://arxiv.org/abs/2509.24930) report that few-shot prompting on real writing yields **up to 23.5× higher style-matching accuracy** than zero-shot description — and that completion-style prompting reaches 99.9% agreement with the original author. The practical lesson: pasting real examples beats describing vibes. **How to coach** diff --git a/docs/facilitator/interview-script.md b/docs/facilitator/interview-script.md index 7aadd9e..d7eeb1f 100644 --- a/docs/facilitator/interview-script.md +++ b/docs/facilitator/interview-script.md @@ -10,6 +10,8 @@ Use this to extract decision rules for `soul.md`. A hand-built twin once scored below a generic-agent baseline because the author wrote down who he wanted to be. His spec said he escalated priority conflicts; in reality, he decided. It said he would never ship unverified work; in reality, he cut scope and held the date. Rewriting the rules from observed behavior moved the twin from 60% to 87%. +The baseline is real: [Park et al. (2024)](https://arxiv.org/abs/2411.10109), across 1,052 people, found that an agent given only someone's demographics matched them 74% as well as they matched themselves two weeks later. Interview-built agents reached 83%, survey-built 82%, and both combined 86%. **A twin built from stated values can land under 74% — worse than knowing nothing about the person.** + So do not ask, "What do you value?" Ask, "What did you actually do last time?" ## Behavioral questions diff --git a/docs/resources/index.md b/docs/resources/index.md index 4c90dbd..3f554f7 100644 --- a/docs/resources/index.md +++ b/docs/resources/index.md @@ -8,6 +8,10 @@ title: Resources **[⬇ Downloads](/resources/downloads)** — Twin Forge, the Marcus Webb persona pack, and the Advanced starter repo. +## Why the scenario works the way it does + +**[The Research](/resources/research)** — the studies behind the design, with links. Why bootstrapping is given away, why shorter specs beat longer ones, and why pasting real emails beats describing your voice. + ## Reference hacks - [Agent Academy](https://github.com/microsoft/agent-academy) — self-paced guided missions (Copilot Studio) diff --git a/docs/resources/research.md b/docs/resources/research.md new file mode 100644 index 0000000..16bdcf0 --- /dev/null +++ b/docs/resources/research.md @@ -0,0 +1,66 @@ +--- +title: The Research +--- + +# The Research + +Everything the Digital Twin scenario claims, and where it comes from. All open-access. + +## Bootstrapping a persona is already solved + +**[LLM Agents Grounded in Self-Reports Enable General-Purpose Simulation of Individuals](https://arxiv.org/abs/2411.10109)** · Park et al., 2024 · Stanford, n=1,052 + +Built agents of 1,052 real people and scored them against each person's *own* consistency answering the same questions two weeks apart. + +| Agent built from | Match | +| --- | --- | +| Demographics only | 74% | +| A survey battery | 82% | +| A 2-hour interview | 83% | +| Both | 86% | + +**Why it matters here:** the intake *method* barely moves the number. That's why we hand you Twin Forge instead of making you fill out a form — bootstrapping isn't the hard part, so we spend the session on what is. + +It also gives us a floor. An agent that knows only your job title scores 74%. **A twin built from what you say you value can land below that.** + +## Shorter specs work better + +**[Constitutional AI: Harmlessness from AI Feedback](https://arxiv.org/abs/2212.08073)** · Bai et al., 2022 · Anthropic + +Broad principles outperformed long specific ones. In Anthropic's own words, longer and more specific principles "damaged or reduced generalization and effectiveness." + +**[Lost in the Middle: How Language Models Use Long Contexts](https://arxiv.org/abs/2307.03172)** · Liu et al., 2023 + +Attention follows a U-curve. Content at the start or end of a prompt gets used; content in the middle gets missed. In one test, a model with the answer buried mid-context scored *below* the same model given no context at all. + +**Why it matters here:** compression isn't tidying up. A shorter soul file is a **better** soul file, and that's counterintuitive enough that people need to be told. + +## Show your writing, don't describe it + +**[How Well Do LLMs Imitate Human Writing Style?](https://arxiv.org/abs/2509.24930)** · Jemama & Kumar, 2025 + +Across five models and four prompting strategies: few-shot prompting on real writing produced **up to 23.5× higher style-matching accuracy** than zero-shot description. Completion-style prompting reached 99.9% agreement with the original author. Prompting strategy mattered more than model size. + +One honest caveat from the same paper: high-fidelity imitation isn't the same as sounding human. Real essays averaged a perplexity of 29.5; matched model output averaged 15.2. **The style transfers. The unpredictability doesn't.** + +**Why it matters here:** "professional but warm" does nothing. Ten real emails do almost everything. + +## Models default to a generic professional + +**[Whose Opinions Do Language Models Reflect?](https://arxiv.org/abs/2303.17548)** · Santurkar et al., 2023 + +Left alone, model outputs converge on an aggregate consensus voice rather than any specific individual. + +**Why it matters here:** this is exactly what you'll watch happen. Your first twin will pick the well-adjusted answer — escalate to your manager, slip the date, send the considerate status note — because that's the average. Your job is to overwrite the average with what you actually do. + +## Agents that improve their own spec + +For the 🟣 Advanced track's critic agent: + +- **[Reflexion](https://arxiv.org/abs/2303.11366)** · Shinn et al., 2023 — an agent writes a verbal post-mortem of its failure and reads it back on the next attempt. +- **[Self-Refine](https://arxiv.org/abs/2303.17651)** · Madaan et al., 2023 — generate, critique your own output, revise. One model, three roles. +- **[MemGPT / Letta](https://arxiv.org/abs/2310.08560)** · Packer et al., 2023 — an agent that edits its own memory file as it runs. The closest prior art to a self-patching soul file. + +::: warning The honest limit +The **file** gets better. The **model** doesn't learn. Every run reloads an improved file — that's a real and useful thing, and it isn't training. Say so in your demo. +::: diff --git a/docs/scenarios/scenario-1.md b/docs/scenarios/scenario-1.md index ee5ff15..4c7563b 100644 --- a/docs/scenarios/scenario-1.md +++ b/docs/scenarios/scenario-1.md @@ -75,3 +75,7 @@ In Base, everyone builds their own twin, but the team converges on the shared sc In Advanced, the team builds one integrated system. Each person owns one council agent — Ambition, Obligation, Capacity, Arbiter, or Critic — and all agents share one `soul.md`. ::: + +--- + +Why this scenario is designed the way it is: [The Research](/resources/research). From 631b6f489ebd0fe7429b8be7cf68b2c3c82b1199 Mon Sep 17 00:00:00 2001 From: Matt Quinlan <37308730+maquinl@users.noreply.github.com> Date: Thu, 30 Jul 2026 14:21:26 +0100 Subject: [PATCH 04/12] Only cite peer-reviewed or lab-published work; drop preprint claims arXiv is a preprint server - no peer review. I had been presenting eight preprints as equivalent evidence and hanging specific numbers on them. Checked every one against the arXiv API for a declared venue: only ONE states peer review (Lost in the Middle -> TACL). REMOVED every statistic sourced to a preprint: - the 23.5x style-matching figure (IEEE UEMCON preprint) - the 74/82/83/86% persona-accuracy table (no declared venue) - 99.9% style agreement, perplexity 29.5 vs 15.2 - 'scored 60% to 87%' presented as if it were measurement The underlying advice survives without them and reads better - 'showing beats describing' needs no statistic. KEPT, properly labelled: - Lost in the Middle - peer reviewed, Transactions of the ACL - Constitutional AI - now linked to Anthropic's own research site rather than the arXiv preprint Everything else moved to a 'Further reading' table explicitly marked NOT peer reviewed, with no claims attached. Research page renamed 'Where This Comes From' and restructured into what we stand behind / what we observed ourselves / further reading, plus an honest-limits section. --- docs/.vitepress/config.mts | 2 +- docs/bricks/advanced-guardrail.md | 10 ++-- docs/build/base-scenario-1.md | 8 +-- docs/facilitator/coach-playbook.md | 4 +- docs/facilitator/interview-script.md | 6 +-- docs/resources/index.md | 2 +- docs/resources/research.md | 75 ++++++++++++++-------------- docs/scenarios/scenario-1.md | 2 +- 8 files changed, 55 insertions(+), 54 deletions(-) diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 4b2a86e..e5e516f 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -33,7 +33,7 @@ export default defineConfig({ items: [ { text: "Overview", link: "/resources/" }, { text: "⬇ Downloads", link: "/resources/downloads" }, - { text: "The Research", link: "/resources/research" }, + { text: "Where This Comes From", link: "/resources/research" }, ], }, ], diff --git a/docs/bricks/advanced-guardrail.md b/docs/bricks/advanced-guardrail.md index b7d5eb8..cdc0962 100644 --- a/docs/bricks/advanced-guardrail.md +++ b/docs/bricks/advanced-guardrail.md @@ -113,10 +113,12 @@ Do not write "please be careful" in a prompt and call it a guardrail. Put the ch 7. Cite the idea honestly if you explain it in your demo. - - [Reflexion](https://arxiv.org/abs/2303.11366) (Shinn et al., 2023): agents improve future attempts through verbal feedback. - - [Self-Refine](https://arxiv.org/abs/2303.17651) (Madaan et al., 2023): generate, critique, refine loops. - - [Constitutional AI](https://arxiv.org/abs/2212.08073) (Bai et al., 2022): behavior is shaped by explicit principles. - - [MemGPT / Letta](https://arxiv.org/abs/2310.08560): memory is managed as external state. + Prior art worth reading — all **preprints**, not peer reviewed. Ideas, not findings: + + - [Reflexion](https://arxiv.org/abs/2303.11366) — an agent writes a plain-language post-mortem of its failure and reads it back next attempt. + - [Self-Refine](https://arxiv.org/abs/2303.17651) — generate, critique, revise. + - [MemGPT / Letta](https://arxiv.org/abs/2310.08560) — an agent that manages its own memory as external state. + - [Constitutional AI](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback) (Anthropic, published by the lab) — behavior shaped by a short set of explicit principles. ::: warning Honest limit The file gets better. The model does not learn. Every future run must reload the improved file. diff --git a/docs/build/base-scenario-1.md b/docs/build/base-scenario-1.md index be466ba..4fc8514 100644 --- a/docs/build/base-scenario-1.md +++ b/docs/build/base-scenario-1.md @@ -102,7 +102,7 @@ Every question is *"what did you actually do last time?"* — not *"what do you Your first draft is too long. Cut it to about one page. -This feels wrong and it's the single highest-value thing you'll do. Longer specs perform measurably *worse* — Anthropic found that longer, more specific instructions [damaged the model's ability to generalize](https://arxiv.org/abs/2212.08073), and separate research found instructions buried in the middle of a long prompt [get ignored almost entirely](https://arxiv.org/abs/2307.03172). +This feels wrong and it's the single highest-value thing you'll do. Longer isn't better. Anthropic [found while building Constitutional AI](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback) that broad principles worked better than long, specific ones — the longer versions actually reduced effectiveness. And ["Lost in the Middle"](https://arxiv.org/abs/2307.03172) (peer-reviewed, *Transactions of the ACL*) showed models pay least attention to whatever sits in the middle of a long prompt. **Cut anything that isn't a rule you'd actually apply.** @@ -114,7 +114,9 @@ Open your voice file. If it *describes* your writing — "professional but frien Don't tidy them up. The dropped apostrophes, the dashes, the way you sign off — that's the whole signal. -Pasting real writing is [roughly 23× more accurate](https://arxiv.org/abs/2509.24930) at matching your style than describing it. +When you write, you make hundreds of small choices you've never consciously noticed — how you open, whether you bullet or run on, what you do with dashes, how you sign off. You can't list them. But they're all sitting there in your sent folder. + +Showing beats describing. [Full guide →](/bricks/cowork-connect-source) @@ -194,4 +196,4 @@ It's the one where someone reads a draft your twin wrote and says *"yeah, that s --- -[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) · [The research behind it](/resources/research) +[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) · [Where this comes from](/resources/research) diff --git a/docs/facilitator/coach-playbook.md b/docs/facilitator/coach-playbook.md index d2ac7b7..98d5dab 100644 --- a/docs/facilitator/coach-playbook.md +++ b/docs/facilitator/coach-playbook.md @@ -40,7 +40,7 @@ The team keeps adding principles, exceptions, and prose. The twin gets less cons **Why it matters** -Anthropic's [Constitutional AI](https://arxiv.org/abs/2212.08073) work found that longer, more specific principles could damage or reduce generalization and effectiveness. Liu et al.'s ["Lost in the Middle"](https://arxiv.org/abs/2307.03172) showed that models attend worst to instructions buried mid-context. [Park et al. 2024](https://arxiv.org/abs/2411.10109) also suggests persona bootstrapping is already strong; the hard part is compression. +Anthropic [reported while building Constitutional AI](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback) that broad principles worked better than long, specific ones, and that the longer versions reduced effectiveness. ["Lost in the Middle"](https://arxiv.org/abs/2307.03172) (peer-reviewed, *Transactions of the ACL*) showed models attend worst to instructions buried mid-context. **How to coach** @@ -54,7 +54,7 @@ Ask for the one tiebreaker that matters. Move examples into references. Keep `so **Why it matters** -[Jemama & Kumar (2025)](https://arxiv.org/abs/2509.24930) report that few-shot prompting on real writing yields **up to 23.5× higher style-matching accuracy** than zero-shot description — and that completion-style prompting reaches 99.9% agreement with the original author. The practical lesson: pasting real examples beats describing vibes. +A description is the writer's *theory* of their own writing, and it's usually wrong — people can't see their own tells. The evidence is already sitting in their sent folder. Samples carry the specifics a description never will: the exact signoff, the punctuation habits, how the register shifts between an exec and a teammate. **How to coach** diff --git a/docs/facilitator/interview-script.md b/docs/facilitator/interview-script.md index d7eeb1f..12fed27 100644 --- a/docs/facilitator/interview-script.md +++ b/docs/facilitator/interview-script.md @@ -8,11 +8,9 @@ Use this to extract decision rules for `soul.md`. ## Why behavioral -A hand-built twin once scored below a generic-agent baseline because the author wrote down who he wanted to be. His spec said he escalated priority conflicts; in reality, he decided. It said he would never ship unverified work; in reality, he cut scope and held the date. Rewriting the rules from observed behavior moved the twin from 60% to 87%. +When we built one of these ourselves, the first version was worse than useless — because the author wrote down who he *wanted* to be. His spec said he escalated priority conflicts; in reality, he just decided. It said he'd never ship unverified work; in reality, he cut scope and held the date. Rewriting those rules from what he actually did was what made the twin recognizable. -The baseline is real: [Park et al. (2024)](https://arxiv.org/abs/2411.10109), across 1,052 people, found that an agent given only someone's demographics matched them 74% as well as they matched themselves two weeks later. Interview-built agents reached 83%, survey-built 82%, and both combined 86%. **A twin built from stated values can land under 74% — worse than knowing nothing about the person.** - -So do not ask, "What do you value?" Ask, "What did you actually do last time?" +So don't ask, "What do you value?" Ask, "What did you actually do last time?" ## Behavioral questions diff --git a/docs/resources/index.md b/docs/resources/index.md index 3f554f7..6ee2bc2 100644 --- a/docs/resources/index.md +++ b/docs/resources/index.md @@ -10,7 +10,7 @@ title: Resources ## Why the scenario works the way it does -**[The Research](/resources/research)** — the studies behind the design, with links. Why bootstrapping is given away, why shorter specs beat longer ones, and why pasting real emails beats describing your voice. +**[Where This Comes From](/resources/research)** — the thinking behind the scenario, what's peer reviewed, what isn't, and the limits worth stating out loud. ## Reference hacks diff --git a/docs/resources/research.md b/docs/resources/research.md index 16bdcf0..b715fad 100644 --- a/docs/resources/research.md +++ b/docs/resources/research.md @@ -1,66 +1,65 @@ --- -title: The Research +title: Where This Comes From --- -# The Research +# Where This Comes From -Everything the Digital Twin scenario claims, and where it comes from. All open-access. +The thinking behind the Digital Twin scenario, and how much weight each source can carry. -## Bootstrapping a persona is already solved +::: warning A note on sources +Most AI research circulates as **preprints** on arXiv — posted by the authors, not peer reviewed. That doesn't make it wrong, but it isn't settled science, and we don't build claims on it. -**[LLM Agents Grounded in Self-Reports Enable General-Purpose Simulation of Individuals](https://arxiv.org/abs/2411.10109)** · Park et al., 2024 · Stanford, n=1,052 - -Built agents of 1,052 real people and scored them against each person's *own* consistency answering the same questions two weeks apart. +Below, anything stated as fact is either **peer reviewed** or **published by the lab that ran the work**. Everything else is listed as further reading, clearly marked, with no claims attached. +::: -| Agent built from | Match | -| --- | --- | -| Demographics only | 74% | -| A survey battery | 82% | -| A 2-hour interview | 83% | -| Both | 86% | +## What we'll actually stand behind -**Why it matters here:** the intake *method* barely moves the number. That's why we hand you Twin Forge instead of making you fill out a form — bootstrapping isn't the hard part, so we spend the session on what is. +### Where instructions sit in a prompt changes whether they're followed -It also gives us a floor. An agent that knows only your job title scores 74%. **A twin built from what you say you value can land below that.** +**[Lost in the Middle: How Language Models Use Long Contexts](https://arxiv.org/abs/2307.03172)** · Liu et al. +*Peer reviewed — Transactions of the Association for Computational Linguistics.* -## Shorter specs work better +Model attention follows a U-curve. Content at the beginning or end of a prompt gets used; content in the middle is most likely to be missed — even when it's exactly what's needed. -**[Constitutional AI: Harmlessness from AI Feedback](https://arxiv.org/abs/2212.08073)** · Bai et al., 2022 · Anthropic +**Why it matters here:** a long soul file buries its own best rules. Compression isn't tidying up, it's the work. -Broad principles outperformed long specific ones. In Anthropic's own words, longer and more specific principles "damaged or reduced generalization and effectiveness." +### Broad principles beat long, specific ones -**[Lost in the Middle: How Language Models Use Long Contexts](https://arxiv.org/abs/2307.03172)** · Liu et al., 2023 +**[Constitutional AI: Harmlessness from AI Feedback](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback)** · Anthropic +*Published by Anthropic on their own research site.* -Attention follows a U-curve. Content at the start or end of a prompt gets used; content in the middle gets missed. In one test, a model with the answer buried mid-context scored *below* the same model given no context at all. +While developing the technique, Anthropic reported that a short, broad principle worked notably well, and that writing longer and more specific versions tended to *reduce* effectiveness. -**Why it matters here:** compression isn't tidying up. A shorter soul file is a **better** soul file, and that's counterintuitive enough that people need to be told. +**Why it matters here:** the instinct to add one more clause is the instinct to make it worse. -## Show your writing, don't describe it +## What we observed building it ourselves -**[How Well Do LLMs Imitate Human Writing Style?](https://arxiv.org/abs/2509.24930)** · Jemama & Kumar, 2025 +Not research — one build, one person. Useful as a story, not as evidence: -Across five models and four prompting strategies: few-shot prompting on real writing produced **up to 23.5× higher style-matching accuracy** than zero-shot description. Completion-style prompting reached 99.9% agreement with the original author. Prompting strategy mattered more than model size. +The first twin we made was worse than no twin at all, because its author wrote down who he *wanted* to be. The spec said he escalated priority conflicts; in practice he just decided and told people after. It said he'd never ship anything unverified; in practice he cut scope and protected the date. -One honest caveat from the same paper: high-fidelity imitation isn't the same as sounding human. Real essays averaged a perplexity of 29.5; matched model output averaged 15.2. **The style transfers. The unpredictability doesn't.** +Rewriting those rules from what he actually did was the moment it started sounding like him. **That gap — between the self you describe and the self your calendar records — is the whole scenario.** -**Why it matters here:** "professional but warm" does nothing. Ten real emails do almost everything. +## Further reading -## Models default to a generic professional +Preprints and project pages. Interesting, relevant, **not peer reviewed** — read them as ideas, not findings. -**[Whose Opinions Do Language Models Reflect?](https://arxiv.org/abs/2303.17548)** · Santurkar et al., 2023 +| | | +| --- | --- | +| [Reflexion](https://arxiv.org/abs/2303.11366) | An agent writes a plain-language post-mortem of its own failure and reads it back on the next attempt | +| [Self-Refine](https://arxiv.org/abs/2303.17651) | Generate, critique your own output, revise. One model, three roles | +| [MemGPT / Letta](https://arxiv.org/abs/2310.08560) | An agent that manages and edits its own memory as it runs | +| [Whose Opinions Do Language Models Reflect?](https://arxiv.org/abs/2303.17548) | Left alone, model output drifts toward an aggregate voice rather than any specific person | +| [Generative Agent Simulations of 1,000 People](https://arxiv.org/abs/2411.10109) | Building agents of real individuals from interviews and surveys, and measuring how closely they match | -Left alone, model outputs converge on an aggregate consensus voice rather than any specific individual. +These informed the 🟣 Advanced track's critic agent and the general shape of the scenario. None of them is doing any load-bearing work in what we claim. -**Why it matters here:** this is exactly what you'll watch happen. Your first twin will pick the well-adjusted answer — escalate to your manager, slip the date, send the considerate status note — because that's the average. Your job is to overwrite the average with what you actually do. +## The honest limits -## Agents that improve their own spec +Say these out loud in your demo. They make it stronger, not weaker. -For the 🟣 Advanced track's critic agent: +**The file gets better. The model doesn't learn.** A self-patching spec is real and genuinely useful, but every run simply reloads an improved file. Nothing is being trained. -- **[Reflexion](https://arxiv.org/abs/2303.11366)** · Shinn et al., 2023 — an agent writes a verbal post-mortem of its failure and reads it back on the next attempt. -- **[Self-Refine](https://arxiv.org/abs/2303.17651)** · Madaan et al., 2023 — generate, critique your own output, revise. One model, three roles. -- **[MemGPT / Letta](https://arxiv.org/abs/2310.08560)** · Packer et al., 2023 — an agent that edits its own memory file as it runs. The closest prior art to a self-patching soul file. +**Sounding like you isn't being you.** A twin can match your phrasing closely and still be more predictable and less surprising than you are. It drafts. You decide. -::: warning The honest limit -The **file** gets better. The **model** doesn't learn. Every run reloads an improved file — that's a real and useful thing, and it isn't training. Say so in your demo. -::: +**Your twin only knows what you've written down.** It can't infer what you've never done, what you're deliberately trying to change, or what you'd refuse outright — unless you tell it. diff --git a/docs/scenarios/scenario-1.md b/docs/scenarios/scenario-1.md index 4c7563b..48412ca 100644 --- a/docs/scenarios/scenario-1.md +++ b/docs/scenarios/scenario-1.md @@ -78,4 +78,4 @@ In Advanced, the team builds one integrated system. Each person owns one council --- -Why this scenario is designed the way it is: [The Research](/resources/research). +Why this scenario is designed the way it is: [Where This Comes From](/resources/research). From 8cb158ba90a8d5ff2c700c1b1a45aaee525923d2 Mon Sep 17 00:00:00 2001 From: Matt Quinlan <37308730+maquinl@users.noreply.github.com> Date: Thu, 30 Jul 2026 14:32:58 +0100 Subject: [PATCH 05/12] Use CELA-approved fictitious names, companies and domains All invented names replaced with entries from the approved people list, and all companies/domains with entries from the approved fictitious company list. 22 files updated. People: Marcus Webb -> Avery Washington (gender neutral) Priya Raghavan -> Victoria Burke Dan Kowalski -> Graham Barnes Tessa Lin -> Maya Robinson Jordan Beck -> Caleb Miller Amara Osei -> Amara White Ravi Chandra -> Miguel Reyes Helen Park -> Serena Davis Companies: Northwind Traders kept - already on the approved list Contoso kept - already on the approved list Fenwick & Co -> First Up Consultants (firstupconsultants.com) Acme Industrial -> Tailwind Traders Litware -> Lakeshore Retail Emails now use first-name-only usernames per the guidance (avery@northwindtraders.com, not avery.washington@...). The invented fenwickco.example domain is gone. Product codename Atlas -> Lantern. Atlas collides with real shipping products, and the guidance covers products as well as companies. Avery Washington is gender neutral on the approved list, so the persona's pronouns are now they/them. Graham and Miguel stay he/him - both are listed male. Also switched the build anecdote to they/them so it doesn't identify anyone. Verified after the rename: all 96 calendar rows parse and all four planted contradictions still compute (23.5h launch vs 26.8h status; 12 of 12 customer calls owned by direct reports; strategy block declined/tentative/declined/declined; organizer on 20 of 96). --- Allfiles/digital-twin-starter/AGENTS.md | 2 +- .../digital-twin/SKILL.md | 2 +- .../digital-twin/references/soul.template.md | 2 +- Allfiles/persona-pack/README.md | 20 +- Allfiles/persona-pack/calendar/30-days.md | 198 +++++++++--------- .../persona-pack/calendar/summary-stats.md | 30 +-- .../persona-pack/context/goals-and-role.md | 28 +-- Allfiles/persona-pack/context/org-chart.md | 36 ++-- Allfiles/persona-pack/context/the-twist.md | 14 +- Allfiles/persona-pack/inbox/received-mail.md | 78 +++---- Allfiles/persona-pack/inbox/sent-mail.md | 154 +++++++------- Allfiles/twin-forge/README.md | 6 +- Allfiles/twin-forge/SKILL.md | 4 +- docs/bricks/advanced-work-iq.md | 2 +- docs/build/advanced-scenario-1.md | 10 +- docs/build/base-scenario-1.md | 10 +- docs/facilitator/coach-playbook.md | 4 +- docs/facilitator/index.md | 2 +- docs/facilitator/interview-script.md | 2 +- docs/how-it-works/run-of-show.md | 6 +- docs/resources/downloads.md | 6 +- docs/resources/index.md | 2 +- docs/resources/research.md | 4 +- docs/scenarios/scenario-1.md | 4 +- 24 files changed, 313 insertions(+), 313 deletions(-) diff --git a/Allfiles/digital-twin-starter/AGENTS.md b/Allfiles/digital-twin-starter/AGENTS.md index 3a16f7d..c745219 100644 --- a/Allfiles/digital-twin-starter/AGENTS.md +++ b/Allfiles/digital-twin-starter/AGENTS.md @@ -6,7 +6,7 @@ This repo is the Advanced Microsoft hackathon starter for a **digital twin**: a The twin is not a chatbot persona. It is a small set of markdown files that capture how a person decides, writes, overcommits, protects boundaries, and resolves tradeoffs. Agents must read the spec, cite the governing rule, and admit gaps instead of inventing preferences. -Use the synthetic example name **Marcus Webb** in examples. Do not introduce real personal data. +Use the synthetic example name **Avery Washington** in examples. Do not introduce real personal data. ## File layout diff --git a/Allfiles/digital-twin-starter/digital-twin/SKILL.md b/Allfiles/digital-twin-starter/digital-twin/SKILL.md index f841b6a..d7a035b 100644 --- a/Allfiles/digital-twin-starter/digital-twin/SKILL.md +++ b/Allfiles/digital-twin-starter/digital-twin/SKILL.md @@ -1,7 +1,7 @@ --- name: digital-twin description: | - Use for trigger phrases like "what would Marcus do", "draft in my voice", + Use for trigger phrases like "what would Avery do", "draft in my voice", "run the digital twin", "decide like me", or "check my boundary rules". --- diff --git a/Allfiles/digital-twin-starter/digital-twin/references/soul.template.md b/Allfiles/digital-twin-starter/digital-twin/references/soul.template.md index b5d60ea..eae4bb0 100644 --- a/Allfiles/digital-twin-starter/digital-twin/references/soul.template.md +++ b/Allfiles/digital-twin-starter/digital-twin/references/soul.template.md @@ -4,7 +4,7 @@ ## Identity - + ## Priority stack diff --git a/Allfiles/persona-pack/README.md b/Allfiles/persona-pack/README.md index da54394..ea57ce0 100644 --- a/Allfiles/persona-pack/README.md +++ b/Allfiles/persona-pack/README.md @@ -1,26 +1,26 @@ --- -title: Marcus Webb Persona Pack +title: Avery Washington Persona Pack --- -# Marcus Webb Persona Pack +# Avery Washington Persona Pack Entirely synthetic. Any resemblance to real people is coincidental. This pack gives hackathon teams a realistic substitute data set for building a digital twin when they cannot or do not want to use their own Microsoft 365 data. -## Who Marcus is +## Who Avery is -Marcus Webb is a Marketing Manager at Northwind Traders, a fictional B2B software company. He owns product marketing for the Atlas platform launch while also juggling demand generation, sales enablement, an external agency relationship, and urgent requests from Sales. +Avery Washington is a Marketing Manager at Northwind Traders, a fictional B2B software company. They own product marketing for the Lantern platform launch while also juggling demand generation, sales enablement, an external agency relationship, and urgent requests from Sales. ## How to use this pack -Open these files as if they were Marcus's exported work context: +Open these files as if they were Avery's exported work context: -1. Start with `context/goals-and-role.md` to see what Marcus says about his role and priorities. -2. Read `inbox/sent-mail.md` as the voice corpus. This is the best source for how Marcus writes. -3. Read `calendar/30-days.md` to see how his time is actually spent. +1. Start with `context/goals-and-role.md` to see what Avery says about their role and priorities. +2. Read `inbox/sent-mail.md` as the voice corpus. This is the best source for how Avery writes. +3. Read `calendar/30-days.md` to see how their time is actually spent. 4. Use `context/org-chart.md` to understand stakeholder dynamics. -5. Use `inbox/received-mail.md` to understand the pressure around him. +5. Use `inbox/received-mail.md` to understand the pressure they're under. 6. Only open `calendar/summary-stats.md` if you are facilitating or stuck; it gives away the patterns. -What Marcus says and what his data shows deliberately do not always match. Finding those gaps is the point. +What Avery says and what their data shows deliberately do not always match. Finding those gaps is the point. diff --git a/Allfiles/persona-pack/calendar/30-days.md b/Allfiles/persona-pack/calendar/30-days.md index dc90eeb..9163564 100644 --- a/Allfiles/persona-pack/calendar/30-days.md +++ b/Allfiles/persona-pack/calendar/30-days.md @@ -1,108 +1,108 @@ --- -title: Marcus Webb 30-Day Calendar +title: Avery Washington 30-Day Calendar --- # 30-Day Calendar ## How to read this -This is Marcus Webb's work calendar for July 2026. Categories are embedded in meeting subjects and attendee patterns rather than labeled directly, so teams can infer how he spends time. Response status is Marcus's status for the meeting. +This is Avery Washington's work calendar for July 2026. Categories are embedded in meeting subjects and attendee patterns rather than labeled directly, so teams can infer how they spend time. Response status is Avery's status for the meeting. -| Date | Time | Duration | Subject | Organizer | Attendees | Marcus response | +| Date | Time | Duration | Subject | Organizer | Attendees | Avery response | |---|---:|---:|---|---|---|---| -| Wed Jul 1 | 8:30 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Wed Jul 1 | 9:30 AM | 60m | Atlas launch war room | Marcus Webb | Marcus, Ravi, Jordan, Tessa, Helen | organizer | -| Wed Jul 1 | 11:00 AM | 30m | Sales enablement status | Dan Kowalski | Dan, Marcus, Jordan, region leads | accepted | -| Wed Jul 1 | 1:00 PM | 60m | PMM recurring status sync | Marcus Webb | Marcus, Tessa, Jordan | organizer | -| Wed Jul 1 | 2:30 PM | 30m | Agency SOW check-in | Amara Osei | Amara, Marcus, Fenwick producer | accepted | -| Thu Jul 2 | 9:00 AM | 30m | Atlas claims review | Ravi Chandra | Ravi, Marcus, Legal rep | accepted | -| Thu Jul 2 | 10:00 AM | 60m | Demand-gen weekly planning | Helen Park | Helen, Marcus, Marketing Ops | accepted | -| Thu Jul 2 | 1:00 PM | 60m | Customer call: Contoso prep and review | Tessa Lin | Tessa, Marcus, Contoso team, Dan | accepted | -| Thu Jul 2 | 3:00 PM | 30m | Agency creative route check | Amara Osei | Amara, Marcus, Fenwick creative lead | accepted | -| Fri Jul 3 | 9:00 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Fri Jul 3 | 10:00 AM | 60m | Sales collateral office hours | Dan Kowalski | Dan, Marcus, Sales managers | tentative | -| Fri Jul 3 | 1:00 PM | 180m | Protected strategy block | Marcus Webb | Marcus | declined | -| Mon Jul 6 | 8:30 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Mon Jul 6 | 9:30 AM | 60m | Atlas launch war room | Marcus Webb | Marcus, Ravi, Jordan, Tessa, Helen | organizer | -| Mon Jul 6 | 11:00 AM | 60m | Sales enablement escalation | Dan Kowalski | Dan, Marcus, Jordan, region leads | accepted | -| Mon Jul 6 | 1:00 PM | 60m | PMM recurring status sync | Marcus Webb | Marcus, Tessa, Jordan | organizer | -| Mon Jul 6 | 3:00 PM | 60m | Fenwick revised audience brief | Marcus Webb | Marcus, Amara, Fenwick strategy | organizer | -| Tue Jul 7 | 8:00 AM | 30m | Atlas launch KPI dashboard | Helen Park | Helen, Marcus, Marketing Ops | accepted | -| Tue Jul 7 | 9:00 AM | 60m | Customer call: Acme Industrial discovery | Jordan Beck | Jordan, Marcus, Acme team, Dan | accepted | -| Tue Jul 7 | 11:00 AM | 30m | Product claims office hours | Ravi Chandra | Ravi, Marcus, Tessa | accepted | -| Tue Jul 7 | 2:00 PM | 60m | Regional sales feedback loop | Dan Kowalski | Dan, Marcus, Sales managers | accepted | -| Wed Jul 8 | 7:00 AM | 60m | Atlas deck walkthrough with region leads | Dan Kowalski | Dan, Marcus, Jordan, region leads | declined | -| Wed Jul 8 | 8:30 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Wed Jul 8 | 10:00 AM | 60m | Customer call: Litware objection review | Tessa Lin | Tessa, Marcus, Litware team, Dan | accepted | -| Wed Jul 8 | 1:00 PM | 60m | PMM recurring status sync | Marcus Webb | Marcus, Tessa, Jordan | organizer | -| Wed Jul 8 | 3:00 PM | 60m | Agency creative review: Route B | Amara Osei | Amara, Marcus, Priya, Ravi | accepted | -| Thu Jul 9 | 9:00 AM | 30m | Atlas launch page copy review | Marcus Webb | Marcus, Ravi, Tessa | organizer | -| Thu Jul 9 | 10:00 AM | 60m | Demand-gen weekly planning | Helen Park | Helen, Marcus, Marketing Ops | accepted | -| Thu Jul 9 | 1:00 PM | 60m | Sales deck working session | Jordan Beck | Jordan, Marcus | accepted | -| Thu Jul 9 | 4:00 PM | 45m | Sales walkthrough: Atlas deck | Dan Kowalski | Dan, Marcus, Jordan, region leads | accepted | -| Fri Jul 10 | 9:00 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Fri Jul 10 | 10:00 AM | 60m | Launch page claims cleanup | Ravi Chandra | Ravi, Marcus, Legal rep | accepted | -| Fri Jul 10 | 12:00 PM | 30m | FAQ review with Tessa | Tessa Lin | Tessa, Marcus | tentative | -| Fri Jul 10 | 1:00 PM | 180m | Protected strategy block | Marcus Webb | Marcus | tentative | -| Fri Jul 10 | 2:30 PM | 60m | Paid media trafficking readiness | Helen Park | Helen, Marcus, Marketing Ops | accepted | -| Mon Jul 13 | 8:30 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Mon Jul 13 | 9:30 AM | 60m | Atlas launch war room | Marcus Webb | Marcus, Ravi, Jordan, Tessa, Helen | organizer | -| Mon Jul 13 | 11:00 AM | 60m | Customer call: Acme Industrial follow-up | Jordan Beck | Jordan, Marcus, Acme team, Dan | accepted | -| Mon Jul 13 | 1:00 PM | 60m | PMM recurring status sync | Marcus Webb | Marcus, Tessa, Jordan | organizer | -| Mon Jul 13 | 3:00 PM | 60m | Fenwick asset revision review | Amara Osei | Amara, Marcus, Fenwick design | accepted | -| Tue Jul 14 | 9:00 AM | 60m | Customer call: Contoso objections | Tessa Lin | Tessa, Marcus, Contoso team, Dan | accepted | -| Tue Jul 14 | 11:00 AM | 30m | Product claims office hours | Ravi Chandra | Ravi, Marcus, Jordan | accepted | -| Tue Jul 14 | 3:00 PM | 60m | Pipeline and MQL routing review | Helen Park | Helen, Marcus, SDR lead | accepted | -| Tue Jul 14 | 4:30 PM | 30m | Agency SOW burn review | Amara Osei | Amara, Marcus, Fenwick producer | accepted | -| Wed Jul 15 | 8:30 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Wed Jul 15 | 10:00 AM | 60m | Customer call: Litware launch validation | Tessa Lin | Tessa, Marcus, Litware team, Dan | accepted | -| Wed Jul 15 | 1:00 PM | 60m | PMM recurring status sync | Marcus Webb | Marcus, Tessa, Jordan | organizer | -| Wed Jul 15 | 2:00 PM | 60m | Regional sales feedback loop | Dan Kowalski | Dan, Marcus, Sales managers | accepted | -| Wed Jul 15 | 4:00 PM | 90m | Sales deck finalization | Jordan Beck | Jordan, Marcus | accepted | -| Thu Jul 16 | 9:00 AM | 30m | Implementation timing language | Ravi Chandra | Ravi, Marcus | accepted | -| Thu Jul 16 | 10:00 AM | 60m | Demand-gen weekly planning | Helen Park | Helen, Marcus, Marketing Ops | accepted | -| Thu Jul 16 | 1:00 PM | 60m | FAQ and objection handling | Tessa Lin | Tessa, Marcus, Jordan | accepted | -| Thu Jul 16 | 4:00 PM | 60m | Sales walkthrough: final Atlas deck | Dan Kowalski | Dan, Marcus, Jordan, region leads | accepted | -| Fri Jul 17 | 9:00 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Fri Jul 17 | 10:00 AM | 60m | Launch readiness checkpoint | Marcus Webb | Marcus, Priya, Ravi, Helen, Dan | organizer | -| Fri Jul 17 | 1:00 PM | 180m | Protected strategy block | Marcus Webb | Marcus | declined | -| Fri Jul 17 | 2:00 PM | 60m | Executive launch prep conflict hold | Priya Raghavan | Priya, Marcus | accepted | -| Mon Jul 20 | 8:30 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Mon Jul 20 | 9:30 AM | 60m | Atlas launch war room | Marcus Webb | Marcus, Ravi, Jordan, Tessa, Helen | organizer | -| Mon Jul 20 | 11:00 AM | 60m | Customer call: Northstar Foods readiness | Jordan Beck | Jordan, Marcus, Northstar team, Dan | accepted | -| Mon Jul 20 | 1:00 PM | 60m | PMM recurring status sync | Marcus Webb | Marcus, Tessa, Jordan | organizer | -| Mon Jul 20 | 3:00 PM | 60m | Agency launch asset QA | Amara Osei | Amara, Marcus, Fenwick design | accepted | -| Tue Jul 21 | 9:00 AM | 60m | Customer call: Fabrikam ops review | Tessa Lin | Tessa, Marcus, Fabrikam team, Dan | accepted | -| Tue Jul 21 | 11:00 AM | 30m | Product claims office hours | Ravi Chandra | Ravi, Marcus, Legal rep | accepted | -| Tue Jul 21 | 2:00 PM | 60m | SDR routing and MQL quality | Helen Park | Helen, Marcus, SDR lead | accepted | -| Tue Jul 21 | 4:00 PM | 45m | Sales office hours: launch objections | Dan Kowalski | Dan, Marcus, region leads | accepted | -| Wed Jul 22 | 8:30 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Wed Jul 22 | 10:00 AM | 60m | Customer call: Wingtip Toys validation | Jordan Beck | Jordan, Marcus, Wingtip team, Dan | accepted | -| Wed Jul 22 | 1:00 PM | 60m | PMM recurring status sync | Marcus Webb | Marcus, Tessa, Jordan | organizer | -| Wed Jul 22 | 3:00 PM | 60m | Launch gate prep | Marcus Webb | Marcus, Priya, Ravi, Helen | organizer | -| Thu Jul 23 | 9:00 AM | 90m | ELT launch gate review | Priya Raghavan | Priya, Marcus, ELT, Ravi, Dan | accepted | -| Thu Jul 23 | 11:00 AM | 60m | Demand-gen weekly planning | Helen Park | Helen, Marcus, Marketing Ops | accepted | -| Thu Jul 23 | 1:00 PM | 60m | Customer call: Contoso final Q&A | Tessa Lin | Tessa, Marcus, Contoso team, Dan | accepted | -| Thu Jul 23 | 3:00 PM | 60m | Fenwick final handoff review | Amara Osei | Amara, Marcus, Fenwick producer | accepted | -| Fri Jul 24 | 9:00 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Fri Jul 24 | 10:00 AM | 60m | Launch week go/no-go | Marcus Webb | Marcus, Priya, Ravi, Helen, Dan | organizer | -| Fri Jul 24 | 1:00 PM | 180m | Protected strategy block | Marcus Webb | Marcus | declined | -| Fri Jul 24 | 1:30 PM | 120m | Sales launch readiness fire drill | Dan Kowalski | Dan, Marcus, Jordan, Tessa, region leads | accepted | -| Fri Jul 24 | 4:00 PM | 60m | Agency final asset delivery | Amara Osei | Amara, Marcus, Fenwick producer | accepted | -| Mon Jul 27 | 8:30 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Mon Jul 27 | 9:30 AM | 60m | Atlas post-launch war room | Marcus Webb | Marcus, Ravi, Jordan, Tessa, Helen | organizer | -| Mon Jul 27 | 11:00 AM | 60m | Sales adoption review | Dan Kowalski | Dan, Marcus, Jordan, Sales Ops | accepted | -| Mon Jul 27 | 1:00 PM | 60m | PMM recurring status sync | Marcus Webb | Marcus, Tessa, Jordan | organizer | -| Mon Jul 27 | 3:00 PM | 60m | MQL quality review | Helen Park | Helen, Marcus, SDR lead | accepted | -| Tue Jul 28 | 9:00 AM | 60m | Customer call: Acme Industrial post-launch | Jordan Beck | Jordan, Marcus, Acme team, Dan | accepted | -| Tue Jul 28 | 11:00 AM | 30m | Product feedback triage | Ravi Chandra | Ravi, Marcus, Tessa | accepted | -| Tue Jul 28 | 2:00 PM | 60m | Agency performance readout | Amara Osei | Amara, Marcus, Fenwick analytics | accepted | -| Tue Jul 28 | 4:00 PM | 45m | SDR rejection reasons review | Helen Park | Helen, Marcus, SDR lead | accepted | -| Wed Jul 29 | 8:30 AM | 30m | Marketing leadership standup | Priya Raghavan | Priya, Marcus, Helen, PMM leads | accepted | -| Wed Jul 29 | 10:00 AM | 60m | Customer call: Litware post-launch | Tessa Lin | Tessa, Marcus, Litware team, Dan | accepted | -| Wed Jul 29 | 1:00 PM | 60m | PMM recurring status sync | Marcus Webb | Marcus, Tessa, Jordan | organizer | -| Wed Jul 29 | 3:00 PM | 60m | July closeout readout prep | Marcus Webb | Marcus, Priya, Helen | organizer | -| Thu Jul 30 | 9:00 AM | 60m | Demand-gen weekly planning | Helen Park | Helen, Marcus, Marketing Ops | accepted | -| Thu Jul 30 | 11:00 AM | 60m | Sales enablement retro | Dan Kowalski | Dan, Marcus, Jordan, Tessa | accepted | -| Thu Jul 30 | 1:00 PM | 60m | Atlas product feedback review | Ravi Chandra | Ravi, Marcus, Tessa, Jordan | accepted | -| Thu Jul 30 | 3:00 PM | 60m | Fenwick July SOW closeout | Amara Osei | Amara, Marcus, Fenwick account team | accepted | +| Wed Jul 1 | 8:30 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Wed Jul 1 | 9:30 AM | 60m | Lantern launch war room | Avery Washington | Avery, Miguel, Caleb, Maya, Serena | organizer | +| Wed Jul 1 | 11:00 AM | 30m | Sales enablement status | Graham Barnes | Graham, Avery, Caleb, region leads | accepted | +| Wed Jul 1 | 1:00 PM | 60m | PMM recurring status sync | Avery Washington | Avery, Maya, Caleb | organizer | +| Wed Jul 1 | 2:30 PM | 30m | Agency SOW check-in | Amara White | Amara, Avery, First Up Consultants producer | accepted | +| Thu Jul 2 | 9:00 AM | 30m | Lantern claims review | Miguel Reyes | Miguel, Avery, Legal rep | accepted | +| Thu Jul 2 | 10:00 AM | 60m | Demand-gen weekly planning | Serena Davis | Serena, Avery, Marketing Ops | accepted | +| Thu Jul 2 | 1:00 PM | 60m | Customer call: Contoso prep and review | Maya Robinson | Maya, Avery, Contoso team, Graham | accepted | +| Thu Jul 2 | 3:00 PM | 30m | Agency creative route check | Amara White | Amara, Avery, First Up Consultants creative lead | accepted | +| Fri Jul 3 | 9:00 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Fri Jul 3 | 10:00 AM | 60m | Sales collateral office hours | Graham Barnes | Graham, Avery, Sales managers | tentative | +| Fri Jul 3 | 1:00 PM | 180m | Protected strategy block | Avery Washington | Avery | declined | +| Mon Jul 6 | 8:30 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Mon Jul 6 | 9:30 AM | 60m | Lantern launch war room | Avery Washington | Avery, Miguel, Caleb, Maya, Serena | organizer | +| Mon Jul 6 | 11:00 AM | 60m | Sales enablement escalation | Graham Barnes | Graham, Avery, Caleb, region leads | accepted | +| Mon Jul 6 | 1:00 PM | 60m | PMM recurring status sync | Avery Washington | Avery, Maya, Caleb | organizer | +| Mon Jul 6 | 3:00 PM | 60m | First Up Consultants revised audience brief | Avery Washington | Avery, Amara, First Up Consultants strategy | organizer | +| Tue Jul 7 | 8:00 AM | 30m | Lantern launch KPI dashboard | Serena Davis | Serena, Avery, Marketing Ops | accepted | +| Tue Jul 7 | 9:00 AM | 60m | Customer call: Tailwind Traders discovery | Caleb Miller | Caleb, Avery, Tailwind Traders team, Graham | accepted | +| Tue Jul 7 | 11:00 AM | 30m | Product claims office hours | Miguel Reyes | Miguel, Avery, Maya | accepted | +| Tue Jul 7 | 2:00 PM | 60m | Regional sales feedback loop | Graham Barnes | Graham, Avery, Sales managers | accepted | +| Wed Jul 8 | 7:00 AM | 60m | Lantern deck walkthrough with region leads | Graham Barnes | Graham, Avery, Caleb, region leads | declined | +| Wed Jul 8 | 8:30 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Wed Jul 8 | 10:00 AM | 60m | Customer call: Lakeshore Retail objection review | Maya Robinson | Maya, Avery, Lakeshore Retail team, Graham | accepted | +| Wed Jul 8 | 1:00 PM | 60m | PMM recurring status sync | Avery Washington | Avery, Maya, Caleb | organizer | +| Wed Jul 8 | 3:00 PM | 60m | Agency creative review: Route B | Amara White | Amara, Avery, Victoria, Miguel | accepted | +| Thu Jul 9 | 9:00 AM | 30m | Lantern launch page copy review | Avery Washington | Avery, Miguel, Maya | organizer | +| Thu Jul 9 | 10:00 AM | 60m | Demand-gen weekly planning | Serena Davis | Serena, Avery, Marketing Ops | accepted | +| Thu Jul 9 | 1:00 PM | 60m | Sales deck working session | Caleb Miller | Caleb, Avery | accepted | +| Thu Jul 9 | 4:00 PM | 45m | Sales walkthrough: Lantern deck | Graham Barnes | Graham, Avery, Caleb, region leads | accepted | +| Fri Jul 10 | 9:00 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Fri Jul 10 | 10:00 AM | 60m | Launch page claims cleanup | Miguel Reyes | Miguel, Avery, Legal rep | accepted | +| Fri Jul 10 | 12:00 PM | 30m | FAQ review with Maya | Maya Robinson | Maya, Avery | tentative | +| Fri Jul 10 | 1:00 PM | 180m | Protected strategy block | Avery Washington | Avery | tentative | +| Fri Jul 10 | 2:30 PM | 60m | Paid media trafficking readiness | Serena Davis | Serena, Avery, Marketing Ops | accepted | +| Mon Jul 13 | 8:30 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Mon Jul 13 | 9:30 AM | 60m | Lantern launch war room | Avery Washington | Avery, Miguel, Caleb, Maya, Serena | organizer | +| Mon Jul 13 | 11:00 AM | 60m | Customer call: Tailwind Traders follow-up | Caleb Miller | Caleb, Avery, Tailwind Traders team, Graham | accepted | +| Mon Jul 13 | 1:00 PM | 60m | PMM recurring status sync | Avery Washington | Avery, Maya, Caleb | organizer | +| Mon Jul 13 | 3:00 PM | 60m | First Up Consultants asset revision review | Amara White | Amara, Avery, First Up Consultants design | accepted | +| Tue Jul 14 | 9:00 AM | 60m | Customer call: Contoso objections | Maya Robinson | Maya, Avery, Contoso team, Graham | accepted | +| Tue Jul 14 | 11:00 AM | 30m | Product claims office hours | Miguel Reyes | Miguel, Avery, Caleb | accepted | +| Tue Jul 14 | 3:00 PM | 60m | Pipeline and MQL routing review | Serena Davis | Serena, Avery, SDR lead | accepted | +| Tue Jul 14 | 4:30 PM | 30m | Agency SOW burn review | Amara White | Amara, Avery, First Up Consultants producer | accepted | +| Wed Jul 15 | 8:30 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Wed Jul 15 | 10:00 AM | 60m | Customer call: Lakeshore Retail launch validation | Maya Robinson | Maya, Avery, Lakeshore Retail team, Graham | accepted | +| Wed Jul 15 | 1:00 PM | 60m | PMM recurring status sync | Avery Washington | Avery, Maya, Caleb | organizer | +| Wed Jul 15 | 2:00 PM | 60m | Regional sales feedback loop | Graham Barnes | Graham, Avery, Sales managers | accepted | +| Wed Jul 15 | 4:00 PM | 90m | Sales deck finalization | Caleb Miller | Caleb, Avery | accepted | +| Thu Jul 16 | 9:00 AM | 30m | Implementation timing language | Miguel Reyes | Miguel, Avery | accepted | +| Thu Jul 16 | 10:00 AM | 60m | Demand-gen weekly planning | Serena Davis | Serena, Avery, Marketing Ops | accepted | +| Thu Jul 16 | 1:00 PM | 60m | FAQ and objection handling | Maya Robinson | Maya, Avery, Caleb | accepted | +| Thu Jul 16 | 4:00 PM | 60m | Sales walkthrough: final Lantern deck | Graham Barnes | Graham, Avery, Caleb, region leads | accepted | +| Fri Jul 17 | 9:00 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Fri Jul 17 | 10:00 AM | 60m | Launch readiness checkpoint | Avery Washington | Avery, Victoria, Miguel, Serena, Graham | organizer | +| Fri Jul 17 | 1:00 PM | 180m | Protected strategy block | Avery Washington | Avery | declined | +| Fri Jul 17 | 2:00 PM | 60m | Executive launch prep conflict hold | Victoria Burke | Victoria, Avery | accepted | +| Mon Jul 20 | 8:30 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Mon Jul 20 | 9:30 AM | 60m | Lantern launch war room | Avery Washington | Avery, Miguel, Caleb, Maya, Serena | organizer | +| Mon Jul 20 | 11:00 AM | 60m | Customer call: Northstar Foods readiness | Caleb Miller | Caleb, Avery, Northstar team, Graham | accepted | +| Mon Jul 20 | 1:00 PM | 60m | PMM recurring status sync | Avery Washington | Avery, Maya, Caleb | organizer | +| Mon Jul 20 | 3:00 PM | 60m | Agency launch asset QA | Amara White | Amara, Avery, First Up Consultants design | accepted | +| Tue Jul 21 | 9:00 AM | 60m | Customer call: Fabrikam ops review | Maya Robinson | Maya, Avery, Fabrikam team, Graham | accepted | +| Tue Jul 21 | 11:00 AM | 30m | Product claims office hours | Miguel Reyes | Miguel, Avery, Legal rep | accepted | +| Tue Jul 21 | 2:00 PM | 60m | SDR routing and MQL quality | Serena Davis | Serena, Avery, SDR lead | accepted | +| Tue Jul 21 | 4:00 PM | 45m | Sales office hours: launch objections | Graham Barnes | Graham, Avery, region leads | accepted | +| Wed Jul 22 | 8:30 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Wed Jul 22 | 10:00 AM | 60m | Customer call: Wingtip Toys validation | Caleb Miller | Caleb, Avery, Wingtip team, Graham | accepted | +| Wed Jul 22 | 1:00 PM | 60m | PMM recurring status sync | Avery Washington | Avery, Maya, Caleb | organizer | +| Wed Jul 22 | 3:00 PM | 60m | Launch gate prep | Avery Washington | Avery, Victoria, Miguel, Serena | organizer | +| Thu Jul 23 | 9:00 AM | 90m | ELT launch gate review | Victoria Burke | Victoria, Avery, ELT, Miguel, Graham | accepted | +| Thu Jul 23 | 11:00 AM | 60m | Demand-gen weekly planning | Serena Davis | Serena, Avery, Marketing Ops | accepted | +| Thu Jul 23 | 1:00 PM | 60m | Customer call: Contoso final Q&A | Maya Robinson | Maya, Avery, Contoso team, Graham | accepted | +| Thu Jul 23 | 3:00 PM | 60m | First Up Consultants final handoff review | Amara White | Amara, Avery, First Up Consultants producer | accepted | +| Fri Jul 24 | 9:00 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Fri Jul 24 | 10:00 AM | 60m | Launch week go/no-go | Avery Washington | Avery, Victoria, Miguel, Serena, Graham | organizer | +| Fri Jul 24 | 1:00 PM | 180m | Protected strategy block | Avery Washington | Avery | declined | +| Fri Jul 24 | 1:30 PM | 120m | Sales launch readiness fire drill | Graham Barnes | Graham, Avery, Caleb, Maya, region leads | accepted | +| Fri Jul 24 | 4:00 PM | 60m | Agency final asset delivery | Amara White | Amara, Avery, First Up Consultants producer | accepted | +| Mon Jul 27 | 8:30 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Mon Jul 27 | 9:30 AM | 60m | Lantern post-launch war room | Avery Washington | Avery, Miguel, Caleb, Maya, Serena | organizer | +| Mon Jul 27 | 11:00 AM | 60m | Sales adoption review | Graham Barnes | Graham, Avery, Caleb, Sales Ops | accepted | +| Mon Jul 27 | 1:00 PM | 60m | PMM recurring status sync | Avery Washington | Avery, Maya, Caleb | organizer | +| Mon Jul 27 | 3:00 PM | 60m | MQL quality review | Serena Davis | Serena, Avery, SDR lead | accepted | +| Tue Jul 28 | 9:00 AM | 60m | Customer call: Tailwind Traders post-launch | Caleb Miller | Caleb, Avery, Tailwind Traders team, Graham | accepted | +| Tue Jul 28 | 11:00 AM | 30m | Product feedback triage | Miguel Reyes | Miguel, Avery, Maya | accepted | +| Tue Jul 28 | 2:00 PM | 60m | Agency performance readout | Amara White | Amara, Avery, First Up Consultants analytics | accepted | +| Tue Jul 28 | 4:00 PM | 45m | SDR rejection reasons review | Serena Davis | Serena, Avery, SDR lead | accepted | +| Wed Jul 29 | 8:30 AM | 30m | Marketing leadership standup | Victoria Burke | Victoria, Avery, Serena, PMM leads | accepted | +| Wed Jul 29 | 10:00 AM | 60m | Customer call: Lakeshore Retail post-launch | Maya Robinson | Maya, Avery, Lakeshore Retail team, Graham | accepted | +| Wed Jul 29 | 1:00 PM | 60m | PMM recurring status sync | Avery Washington | Avery, Maya, Caleb | organizer | +| Wed Jul 29 | 3:00 PM | 60m | July closeout readout prep | Avery Washington | Avery, Victoria, Serena | organizer | +| Thu Jul 30 | 9:00 AM | 60m | Demand-gen weekly planning | Serena Davis | Serena, Avery, Marketing Ops | accepted | +| Thu Jul 30 | 11:00 AM | 60m | Sales enablement retro | Graham Barnes | Graham, Avery, Caleb, Maya | accepted | +| Thu Jul 30 | 1:00 PM | 60m | Lantern product feedback review | Miguel Reyes | Miguel, Avery, Maya, Caleb | accepted | +| Thu Jul 30 | 3:00 PM | 60m | First Up Consultants July SOW closeout | Amara White | Amara, Avery, First Up Consultants account team | accepted | diff --git a/Allfiles/persona-pack/calendar/summary-stats.md b/Allfiles/persona-pack/calendar/summary-stats.md index 0cd8e82..893b223 100644 --- a/Allfiles/persona-pack/calendar/summary-stats.md +++ b/Allfiles/persona-pack/calendar/summary-stats.md @@ -1,5 +1,5 @@ --- -title: Marcus Webb Calendar Summary Stats +title: Avery Washington Calendar Summary Stats --- # Calendar Summary Stats @@ -25,10 +25,10 @@ This file gives away the answers. It is intended for facilitators or teams that | Category | Hours | Notes | |---|---:|---| | Recurring status meetings | 19.5 | Leadership standups, PMM status syncs, weekly planning, office hours | -| Atlas launch execution | 13.5 | War rooms, launch gates, page copy, go/no-go, launch prep | +| Lantern launch execution | 13.5 | War rooms, launch gates, page copy, go/no-go, launch prep | | Sales enablement / Sales pressure | 13.25 | Deck reviews, sales walkthroughs, adoption reviews, fire drills | -| Customer calls with Tessa or Jordan | 10.0 | Every listed customer call includes Marcus | -| Agency / Fenwick work | 8.75 | SOW, creative reviews, asset QA, closeout | +| Customer calls with Maya or Caleb | 10.0 | Every listed customer call includes Avery | +| Agency / First Up Consultants work | 8.75 | SOW, creative reviews, asset QA, closeout | | Demand gen / MQL quality | 7.25 | MQL target, routing, paid media, SDR quality | | Protected strategy blocks | 12.0 scheduled | 9.0 declined, 3.0 tentative, 0 accepted | @@ -36,10 +36,10 @@ This file gives away the answers. It is intended for facilitators or teams that ## Customer-call coverage -| Direct report | Customer calls listed | Calls Marcus attended | Coverage | +| Direct report | Customer calls listed | Calls Avery attended | Coverage | |---|---:|---:|---:| -| Tessa Lin | 7 | 7 | 100% | -| Jordan Beck | 6 | 6 | 100% | +| Maya Robinson | 7 | 7 | 100% | +| Caleb Miller | 6 | 6 | 100% | ## Friday strategy block status @@ -56,14 +56,14 @@ Calculated from received messages and matching sent replies in the inbox corpus. | Sender | Avg response latency | Pattern | |---|---:|---| -| Priya Raghavan | 8 minutes | Marcus replies almost immediately | -| Dan Kowalski | 32 minutes | Fast when escalated, usually defensive | -| Helen Park | 74 minutes | Same-day, collaborative | -| Ravi Chandra | 82 minutes | Same-day when claims block launch | -| Amara Osei | 18 minutes | Fast when agency work is on critical path | -| Tessa Lin | 24 hours 37 minutes | Often next day despite supportive tone | -| Jordan Beck | 2 days 18 hours | Delayed unless tied to Sales escalation | +| Victoria Burke | 8 minutes | Avery replies almost immediately | +| Graham Barnes | 32 minutes | Fast when escalated, usually defensive | +| Serena Davis | 74 minutes | Same-day, collaborative | +| Miguel Reyes | 82 minutes | Same-day when claims block launch | +| Amara White | 18 minutes | Fast when agency work is on critical path | +| Maya Robinson | 24 hours 37 minutes | Often next day despite supportive tone | +| Caleb Miller | 2 days 18 hours | Delayed unless tied to Sales escalation | ## Facilitator note -Useful digital-twin rules should separate Marcus's stated identity from observable behavior: who gets instant attention, which commitments survive pressure, and which phrases signal friction versus trust. +Useful digital-twin rules should separate Avery's stated identity from observable behavior: who gets instant attention, which commitments survive pressure, and which phrases signal friction versus trust. diff --git a/Allfiles/persona-pack/context/goals-and-role.md b/Allfiles/persona-pack/context/goals-and-role.md index 228245a..ec285e0 100644 --- a/Allfiles/persona-pack/context/goals-and-role.md +++ b/Allfiles/persona-pack/context/goals-and-role.md @@ -1,21 +1,21 @@ --- -title: Marcus Webb Goals and Role +title: Avery Washington Goals and Role --- # Goals and Role -Quick one — if I had to describe my job, I would say I make Atlas understandable enough that Sales can sell it, Product can stand behind it, and Marketing can create demand without overpromising. +Quick one — if I had to describe my job, I would say I make Lantern understandable enough that Sales can sell it, Product can stand behind it, and Marketing can create demand without overpromising. -My top priority is the Atlas platform launch. Everything else should support that. +My top priority is the Lantern platform launch. Everything else should support that. ## What I am trying to accomplish -- Launch Atlas with a clear buyer narrative for operations leaders at mid-market distributors. +- Launch Lantern with a clear buyer narrative for operations leaders at mid-market distributors. - Keep Sales confident without letting the field invent claims we cannot defend. - Build a demand-gen motion that values qualified pipeline over cheap MQL volume. -- Help Tessa and Jordan grow into owners, not task-takers. -- Keep Fenwick focused on useful launch assets instead of agency theater. -- Make Priya's job easier by surfacing risks early and bringing recommendations, not noise. +- Help Maya and Caleb grow into owners, not task-takers. +- Keep First Up Consultants focused on useful launch assets instead of agency theater. +- Make Victoria's job easier by surfacing risks early and bringing recommendations, not noise. ## How I think about decisions @@ -31,17 +31,17 @@ My default order is: ## How I want the team to work -Tessa should get more room to own content and customer learning. Jordan should run more sales enablement decisions without me in the middle. I do not want to be a bottleneck, and I am trying to stay out of work they can lead. +Maya should get more room to own content and customer learning. Caleb should run more sales enablement decisions without me in the middle. I do not want to be a bottleneck, and I am trying to stay out of work they can lead. -That said, Atlas is a high-visibility launch, and I would rather sit in a few extra conversations now than discover a messaging problem after the field has repeated it for two weeks. +That said, Lantern is a high-visibility launch, and I would rather sit in a few extra conversations now than discover a messaging problem after the field has repeated it for two weeks. ## Current commitments -- Priya gets a clean launch gate readout before ELT prep. -- Dan gets field-ready collateral with claims Product will defend. -- Helen gets a demand-gen story that does not flood SDRs with bad leads. -- Ravi gets final say on technical and implementation claims. -- Fenwick gets stable inputs and timely feedback inside the SOW. +- Victoria gets a clean launch gate readout before ELT prep. +- Graham gets field-ready collateral with claims Product will defend. +- Serena gets a demand-gen story that does not flood SDRs with bad leads. +- Miguel gets final say on technical and implementation claims. +- First Up Consultants gets stable inputs and timely feedback inside the SOW. Circling back to this list weekly keeps me honest. Let me know if that's a problem. diff --git a/Allfiles/persona-pack/context/org-chart.md b/Allfiles/persona-pack/context/org-chart.md index 434d325..d5be46a 100644 --- a/Allfiles/persona-pack/context/org-chart.md +++ b/Allfiles/persona-pack/context/org-chart.md @@ -1,30 +1,30 @@ --- -title: Marcus Webb Org Chart +title: Avery Washington Org Chart --- # Org Chart and Relationship Map ## Northwind Traders marketing structure -- Priya Raghavan, VP Marketing, manages Marcus Webb and Helen Park. -- Marcus Webb, Marketing Manager, owns Atlas product marketing. -- Tessa Lin, Associate Product Marketing Manager, reports to Marcus. -- Jordan Beck, Senior Product Marketing Manager, reports to Marcus. -- Helen Park, Demand Gen Manager, is Marcus's peer. -- Ravi Chandra, Product Manager for Atlas, sits in Product and is Marcus's primary claims and roadmap dependency. -- Dan Kowalski, Sales Director, sits in Sales and is Marcus's main enablement stakeholder. -- Amara Osei, Account Lead at Fenwick & Co, is external and manages the agency team supporting launch creative. +- Victoria Burke, VP Marketing, manages Avery Washington and Serena Davis. +- Avery Washington, Marketing Manager, owns Lantern product marketing. +- Maya Robinson, Associate Product Marketing Manager, reports to Avery. +- Caleb Miller, Senior Product Marketing Manager, reports to Avery. +- Serena Davis, Demand Gen Manager, is Avery's peer. +- Miguel Reyes, Product Manager for Lantern, sits in Product and is Avery's primary claims and roadmap dependency. +- Graham Barnes, Sales Director, sits in Sales and is Avery's main enablement stakeholder. +- Amara White, Account Lead at First Up Consultants, is external and manages the agency team supporting launch creative. -## Marcus's relationship notes +## Avery's relationship notes -- Priya Raghavan — my boss; demanding, terse, and usually right about what will matter to executives. -- Dan Kowalski — peer with friction; he wants collateral now and assumes Marketing is slowing Sales down. -- Tessa Lin — direct report; junior, eager, strong instincts, needs help prioritizing what matters first. -- Jordan Beck — direct report; senior, capable, should own more decisions without waiting for me. -- Amara Osei — external agency lead; professional, responsive, needs precise inputs to keep the SOW from expanding. -- Ravi Chandra — Atlas Product Manager; I depend on him for defensible specs and claims approval. -- Helen Park — demand-gen peer; collaborative, practical, and focused on lead quality rather than vanity volume. +- Victoria Burke — my boss; demanding, terse, and usually right about what will matter to executives. +- Graham Barnes — peer with friction; he wants collateral now and assumes Marketing is slowing Sales down. +- Maya Robinson — direct report; junior, eager, strong instincts, needs help prioritizing what matters first. +- Caleb Miller — direct report; senior, capable, should own more decisions without waiting for me. +- Amara White — external agency lead; professional, responsive, needs precise inputs to keep the SOW from expanding. +- Miguel Reyes — Lantern Product Manager; I depend on him for defensible specs and claims approval. +- Serena Davis — demand-gen peer; collaborative, practical, and focused on lead quality rather than vanity volume. ## Fictional email domain -All Northwind Traders employees use `@northwindtraders.com`. Fenwick & Co contacts in this pack use synthetic external addresses. +All Northwind Traders employees use `@northwindtraders.com`. First Up Consultants contacts in this pack use synthetic external addresses. diff --git a/Allfiles/persona-pack/context/the-twist.md b/Allfiles/persona-pack/context/the-twist.md index 46caa22..4f97c1b 100644 --- a/Allfiles/persona-pack/context/the-twist.md +++ b/Allfiles/persona-pack/context/the-twist.md @@ -1,22 +1,22 @@ --- -title: Marcus Webb Mid-Build Twist +title: Avery Washington Mid-Build Twist --- # Mid-Build Twist ## Inbound email -**From:** Priya Raghavan -**To:** Marcus Webb +**From:** Victoria Burke +**To:** Avery Washington **Date:** Wed, Jul 29, 2026 8:49 PM **Subject:** Exec reprioritization: partner board readout before Sales retro -Marcus — change of plan. ELT wants an Atlas partner-board readout by tomorrow at 4 PM. I need you to repurpose the Sales enablement retro work into a tighter executive story: launch performance, risk, and what we are doing about lead quality. +Avery — change of plan. ELT wants an Lantern partner-board readout by tomorrow at 4 PM. I need you to repurpose the Sales enablement retro work into a tighter executive story: launch performance, risk, and what we are doing about lead quality. -Do this before Dan's Sales retro. If he pushes back, tell him I made the call. I need a draft by noon. +Do this before Graham's Sales retro. If he pushes back, tell him I made the call. I need a draft by noon. -Priya +Victoria ## Facilitator guidance -Hand this out around minute 55, after teams have inferred Marcus's voice and commitments; it forces a choice between Priya's executive demand and Marcus's promise to Dan to prioritize the Sales feedback loop. +Hand this out around minute 55, after teams have inferred Avery's voice and commitments; it forces a choice between Victoria's executive demand and Avery's promise to Graham to prioritize the Sales feedback loop. diff --git a/Allfiles/persona-pack/inbox/received-mail.md b/Allfiles/persona-pack/inbox/received-mail.md index 2f24f00..77050c3 100644 --- a/Allfiles/persona-pack/inbox/received-mail.md +++ b/Allfiles/persona-pack/inbox/received-mail.md @@ -1,138 +1,138 @@ --- -title: Marcus Webb Received Mail +title: Avery Washington Received Mail --- # Received Mail -## 1. From: Priya Raghavan +## 1. From: Victoria Burke **Date:** Wed, Jul 1, 2026 8:04 AM -**Subject:** Atlas launch narrative +**Subject:** Lantern launch narrative -Marcus — I need a real date for the Atlas narrative checkpoint, not "soon." Sales and Product are already using different words. Send me the path and the risks this morning. +Avery — I need a real date for the Lantern narrative checkpoint, not "soon." Sales and Product are already using different words. Send me the path and the risks this morning. -Priya +Victoria --- -## 2. From: Dan Kowalski +## 2. From: Graham Barnes **Date:** Wed, Jul 1, 2026 9:11 AM **Subject:** One-pager -Marcus, the region leads are asking for the Atlas one-pager again. If Marketing cannot get them something by tomorrow, they will make their own. That will be worse for everyone, but I cannot keep telling them to wait. +Avery, the region leads are asking for the Lantern one-pager again. If Marketing cannot get them something by tomorrow, they will make their own. That will be worse for everyone, but I cannot keep telling them to wait. -Dan +Graham --- -## 3. From: Tessa Lin +## 3. From: Maya Robinson **Date:** Wed, Jul 1, 2026 10:25 AM **Subject:** Contoso prep doc -Hi Marcus — I put together the prep doc for the Contoso call. I am not sure the objection section is strong enough yet. Could you look before tomorrow morning? +Hi Avery — I put together the prep doc for the Contoso call. I am not sure the objection section is strong enough yet. Could you look before tomorrow morning? -Tessa +Maya --- -## 4. From: Ravi Chandra +## 4. From: Miguel Reyes **Date:** Thu, Jul 2, 2026 9:42 AM -**Subject:** Re: Atlas claims +**Subject:** Re: Lantern claims -I can approve most of the Atlas claims today, but the reconciliation speed proof point needs a caveat. We have evidence from beta customers, not broad GA usage. Please do not let Sales call it guaranteed time savings. +I can approve most of the Lantern claims today, but the reconciliation speed proof point needs a caveat. We have evidence from beta customers, not broad GA usage. Please do not let Sales call it guaranteed time savings. -Ravi +Miguel --- -## 5. From: Amara Osei +## 5. From: Amara White **Date:** Thu, Jul 2, 2026 9:58 AM -**Subject:** Atlas campaign routes +**Subject:** Lantern campaign routes -Hello Marcus, +Hello Avery, -Our creative team is building two Atlas campaign routes based on the original kickoff brief. Before we move into production comps, can you confirm whether the buyer is still IT-led? Some of the notes from yesterday's stakeholder call sounded more operations-focused. +Our creative team is building two Lantern campaign routes based on the original kickoff brief. Before we move into production comps, can you confirm whether the buyer is still IT-led? Some of the notes from yesterday's stakeholder call sounded more operations-focused. Best, Amara --- -## 6. From: Jordan Beck +## 6. From: Caleb Miller **Date:** Fri, Jul 3, 2026 2:18 PM **Subject:** Sales deck ownership -Marcus, I can own the sales deck next week. I need you to confirm whether Dan gets review rights or approval rights. If it is approval, we should plan for churn. +Avery, I can own the sales deck next week. I need you to confirm whether Graham gets review rights or approval rights. If it is approval, we should plan for churn. -Jordan +Caleb --- -## 7. From: Helen Park +## 7. From: Serena Davis **Date:** Thu, Jul 2, 2026 3:37 PM **Subject:** July pilot target -Marcus, can you live with a 420 MQL target for the Atlas pilot if we weight the mix toward webinar and content syndication? Paid social can scale, but I do not want a pile of low-intent leads that Sales rejects. +Avery, can you live with a 420 MQL target for the Lantern pilot if we weight the mix toward webinar and content syndication? Paid social can scale, but I do not want a pile of low-intent leads that Sales rejects. -Helen +Serena --- -## 8. From: Dan Kowalski +## 8. From: Graham Barnes **Date:** Tue, Jul 7, 2026 4:49 PM -**Subject:** Field needs the Atlas deck +**Subject:** Field needs the Lantern deck -The field needs the Atlas deck before tomorrow's region call. I put 7 AM on your calendar so we can walk everyone through it. I know it is early, but this launch is already late from Sales' perspective. +The field needs the Lantern deck before tomorrow's region call. I put 7 AM on your calendar so we can walk everyone through it. I know it is early, but this launch is already late from Sales' perspective. -Dan +Graham --- -## 9. From: Priya Raghavan +## 9. From: Victoria Burke **Date:** Fri, Jul 10, 2026 2:57 PM **Subject:** Page copy today? Where is the launch page copy? I am hearing from Product that there is still claim churn. I need to know today whether this slips paid media. -Priya +Victoria --- -## 10. From: Tessa Lin +## 10. From: Maya Robinson **Date:** Fri, Jul 10, 2026 4:22 PM **Subject:** FAQ ownership next week -Hi Marcus — should I keep owning the launch FAQ next week? I think I can handle the next draft if Ravi gives me the claims grid, but I do not want to step on Jordan's deck work. +Hi Avery — should I keep owning the launch FAQ next week? I think I can handle the next draft if Miguel gives me the claims grid, but I do not want to step on Caleb's deck work. -Tessa +Maya --- -## 11. From: Priya Raghavan +## 11. From: Victoria Burke **Date:** Mon, Jul 20, 2026 8:11 AM **Subject:** Jul 24 gate -Marcus — I want your read on the Jul 24 launch gate before ELT prep. Do not send a broad status doc. Send the three issues that could still move the date and the decision you need from me. +Avery — I want your read on the Jul 24 launch gate before ELT prep. Do not send a broad status doc. Send the three issues that could still move the date and the decision you need from me. -Priya +Victoria --- -## 12. From: Jordan Beck +## 12. From: Caleb Miller **Date:** Fri, Jul 24, 2026 5:36 PM **Subject:** Retro notes Launch assets are out. I have notes on the Sales feedback loop, especially the way the deck was used without the talk track. Do you want a written retro or a working session next week? -Jordan +Caleb diff --git a/Allfiles/persona-pack/inbox/sent-mail.md b/Allfiles/persona-pack/inbox/sent-mail.md index cc3ad63..db90213 100644 --- a/Allfiles/persona-pack/inbox/sent-mail.md +++ b/Allfiles/persona-pack/inbox/sent-mail.md @@ -1,22 +1,22 @@ --- -title: Marcus Webb Sent Mail +title: Avery Washington Sent Mail --- # Sent Mail -## 1. To: Priya Raghavan +## 1. To: Victoria Burke **Date:** Wed, Jul 1, 2026 8:12 AM -**Subject:** Atlas launch: Jul 10 narrative checkpoint +**Subject:** Lantern launch: Jul 10 narrative checkpoint -Priya — Jul 10 is the checkpoint I am driving toward for the Atlas launch narrative. +Victoria — Jul 10 is the checkpoint I am driving toward for the Lantern launch narrative. Current state: -- Positioning draft is in review with Ravi for spec accuracy. +- Positioning draft is in review with Miguel for spec accuracy. - Agency has the launch page wireframe and first ad concepts due back Friday. -- Sales one-pager is behind because Dan wants pricing language that Product has not approved. -- I am holding the launch date unless Ravi flags a platform capability risk today. +- Sales one-pager is behind because Graham wants pricing language that Product has not approved. +- I am holding the launch date unless Miguel flags a platform capability risk today. I will send a tighter readout after the 2 PM PMM sync. Let me know if that's a problem. @@ -24,28 +24,28 @@ I will send a tighter readout after the 2 PM PMM sync. Let me know if that's a p --- -## 2. To: Dan Kowalski +## 2. To: Graham Barnes **Date:** Wed, Jul 1, 2026 9:38 AM **Subject:** Sales one-pager by Friday -Quick one — Friday EOD is the earliest I can get you a usable Atlas one-pager. +Quick one — Friday EOD is the earliest I can get you a usable Lantern one-pager. I know the field wants it yesterday. The blocker is not copy polish; it is the unapproved pricing claim in slide 4. If I ship that now, we create a cleanup problem for every rep using it next week. Plan: -- Ravi confirms the pricing-safe sentence by Thursday noon. -- Jordan turns the draft into a field-ready one-pager Thursday afternoon. +- Miguel confirms the pricing-safe sentence by Thursday noon. +- Caleb turns the draft into a field-ready one-pager Thursday afternoon. - I send you the PDF and editable version Friday before 5 PM. -Circling back once Ravi confirms. Let me know if that's a problem. +Circling back once Miguel confirms. Let me know if that's a problem. — M --- -## 3. To: Tessa Lin +## 3. To: Maya Robinson **Date:** Wed, Jul 1, 2026 6:47 PM **Subject:** Re: Contoso customer call prep @@ -55,7 +55,7 @@ Quick one — please send me the Contoso prep doc before 9 tomorrow! Three things I want you to tighten: - Lead with the customer pain, not the feature list. -- Use the Atlas uptime proof point only if Ravi has cleared the wording. +- Use the Lantern uptime proof point only if Miguel has cleared the wording. - Put the open questions at the top so Sales cannot bury them. You are close. I will join the call and help steer if it gets sideways. Circling back after I read the doc. @@ -64,14 +64,14 @@ You are close. I will join the call and help steer if it gets sideways. Circling --- -## 4. To: Amara Osei +## 4. To: Amara White **Date:** Thu, Jul 2, 2026 10:16 AM -**Subject:** Atlas launch campaign: revised inputs and review path +**Subject:** Lantern launch campaign: revised inputs and review path Hello Amara, -Quick one — we need to adjust the Atlas launch campaign inputs before your team gets too far into the second creative route. +Quick one — we need to adjust the Lantern launch campaign inputs before your team gets too far into the second creative route. The executive team has sharpened the audience definition since our kickoff. The primary buyer is now the VP of Operations at mid-market distributors, with IT as the validator rather than the hero audience. That changes the proof hierarchy for the launch page, paid social, and webinar abstract. @@ -79,25 +79,25 @@ Please have your team revise the first concept around the following: - Lead message: "Turn operational data into decisions before the quarter closes." - Supporting proof: faster reconciliation, shared dashboards, and fewer manual exception reviews. -- Avoid: language that implies Atlas replaces ERP, automates finance approvals, or ships with predictive forecasting in the first release. -- Required CTA: "Book an Atlas readiness review." +- Avoid: language that implies Lantern replaces ERP, automates finance approvals, or ships with predictive forecasting in the first release. +- Required CTA: "Book an Lantern readiness review." -For timing, I can review an updated direction on Monday, July 6 by 3 PM ET. Priya will want to see the cleaner route by Wednesday, July 8, so I would rather resolve positioning issues early than send your team into production with unstable inputs. +For timing, I can review an updated direction on Monday, July 6 by 3 PM ET. Victoria will want to see the cleaner route by Wednesday, July 8, so I would rather resolve positioning issues early than send your team into production with unstable inputs. Thank you for staying flexible here. Circling back after Product confirms the final claims grid. Please let me know if that's a problem. -Marcus +Avery --- -## 5. To: Ravi Chandra +## 5. To: Miguel Reyes **Date:** Thu, Jul 2, 2026 11:04 AM **Subject:** Claims grid needed today -Quick one — I need the Atlas claims grid today by 4 PM. +Quick one — I need the Lantern claims grid today by 4 PM. -The launch page, Dan's one-pager, and the webinar invite all depend on the same three proof points. If we keep approving them one asset at a time, we will create three versions of the truth. +The launch page, Graham's one-pager, and the webinar invite all depend on the same three proof points. If we keep approving them one asset at a time, we will create three versions of the truth. Can you mark each claim as approved, needs caveat, or do not use? Circling back at 3 if I have not seen it. @@ -105,7 +105,7 @@ Can you mark each claim as approved, needs caveat, or do not use? Circling back --- -## 6. To: Helen Park +## 6. To: Serena Davis **Date:** Thu, Jul 2, 2026 4:51 PM **Subject:** Demand-gen pilot MQL target @@ -128,18 +128,18 @@ If that gives you enough room, I will mirror it in the launch brief. Circling ba --- -## 7. To: Jordan Beck +## 7. To: Caleb Miller **Date:** Mon, Jul 6, 2026 8:03 AM **Subject:** This week: sales deck and launch FAQ Quick one — Thursday noon is the deadline for the sales deck and Friday noon for the launch FAQ! -You own the deck. Tessa owns the FAQ first pass. I will review both before they go to Dan. +You own the deck. Maya owns the FAQ first pass. I will review both before they go to Graham. Please make these calls without waiting on me: -- Cut any slide that explains Atlas architecture before buyer pain. +- Cut any slide that explains Lantern architecture before buyer pain. - Use "readiness review" as the CTA everywhere. - Keep implementation timing in ranges, not promises. @@ -149,23 +149,23 @@ You have the right instincts here. Circling back Wednesday after the customer ca --- -## 8. To: Priya Raghavan +## 8. To: Victoria Burke **Date:** Mon, Jul 6, 2026 8:09 AM -**Subject:** Atlas Monday status +**Subject:** Lantern Monday status -Priya — this week's critical path is claims approval, sales enablement, and agency creative lock. +Victoria — this week's critical path is claims approval, sales enablement, and agency creative lock. Risks: -- Ravi has not closed the reconciliation proof point. -- Dan is escalating because the deck is not field-ready. -- Fenwick needs a cleaner audience brief before production. +- Miguel has not closed the reconciliation proof point. +- Graham is escalating because the deck is not field-ready. +- First Up Consultants needs a cleaner audience brief before production. Mitigations: - I am using one claims grid across every asset. -- Jordan is owning the sales deck by Thursday noon. +- Caleb is owning the sales deck by Thursday noon. - I moved the agency review earlier so we do not lose another week. No launch date change recommended right now. @@ -174,14 +174,14 @@ No launch date change recommended right now. --- -## 9. To: Dan Kowalski +## 9. To: Graham Barnes **Date:** Tue, Jul 7, 2026 5:26 PM -**Subject:** Re: Field needs the Atlas deck +**Subject:** Re: Field needs the Lantern deck Quick one — I am declining the 7 AM deck walkthrough tomorrow. -I can get you a better outcome if Jordan and I use that hour to finish the deck instead of presenting a half-safe version to the region leads. +I can get you a better outcome if Caleb and I use that hour to finish the deck instead of presenting a half-safe version to the region leads. What I can commit to: @@ -195,7 +195,7 @@ I know this is frustrating. Circling back when the draft lands. Let me know if t --- -## 10. To: Tessa Lin +## 10. To: Maya Robinson **Date:** Wed, Jul 8, 2026 7:14 PM **Subject:** FAQ first pass @@ -204,10 +204,10 @@ Quick one — nice progress on the FAQ! Please fix these before you send it wider: -- Move the "Who is Atlas for?" answer to the top. +- Move the "Who is Lantern for?" answer to the top. - Delete the line about finance automation. - Add one plain-English answer for "Why now?" -- Keep Dan's requested objection handling, but make it less defensive. +- Keep Graham's requested objection handling, but make it less defensive. You are doing the right thing by asking for feedback early. Circling back tomorrow morning. @@ -215,16 +215,16 @@ You are doing the right thing by asking for feedback early. Circling back tomorr --- -## 11. To: Amara Osei +## 11. To: Amara White **Date:** Thu, Jul 9, 2026 2:22 PM -**Subject:** Atlas creative review follow-up and production notes +**Subject:** Lantern creative review follow-up and production notes Hello Amara, Quick one — we can proceed with Route B, provided the production team makes the changes below before the July 14 stakeholder review. -The room responded well to the operational urgency in the concept, especially the dashboard visual and the "before quarter close" line. The concern was credibility. Priya does not want a campaign that sounds larger than the first release can support, and Ravi flagged two claims that still need caveats. +The room responded well to the operational urgency in the concept, especially the dashboard visual and the "before quarter close" line. The concern was credibility. Victoria does not want a campaign that sounds larger than the first release can support, and Miguel flagged two claims that still need caveats. Please update the package as follows: @@ -236,23 +236,23 @@ Please update the package as follows: For timing, could you send revised files by Monday, July 13 at noon ET? I will consolidate Northwind feedback by Tuesday evening so your team can stay inside the current SOW. -Thank you again for the quick turn. Circling back after Priya sees the revised route. Please let me know if that's a problem. +Thank you again for the quick turn. Circling back after Victoria sees the revised route. Please let me know if that's a problem. -Marcus +Avery --- -## 12. To: Priya Raghavan +## 12. To: Victoria Burke **Date:** Fri, Jul 10, 2026 3:06 PM -**Subject:** Bad news: Atlas page copy is slipping +**Subject:** Bad news: Lantern page copy is slipping -Priya — bad news: the Atlas launch page copy will slip from today to Monday noon. +Victoria — bad news: the Lantern launch page copy will slip from today to Monday noon. Why: -- Ravi found one implementation claim that Support cannot stand behind yet. -- Fenwick's Route B is usable, but the proof hierarchy changed after the buyer clarification. +- Miguel found one implementation claim that Support cannot stand behind yet. +- First Up Consultants's Route B is usable, but the proof hierarchy changed after the buyer clarification. - I do not want to ship page copy that Sales will immediately screenshot and reuse before it is safe. Impact: @@ -267,7 +267,7 @@ I own the miss. I will send the revised copy Monday by noon. --- -## 13. To: Jordan Beck ; Tessa Lin +## 13. To: Caleb Miller ; Maya Robinson **Date:** Mon, Jul 13, 2026 8:57 AM **Subject:** Customer calls this week @@ -278,17 +278,17 @@ Not because I do not trust you. I want to hear the objections in real time befor Please divide the follow-up this way: -- Jordan: own Acme Industrial and the economic buyer notes. -- Tessa: own Contoso and Litware objection logs. -- Me: listen for patterns, then package them for Priya and Dan. +- Caleb: own Tailwind Traders and the economic buyer notes. +- Maya: own Contoso and Lakeshore Retail objection logs. +- Me: listen for patterns, then package them for Victoria and Graham. -You both should still lead the calls. Circling back after Acme. +You both should still lead the calls. Circling back after Tailwind Traders. — M --- -## 14. To: Helen Park +## 14. To: Serena Davis **Date:** Tue, Jul 14, 2026 12:41 PM **Subject:** Webinar title and MQL routing @@ -307,18 +307,18 @@ If you update the Marketo brief, I will make sure the launch page CTA matches. C --- -## 15. To: Dan Kowalski +## 15. To: Graham Barnes **Date:** Wed, Jul 15, 2026 11:58 PM **Subject:** deck attached - use v6 only -Dan — use v6 only, not v5. +Graham — use v6 only, not v5. -I know this is late. The only material change is the implementation timing slide; Ravi made me pull the 30-day line. +I know this is late. The only material change is the implementation timing slide; Miguel made me pull the 30-day line. Tell the region leads: -- Atlas readiness reviews can be booked now. +- Lantern readiness reviews can be booked now. - Implementation timing depends on data readiness. - Do not promise predictive forecasting. @@ -328,7 +328,7 @@ I will clean up speaker notes in the morning. Circling back after I sleep for a --- -## 16. To: Ravi Chandra +## 16. To: Miguel Reyes **Date:** Thu, Jul 16, 2026 8:44 AM **Subject:** Implementation timing language @@ -340,7 +340,7 @@ Sales wants a number. I would rather give them a range we can defend than let th Could you approve one of these? - "Most readiness reviews identify a 30-60 day path to first operational dashboard." -- "Atlas implementation timing depends on source-system readiness and workflow complexity." +- "Lantern implementation timing depends on source-system readiness and workflow complexity." - "Northwind will scope implementation timing during the readiness review." My vote is the third. Circling back before the Sales walkthrough. @@ -349,12 +349,12 @@ My vote is the third. Circling back before the Sales walkthrough. --- -## 17. To: Priya Raghavan +## 17. To: Victoria Burke **Date:** Mon, Jul 20, 2026 8:18 AM -**Subject:** Atlas launch readiness: Jul 24 gate +**Subject:** Lantern launch readiness: Jul 24 gate -Priya — Jul 24 is the next launch gate and I am watching three issues. +Victoria — Jul 24 is the next launch gate and I am watching three issues. - Sales enablement: deck is live, FAQ needs one final objection-handling pass. - Demand gen: webinar brief is approved, paid social audiences need QA. @@ -366,7 +366,7 @@ Decision needed from you by Wednesday: whether the launch keynote slide should s --- -## 18. To: Amara Osei +## 18. To: Amara White **Date:** Tue, Jul 21, 2026 3:32 PM **Subject:** Final asset QA and launch week handoff @@ -375,7 +375,7 @@ Hello Amara, Quick one — please treat Friday, July 24 at 5 PM ET as the final handoff deadline for launch-week assets. -The package we need from Fenwick is: +The package we need from First Up Consultants is: - Launch page design file and export-ready image set. - Three paid social variants sized for LinkedIn and display retargeting. @@ -387,11 +387,11 @@ I appreciate how much compression your team has absorbed. The only area where I I will be online most of Friday for QA and can turn comments quickly. Circling back Thursday after the internal gate. Please let me know if that's a problem. -Marcus +Avery --- -## 19. To: Jordan Beck +## 19. To: Caleb Miller **Date:** Mon, Jul 27, 2026 10:11 AM **Subject:** Post-launch retro inputs @@ -403,7 +403,7 @@ Focus less on what went wrong and more on what surprised us: - Which objections did Sales keep mishandling? - Which assets got used without context? - Where did Product review slow us down? -- What should Tessa own next time without me in the room? +- What should Maya own next time without me in the room? The deck landed because you kept it moving. Thank you. Circling back Wednesday. @@ -411,26 +411,26 @@ The deck landed because you kept it moving. Thank you. Circling back Wednesday. --- -## 20. To: Priya Raghavan +## 20. To: Victoria Burke **Date:** Wed, Jul 29, 2026 8:07 AM **Subject:** July closeout and August focus -Priya — August focus should be conversion quality, not more launch volume. +Victoria — August focus should be conversion quality, not more launch volume. July outcomes: - 463 MQLs against 420 target. - Webinar registration beat plan by 18%. - Sales used the deck in 41 opportunities, though talk-track compliance is uneven. -- Atlas page conversion is healthy, but SDR rejection is higher than I want. +- Lantern page conversion is healthy, but SDR rejection is higher than I want. My recommendation: - Keep paid social capped until we fix lead quality. -- Move Tessa onto nurture content with Helen. -- Have Jordan run the first Sales feedback loop in August. -- Use Fenwick only for asset adaptation, not new concepting. +- Move Maya onto nurture content with Serena. +- Have Caleb run the first Sales feedback loop in August. +- Use First Up Consultants only for asset adaptation, not new concepting. I can send the exec version by Friday noon. diff --git a/Allfiles/twin-forge/README.md b/Allfiles/twin-forge/README.md index b312379..24e652c 100644 --- a/Allfiles/twin-forge/README.md +++ b/Allfiles/twin-forge/README.md @@ -24,17 +24,17 @@ Verified end to end on a live tenant — upload, trigger, Work IQ retrieval, beh Start Twin Forge and help me build a v0.1 digital twin. ``` -Also triggers on: *build my digital twin*, *create my soul spec*, *forge my twin*, *build the Marcus Webb twin*. +Also triggers on: *build my digital twin*, *create my soul spec*, *forge my twin*, *build the Avery Washington twin*. ## What happens -1. **Picks a path** — your own M365 data, or the Marcus Webb persona. +1. **Picks a path** — your own M365 data, or the Avery Washington persona. 2. **Gathers evidence** — your last ~10 sent emails and ~30 days of calendar, via Work IQ. No setup, no auth. 3. **Interviews you** — ~8 behavioral questions, one at a time. Always *"what did you actually do last time?"*, never *"what do you value?"* 4. **Reconciles** — shows you the gap between what you said and what your calendar shows. 5. **Writes the three files.** -## Using Path B (Marcus Webb) +## Using Path B (Avery Washington) The persona pack **isn't in your Cowork workspace by default.** Download it from `Allfiles/persona-pack/` and **attach the files** to your session when Twin Forge asks. If you can't, take Path A instead. diff --git a/Allfiles/twin-forge/SKILL.md b/Allfiles/twin-forge/SKILL.md index c72ffc4..b7dab80 100644 --- a/Allfiles/twin-forge/SKILL.md +++ b/Allfiles/twin-forge/SKILL.md @@ -1,6 +1,6 @@ --- name: twin-forge -description: Use this skill when the user says build my digital twin, start twin forge, create my soul spec, create my voice spec, create my revealed behavior file, interview me for a digital twin, forge my twin, make a portable work twin, or build the Marcus Webb twin. +description: Use this skill when the user says build my digital twin, start twin forge, create my soul spec, create my voice spec, create my revealed behavior file, interview me for a digital twin, forge my twin, make a portable work twin, or build the Avery Washington twin. --- # Twin Forge @@ -20,7 +20,7 @@ A good `soul.md` is about **one page**. Longer specs measurably perform worse Ask the user which path they want: - **Path A** — build from their own Microsoft 365 data through Work IQ. -- **Path B** — build from the Marcus Webb synthetic persona pack. +- **Path B** — build from the Avery Washington synthetic persona pack. If Path A, say you will only use data they can already access. diff --git a/docs/bricks/advanced-work-iq.md b/docs/bricks/advanced-work-iq.md index c39a057..240d263 100644 --- a/docs/bricks/advanced-work-iq.md +++ b/docs/bricks/advanced-work-iq.md @@ -23,7 +23,7 @@ A real Graph path means Azure AD app registration, permissions, admin consent qu | --- | --- | --- | | A · Cowork Work IQ | You can use your own tenant data. | Ask Cowork to retrieve and summarize, then export the result. | | B · Snapshot, do not stream | You need repeatability. | Generate one markdown snapshot from ~30 days of calendar. Regenerate monthly. | - | C · Persona pack | You need safe demo data. | Use the Marcus Webb persona pack at `/Allfiles/persona-pack/`. | + | C · Persona pack | You need safe demo data. | Use the Avery Washington persona pack at `/Allfiles/persona-pack/`. | 2. Pull the evidence you need, not everything you can access. diff --git a/docs/build/advanced-scenario-1.md b/docs/build/advanced-scenario-1.md index 22cc2d8..4a32d72 100644 --- a/docs/build/advanced-scenario-1.md +++ b/docs/build/advanced-scenario-1.md @@ -11,7 +11,7 @@ title: 🟣 Advanced · Code-Extended — Scenario 1 **Building with:** VS Code, GitHub Copilot, Copilot CLI, MCP, and Work IQ ::: tip Get the files -Twin Forge, the Marcus Webb persona pack, and the starter repo are all on the [Downloads page](/resources/downloads). +Twin Forge, the Avery Washington persona pack, and the starter repo are all on the [Downloads page](/resources/downloads). ::: You will build one team system: a portable digital twin with a council of agents that argue over a real tradeoff and an arbiter that makes the call. @@ -109,7 +109,7 @@ Use [Ground on live data with Work IQ](/bricks/advanced-work-iq). Choose one path: - **Path A — Own data:** ask Cowork's native Work IQ to summarize your last ~30 days of calendar and recent sent-mail style. Export the distilled result. Do not demo raw private entries. -- **Path B — Marcus Webb pack:** use the synthetic marketing manager data at `/Allfiles/persona-pack/`. +- **Path B — Avery Washington pack:** use the synthetic marketing manager data at `/Allfiles/persona-pack/`. Extract: @@ -205,9 +205,9 @@ Summarize my last 30 days of calendar by category, organizer type, accept/declin Find 5-10 sent emails that show my normal writing style. Quote only samples I approve for this hack artifact. Infer style rules from the samples. ``` -### Path B — Marcus Webb persona pack +### Path B — Avery Washington persona pack -Use `/Allfiles/persona-pack/`. Marcus Webb is synthetic. This path is safer for demos and faster for teams that do not want to use personal work data. +Use `/Allfiles/persona-pack/`. Avery Washington is synthetic. This path is safer for demos and faster for teams that do not want to use personal work data. ### Starter repo @@ -218,7 +218,7 @@ Use `/Allfiles/digital-twin-starter/` for the initial folder shape, scripts, age Show these in 60-90 seconds: - [ ] The folder: `SKILL.md`, `soul.md`, `voice.md`, `revealed.md`, `.github/agents/*.agent.md`, and `mcp_server.py`. -- [ ] Which data path you used: own data or Marcus Webb. +- [ ] Which data path you used: own data or Avery Washington. - [ ] One measured finding in `revealed.md` that self-report would have missed. - [ ] The council division of labor and the short return shape from each subagent. - [ ] The mid-build twist: executive ask colliding with peer promise. diff --git a/docs/build/base-scenario-1.md b/docs/build/base-scenario-1.md index 4fc8514..15c05c9 100644 --- a/docs/build/base-scenario-1.md +++ b/docs/build/base-scenario-1.md @@ -41,8 +41,8 @@ Grab these now — you'll need the first one in about two minutes. 🗂️ - Marcus Webb - Optional. A made-up marketing manager with a fake inbox and calendar — use him instead of your own data. + Avery Washington + Optional. A made-up marketing manager with a fake inbox and calendar — use them instead of your own data. Get it → @@ -79,7 +79,7 @@ It'll ask which you want: **Your own data** — Twin Forge reads your sent mail and calendar. Nothing is set up, nothing is shared, and it only sees what you can already see. This makes the better twin, because it's really you. -**Marcus Webb** — the made-up marketing manager. Pick this if you'd rather not use your own work data. Download his pack and **attach the files** when Twin Forge asks; it can't see them otherwise. +**Avery Washington** — the made-up marketing manager. Pick this if you'd rather not use your own work data. Download their pack and **attach the files** when Twin Forge asks; it can't see them otherwise. ## 3 · Get your first draft @@ -172,7 +172,7 @@ Cowork drafts and waits for your approval. Keep it that way today. 60–90 seconds. Hit these: -- [ ] Whose twin — yours or Marcus's +- [ ] Whose twin — yours or Avery's - [ ] Your soul file, about a page - [ ] Your voice file, with real samples in it - [ ] **One thing your calendar revealed that surprised you** @@ -190,7 +190,7 @@ It's the one where someone reads a draft your twin wrote and says *"yeah, that s | Cowork ignores Twin Forge | Start a **new** session — skills only load at the start | | Upload seemed to do nothing | Upload the `.md` file, not a zip | | "I can't find the reference files" | You've got an old copy — re-download it | -| Marcus's data can't be found | Attach the pack files to the session | +| Avery's data can't be found | Attach the pack files to the session | | Twin sounds like a stranger | Your voice file is descriptions, not real emails. Go back to step 5 | | Twin gives wishy-washy answers | Your soul file has values, not rules. Go back to step 6 | diff --git a/docs/facilitator/coach-playbook.md b/docs/facilitator/coach-playbook.md index 98d5dab..51675de 100644 --- a/docs/facilitator/coach-playbook.md +++ b/docs/facilitator/coach-playbook.md @@ -58,7 +58,7 @@ A description is the writer's *theory* of their own writing, and it's usually wr **How to coach** -Have them paste 5–10 sent emails or use Marcus Webb samples. Then extract rules the samples prove: opener, signoff, sentence length, punctuation, directness, and register by recipient. +Have them paste 5–10 sent emails or use Avery Washington samples. Then extract rules the samples prove: opener, signoff, sentence length, punctuation, directness, and register by recipient. ## Failure mode: tooling eats the room @@ -68,7 +68,7 @@ The team is debugging setup at 0:45 and has no working twin. **How to coach** -Shrink the tool surface. Use Cowork and the Twin Forge skill. If needed, switch to the Marcus Webb pack. The learning target is the portable spec, not a perfect integration. +Shrink the tool surface. Use Cowork and the Twin Forge skill. If needed, switch to the Avery Washington pack. The learning target is the portable spec, not a perfect integration. ## Failure mode: Advanced teams do not integrate diff --git a/docs/facilitator/index.md b/docs/facilitator/index.md index f5e27f5..d93ab40 100644 --- a/docs/facilitator/index.md +++ b/docs/facilitator/index.md @@ -14,7 +14,7 @@ Use these pages to run Scenario 1 in the room. - [ ] Confirm the room can access Cowork, VS Code Copilot, and the GitHub Copilot CLI. - [ ] Share the Twin Forge Cowork skill download location. -- [ ] Share the Marcus Webb persona pack location for anyone choosing Path B. +- [ ] Share the Avery Washington persona pack location for anyone choosing Path B. - [ ] Print the role cards. - [ ] Print or share the sealed dilemma set. - [ ] Prepare the mid-build constraint: exec ask versus peer promise. diff --git a/docs/facilitator/interview-script.md b/docs/facilitator/interview-script.md index 12fed27..2016004 100644 --- a/docs/facilitator/interview-script.md +++ b/docs/facilitator/interview-script.md @@ -8,7 +8,7 @@ Use this to extract decision rules for `soul.md`. ## Why behavioral -When we built one of these ourselves, the first version was worse than useless — because the author wrote down who he *wanted* to be. His spec said he escalated priority conflicts; in reality, he just decided. It said he'd never ship unverified work; in reality, he cut scope and held the date. Rewriting those rules from what he actually did was what made the twin recognizable. +When we built one of these ourselves, the first version was worse than useless — because the author wrote down who they *wanted* to be. Their spec said they escalated priority conflicts; in reality, they just decided. It said they'd never ship unverified work; in reality, they cut scope and held the date. Rewriting those rules from what they actually did was what made the twin recognizable. So don't ask, "What do you value?" Ask, "What did you actually do last time?" diff --git a/docs/how-it-works/run-of-show.md b/docs/how-it-works/run-of-show.md index 83ff617..50fc289 100644 --- a/docs/how-it-works/run-of-show.md +++ b/docs/how-it-works/run-of-show.md @@ -9,11 +9,11 @@ Facilitator-facing agenda for the two-hour hack. | Time | Segment | What happens | | ---- | ------- | ------------ | | 0:00–0:05 | Welcome | Frame the day: AI is competent in general, weak in the last mile. Today, teams build that last mile. | -| 0:05–0:10 | Pick path | Participants choose Path A, their own twin, or Path B, Marcus Webb's synthetic persona pack. Reinforce privacy. | +| 0:05–0:10 | Pick path | Participants choose Path A, their own twin, or Path B, Avery Washington's synthetic persona pack. Reinforce privacy. | | 0:10–0:15 | Seal your answers | Everyone answers the forced-choice dilemmas and sets them aside. These are for the final reveal, not scoring. | -| 0:15–0:30 | Bootstrap v0.1 | Use the Twin Forge skill, a downloadable Cowork skill that interviews the participant and emits `soul.md` v0.1. Marcus Webb teams use the persona pack. | +| 0:15–0:30 | Bootstrap v0.1 | Use the Twin Forge skill, a downloadable Cowork skill that interviews the participant and emits `soul.md` v0.1. Avery Washington teams use the persona pack. | | 0:30–0:40 | Attack surface 1: compress | Teams tighten `soul.md`: priority stack, decision rules, stakeholder table, boundaries, capacity, blind spots. Shorter is usually better. | -| 0:40–0:50 | Attack surface 2: voice | Add 5–10 real sent emails, or Marcus samples. Extract the style rules those samples imply. Do not just describe the voice. | +| 0:40–0:50 | Attack surface 2: voice | Add 5–10 real sent emails, or Avery samples. Extract the style rules those samples imply. Do not just describe the voice. | | 0:50–1:05 | Attack surface 3: judgment | Test the twin on work dilemmas. Patch decision rules from observed behavior, not stated values. | | ~0:55 | Mid-build constraint | Inject a new constraint: an exec ask collides with a peer promise. This is not a new objective. It is pressure on the existing twin. | | 1:05–1:20 | Hardening pass | Look for instruction interference. One patch can silently break another behavior. Re-test the same prompts after each meaningful edit. | diff --git a/docs/resources/downloads.md b/docs/resources/downloads.md index e4eb929..ab35e56 100644 --- a/docs/resources/downloads.md +++ b/docs/resources/downloads.md @@ -15,7 +15,7 @@ Paste the folder's GitHub URL into [download-directory.github.io](https://downlo | What | Why you need it | Get it | | --- | --- | --- | | **Twin Forge skill** | Bootstraps a v0.1 twin in ~12 minutes. Upload it into Cowork and say *"Start Twin Forge."* | [SKILL.md](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/blob/main/Allfiles/twin-forge/SKILL.md) | -| **Marcus Webb persona pack** | Path B data if you'd rather not use your own. | [Allfiles/persona-pack](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/tree/main/Allfiles/persona-pack) | +| **Avery Washington persona pack** | Path B data if you'd rather not use your own. | [Allfiles/persona-pack](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/tree/main/Allfiles/persona-pack) | **Installing Twin Forge:** Cowork → **Customize** → **Skills** → **Add ▾** → **Upload skill** → pick `SKILL.md`. Then **start a new session** — skills are discovered at session start. @@ -30,7 +30,7 @@ Or drop it in OneDrive at `/Documents/Cowork/skills/twin-forge/SKILL.md`. | What | Why you need it | Get it | | --- | --- | --- | | **Starter repo** | Schema, MCP server skeleton, council runner, test harness. The contract — not the solution. | [Allfiles/digital-twin-starter](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/tree/main/Allfiles/digital-twin-starter) | -| **Marcus Webb persona pack** | Path B data. | [Allfiles/persona-pack](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/tree/main/Allfiles/persona-pack) | +| **Avery Washington persona pack** | Path B data. | [Allfiles/persona-pack](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/tree/main/Allfiles/persona-pack) | ```bash git clone https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack.git @@ -45,4 +45,4 @@ Work in a copy of `digital-twin-starter`, not in the repo folder itself. - [Facilitator kit](/facilitator/) — role cards, interview script, coach playbook - [Run of show](/how-it-works/run-of-show) -- **Spoilers:** `Allfiles/persona-pack/calendar/summary-stats.md` gives away Marcus's planted contradictions. Hand it to stuck teams only. +- **Spoilers:** `Allfiles/persona-pack/calendar/summary-stats.md` gives away Avery's planted contradictions. Hand it to stuck teams only. diff --git a/docs/resources/index.md b/docs/resources/index.md index 6ee2bc2..dadae08 100644 --- a/docs/resources/index.md +++ b/docs/resources/index.md @@ -6,7 +6,7 @@ title: Resources ## Get the files -**[⬇ Downloads](/resources/downloads)** — Twin Forge, the Marcus Webb persona pack, and the Advanced starter repo. +**[⬇ Downloads](/resources/downloads)** — Twin Forge, the Avery Washington persona pack, and the Advanced starter repo. ## Why the scenario works the way it does diff --git a/docs/resources/research.md b/docs/resources/research.md index b715fad..6c1a15e 100644 --- a/docs/resources/research.md +++ b/docs/resources/research.md @@ -36,9 +36,9 @@ While developing the technique, Anthropic reported that a short, broad principle Not research — one build, one person. Useful as a story, not as evidence: -The first twin we made was worse than no twin at all, because its author wrote down who he *wanted* to be. The spec said he escalated priority conflicts; in practice he just decided and told people after. It said he'd never ship anything unverified; in practice he cut scope and protected the date. +The first twin we made was worse than no twin at all, because its author wrote down who they *wanted* to be. The spec said they escalated priority conflicts; in practice they just decided and told people after. It said they'd never ship anything unverified; in practice they cut scope and protected the date. -Rewriting those rules from what he actually did was the moment it started sounding like him. **That gap — between the self you describe and the self your calendar records — is the whole scenario.** +Rewriting those rules from what they actually did was the moment it started sounding like them. **That gap — between the self you describe and the self your calendar records — is the whole scenario.** ## Further reading diff --git a/docs/scenarios/scenario-1.md b/docs/scenarios/scenario-1.md index 48412ca..f88738d 100644 --- a/docs/scenarios/scenario-1.md +++ b/docs/scenarios/scenario-1.md @@ -46,9 +46,9 @@ Use: - recent calendar patterns for `revealed.md` - recent tradeoffs and decisions for `soul.md` -### Path B — Build Marcus Webb's twin +### Path B — Build Avery Washington's twin -Use the **Marcus Webb persona pack**: a synthetic marketing manager with a fake inbox, calendar, and goals doc. +Use the **Avery Washington persona pack**: a synthetic marketing manager with a fake inbox, calendar, and goals doc. Pick this path if you cannot or do not want to use your own data. It exercises the same skills without personal data. See the Base build page for details: [/build/base-scenario-1](/build/base-scenario-1). From 8b0d41ac155ab08506dceaa6166b2312354ec50c Mon Sep 17 00:00:00 2001 From: Matt Quinlan <37308730+maquinl@users.noreply.github.com> Date: Thu, 30 Jul 2026 14:37:40 +0100 Subject: [PATCH 06/12] Rewrite Advanced page, normalize naming, move facilitator kit out of participant nav Advanced build page rewritten to match the Base page shape: - opens with the problem, and the second problem specific to this track (judgment is an argument, not one voice - which is the honest reason to build agents instead of a skill) - download cards inline, no trip to a separate page - 'Assembly map / snap these blocks' -> plain steps: Split the work, Write the spec, Ground it, Write the agents, Expose it as a server, Add the guardrail, The twist, Let the critic patch it - every clock-eater promoted from a footnote to a warning where it will actually bite, including the Agent-mode check BEFORE anything else - values-vs-tiebreakers comparison table - 'Stuck?' table with 7 real failure modes - honest limit stated: the file learns, the model doesn't Also: - consistent naming everywhere: Scenario 1 - The Digital Twin, with the same emoji in nav and PathPicker - Facilitators removed from top nav. Participants shouldn't be reading role cards and the coach playbook mid-build. Still reachable from Resources and its own sidebar. --- docs/.vitepress/config.mts | 1 - docs/build/advanced-scenario-1.md | 300 ++++++++++++++++-------------- docs/resources/index.md | 4 + 3 files changed, 160 insertions(+), 145 deletions(-) diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index e5e516f..d420d16 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -26,7 +26,6 @@ export default defineConfig({ }, { text: "Building Blocks", link: "/bricks/" }, { text: "Scenarios", link: "/scenarios/" }, - { text: "Facilitators", link: "/facilitator/" }, { text: "Submit", link: "/submit/" }, { text: "Resources", diff --git a/docs/build/advanced-scenario-1.md b/docs/build/advanced-scenario-1.md index 4a32d72..9a5020c 100644 --- a/docs/build/advanced-scenario-1.md +++ b/docs/build/advanced-scenario-1.md @@ -1,230 +1,242 @@ --- -title: 🟣 Advanced · Code-Extended — Scenario 1 +title: The Digital Twin — Code --- - + -# 🟣 Advanced · Code-Extended +# 🧬 The Digital Twin -## Scenario 1 — Digital Twin Council +**You'll build this in code — VS Code, GitHub Copilot, and the Copilot CLI.** -**Building with:** VS Code, GitHub Copilot, Copilot CLI, MCP, and Work IQ +You get the contract and the plumbing. You write the agents. -::: tip Get the files -Twin Forge, the Avery Washington persona pack, and the starter repo are all on the [Downloads page](/resources/downloads). -::: +## Why -You will build one team system: a portable digital twin with a council of agents that argue over a real tradeoff and an arbiter that makes the call. +AI can write any email. It can't write *your* email. -## 1 · Your mission +It knows everything about your company and nothing about you — so every draft needs a rewrite, and the time you saved disappears in the last mile. -Build a digital twin: a one-page spec of how a person works, plus agents that run on it. The same folder should run in Cowork, VS Code Copilot, and the GitHub Copilot CLI without changing the core files. +But there's a second problem, and it's the one you'll solve here: **a person's judgment isn't one voice. It's an argument.** When you decide what to do on a Monday, you're negotiating between ambition, obligation, and capacity. A single prompt can role-play one of those. It can't run the argument. -Your shared twin has three files: +## What your team will have built -1. `soul.md` — how the person decides: priority stack, decision rules, stakeholders, boundaries, capacity, and blind spots. -2. `voice.md` — how the person writes: 5-10 sent-email samples or synthetic samples, quoted verbatim, plus inferred style rules. -3. `revealed.md` — what the calendar says versus what the person says. +One system, not five. Everyone shares a single spec, and each person owns one agent that reasons over it. -::: tip Advanced team model -Do not build five separate twins. Build one shared system. Each teammate owns one agent in the council, and all five agents share the same `soul.md`. -::: +| Piece | What it does | +| --- | --- | +| **The spec** | Three plain-text files: how the person decides, how they write, what their calendar reveals | +| **The council** | Three agents that argue, one that decides and **publishes what it overruled** | +| **The critic** | Watches a miss, works out which line of the spec caused it, proposes a patch | +| **The server** | Exposes the whole thing as MCP tools, so any agent can call it | +| **The guardrail** | Refuses to act outside the spec's boundaries — enforced at the tool, not suggested in a prompt | + +The same spec folder also runs in Cowork and the CLI unmodified. That portability is the point. -## 2 · What you'll demonstrate +## Before you start -You will demonstrate the Advanced spine from the [🟣 Advanced · Code-Extended level page](/levels/advanced/): + + +```bash +git clone https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack.git +cd Team-Week-Imagineer-Hack/Allfiles/digital-twin-starter +``` -- A custom connector / tool: an MCP server that exposes the twin as callable tools. -- Grounding on live data: Work IQ evidence distilled into `revealed.md`. -- One guardrail: `check_boundary` returns `ALLOW`, `ASK_FIRST`, or `NEVER` before action leaves the system. +::: warning Copy it out before you edit +Work in your own copy, not in the repo folder. +::: -You should also show the portability spine: the same Agent Skills folder works across Cowork, VS Code Copilot, and the GitHub Copilot CLI. +**Check this first, before anything else:** open Copilot Chat in VS Code and confirm you can switch to **Agent** mode. It's an org-managed setting and it may be off. If it is, use the Copilot CLI instead — everything here works either way. -## 3 · Assembly map — snap these blocks together +--- -Start from the starter repo at `/Allfiles/digital-twin-starter/`. Copy it into your own working folder before editing. +## 1 · Split the work -### Step 0 — Divide the council +Five people, five agents, one shared spec. Decide this in the first two minutes. -| Owner | Agent | Job | Return shape | +| Who | Agent | Argues for | Returns | | --- | --- | --- | --- | -| Teammate 1 | `ambition.agent.md` | Argues for visible, strategic, reusable work. | Position, because, cost if ignored. | -| Teammate 2 | `obligation.agent.md` | Argues for promises already made and people waiting. | Position, because, cost if ignored. | -| Teammate 3 | `capacity.agent.md` | Argues from measured load and calendar reality. | Position, because, cost if ignored. | -| Teammate 4 | `arbiter.agent.md` | Invokes the three drives, applies `soul.md`, decides in voice, publishes dissent. | Decision, draft, dissent, confidence, gap. | -| Teammate 5 | `critic.agent.md` | Diagnoses misses and proposes tiny spec patches for approval. | Root cause, diff, net lines. | +| 1 | **Ambition** | The visible, strategic, reusable work | position · because · cost if ignored | +| 2 | **Obligation** | Promises already made, people waiting | position · because · cost if ignored | +| 3 | **Capacity** | What the calendar says you can actually absorb | position · because · cost if ignored | +| 4 | **Arbiter** | Nothing — it decides, in voice, and publishes the dissent | decision · draft · dissent · confidence · gap | +| 5 | **Critic** | Nothing — it diagnoses misses and patches the spec | root cause · diff · net lines | -If you have fewer than five people, combine Critic with Arbiter. If you have more, add a test owner and a demo owner. +**Fewer than five?** Fold the Critic into the Arbiter. **More?** Add someone on tests and someone on the demo. -### Step 1 — Set up the agent workbench +::: tip The drives should be biased +Ambition shouldn't be balanced. Neither should Obligation or Capacity. Each one argues its corner as hard as it can — the Arbiter is where nuance happens. Balanced sub-agents produce mush. +::: -Use [Set up Scout / GitHub Copilot](/bricks/advanced-setup). +## 2 · Write the spec -You need: +Three files, shared by everyone. Get a rough version fast, then improve it all session. -```text -.github/agents/ - ambition.agent.md - obligation.agent.md - capacity.agent.md - arbiter.agent.md - critic.agent.md -.vscode/mcp.json -digital-twin/ - SKILL.md - references/ - soul.md - voice.md - revealed.md -``` +**soul** — how the person decides. Aim for about a page. The critical part is **tiebreakers, not values**: -::: warning What will eat your clock -The orchestrator will not reliably delegate unless its instructions say: `You MUST invoke each agent as a subagent before synthesizing.` Put that sentence in `arbiter.agent.md`. -::: +| ❌ Value | ✅ Tiebreaker | +| --- | --- | +| I value responsiveness. | When a same-day exec ask collides with a peer promise, cut scope before slipping the peer. | +| I care about quality. | When a claim can't be verified before the deadline, cut that section and hold the date. | -### Step 2 — Build the portable spec +A value tells an agent nothing. A tiebreaker tells it what to do. -Create or refine: +**voice** — 5–10 real sent emails, verbatim, plus the rules those samples imply. Don't clean them up; the quirks are the whole signal. -1. `soul.md` — keep it close to one page. Write tiebreakers, not values. -2. `voice.md` — include samples, then style rules inferred from the samples. -3. `revealed.md` — include measured behavior from Work IQ or the persona pack. +**revealed** — what the calendar actually shows. -Bad rule: +::: tip Shorter really is better +Resist adding one more clause. Anthropic [found while building Constitutional AI](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback) that broad principles beat long specific ones. ["Lost in the Middle"](https://arxiv.org/abs/2307.03172) (peer-reviewed, *Transactions of the ACL*) showed models pay least attention to whatever's in the middle of a long prompt. Your spec is a prompt. +::: -```text -I value responsiveness. -``` +## 3 · Ground it in real behavior + +This is the half a person can't self-report. Pull it from evidence. -Good rule: +**Your own data** — let Cowork's Work IQ do the retrieval and export the summary. Ask for percentages, not raw entries: ```text -When a same-day executive ask collides with a peer promise, cut scope before slipping the peer promise. +Summarize my last 30 days of calendar: time by category, accept/decline/tentative +ratio, self-organized vs invited ratio, recurring load. Use percentages. +Leave out private meeting titles. ``` -### Step 3 — Ground the twin +**Avery Washington** — the persona pack has a 30-day calendar with everything already in it. -Use [Ground on live data with Work IQ](/bricks/advanced-work-iq). +Either way, extract these four: -Choose one path: +- time by category +- **response latency by sender** — the honest stakeholder ranking, whatever the org chart says +- accept / decline / tentative ratio +- self-organized vs. invited -- **Path A — Own data:** ask Cowork's native Work IQ to summarize your last ~30 days of calendar and recent sent-mail style. Export the distilled result. Do not demo raw private entries. -- **Path B — Avery Washington pack:** use the synthetic marketing manager data at `/Allfiles/persona-pack/`. - -Extract: - -- Time allocation by category. -- Response latency by sender as the honest stakeholder ranking. -- Accept / decline / tentative ratios. -- Self-organized vs invited ratio. +::: danger Don't build a Graph integration +Azure AD app registration plus MSAL will take 30–60 minutes and eat your session. Roughly a third of teams that try it never get past it. Let Cowork retrieve, or use the persona pack. Your working style is slow-moving data — a monthly snapshot is plenty. +::: -### Step 4 — Add the MCP connector +## 4 · Write the agents -Use [Build a custom connector (MCP)](/bricks/advanced-mcp-connector). +Five files in `.github/agents/`. The starter repo has the required frontmatter and return contract for each — the bodies are yours. -Expose thin tools first: +::: warning This one will cost you 20 minutes if you miss it +The Arbiter won't actually delegate unless you tell it to, in those words: ```text -soul_spec() -voice_rules() -revealed_behavior() -check_boundary(action, recipient) -soul_gap() +You MUST invoke each agent as a subagent before synthesizing. ``` -Add thick tools only if you have time: +Without that line it'll just answer directly and you'll wonder why the council never runs. +::: -```text -twin_decide(situation) -twin_draft(recipient, intent) -propose_soul_patch(what_the_twin_said, what_the_person_would_do) -``` +Two more that bite: -::: warning Keep connector tools thin -Verbose subagents blow the context window. Force short structured returns. Connector-shaped tools should answer in under 30 seconds. -::: +- **Force short returns.** Three verbose sub-agents will blow the Arbiter's context window before it reasons. +- **Run with `--allow-all-tools`** in your own repo, or you'll spend the session clicking approval prompts. -### Step 5 — Add the guardrail +## 5 · Expose it as a server -Use [Add a guardrail / output check](/bricks/advanced-guardrail). +Build the MCP server so anything can call your twin — Cowork, VS Code, Claude, an agent nobody's written yet. -`check_boundary` must return: +**Thin tools first.** These just read files, so they're instant and free: ```text -ALLOW | ASK_FIRST | NEVER -rule: -source: +soul_spec() voice_rules() revealed_behavior() +check_boundary(action, recipient) soul_gap() ``` -Enforce it before send, share, commit, decline, or external communication. This is a tool boundary, not a prompt suggestion. - -### Step 6 — Run the council from the CLI +**Thick tools if you have time.** These spend model calls: -Use the CLI for repeatable tests. - -```powershell -copilot -p "Read the arbiter task from this repo and run the council on the dilemma." --allow-all-tools +```text +twin_decide(situation) twin_draft(recipient, intent) +propose_soul_patch(what_it_said, what_they_would_do) ``` -::: warning Approval prompts eat the hack -Use `--allow-all-tools` for the local hack repo or you will sit in approval prompts instead of building. Long prompts on Windows should go through a file, not the command line. -::: +The split matters: Cowork connectors need answers in **under 30 seconds**, which the thin tools clear easily and `twin_decide` never will. -### Step 7 — Mid-build twist, at about 55 minutes +## 6 · Add the guardrail -Run this conflict through the council: +One check that runs before anything leaves the system: ```text -A senior executive asks for a new customer narrative by 3 PM today. You already promised a peer that you would finish launch review notes by 4 PM. Use the twin to decide what to do, what to say to each person, and what scope to cut. +ALLOW | ASK_FIRST | NEVER +rule: +source: ``` -The point is not to produce the nicest answer. The point is to show the argument: ambition, obligation, capacity, arbiter, dissent, and boundary check. +Run it before any send, share, commit, decline, or external message. + +**Enforce it at the tool, not in a prompt.** That's the difference between a suggestion and a boundary — yours has to hold even when the caller is an agent you didn't write. -### Step 8 — Patch one miss +## 7 · ⚡ The twist -Have the Critic diagnose one failure. It must propose a diff, not rewrite the whole spec. +Your facilitator will hand this out partway through. Run it through the full council: ```text -HARD CAP: net growth is +2 lines or less. -Human approval required before writing. +A senior executive wants a new customer narrative by 3 PM today. +You already promised a peer their launch review notes by 4 PM. +Decide what to do, what to say to each of them, and what gets cut. ``` -## 4 · The data +You're not looking for the nicest answer. You're looking for **the argument** — three positions, one decision, and a clear statement of what got overruled and why. -Use one of two paths. +## 8 · Let the critic patch it -### Path A — Your own Microsoft 365 data - -Use Cowork's Work IQ to retrieve and summarize. Keep the final artifact safe. +Find one thing the twin got wrong. Have the Critic diagnose **which line of the spec caused it** — not "the answer was bad." ```text -Summarize my last 30 days of calendar by category, organizer type, accept/decline/tentative ratio, self-organized vs invited ratio, and recurring meeting load. Use percentages. Do not include private meeting titles in the final output. +HARD CAP: net growth of +2 lines. +Human approves before anything is written. ``` -```text -Find 5-10 sent emails that show my normal writing style. Quote only samples I approve for this hack artifact. Infer style rules from the samples. -``` +The cap is the whole point. Without it, a critic "fixes" every miss by making the spec fatter, and a fatter spec is a worse spec. -### Path B — Avery Washington persona pack +::: tip Say the honest limit out loud in your demo +The **file** gets better. The **model** doesn't learn. Every run reloads an improved file. That's real and useful, and it isn't training — claiming otherwise is the fastest way to lose a technical room. +::: -Use `/Allfiles/persona-pack/`. Avery Washington is synthetic. This path is safer for demos and faster for teams that do not want to use personal work data. +--- -### Starter repo +## Show it off -Use `/Allfiles/digital-twin-starter/` for the initial folder shape, scripts, agent files, and MCP server skeleton. Do not edit that folder directly. Copy it into your team workspace. +60–90 seconds. Hit these: -## 5 · Demo checklist +- [ ] The folder — spec, agents, server +- [ ] **One thing the calendar revealed that self-report would never have caught** +- [ ] The council: who owns what, and the short return shape +- [ ] The twist, run live +- [ ] Arbiter output — **especially the dissent** +- [ ] The guardrail returning `NEVER` on something +- [ ] One critic patch, +2 lines or fewer +- [ ] The same spec folder running somewhere else — CLI, VS Code, or Cowork -Show these in 60-90 seconds: +::: tip The moment that lands +Not the architecture. It's the dissent — showing what your twin *decided against*, and why. A single prompt can't produce that, and everyone in the room can see it. +::: + +## Stuck? -- [ ] The folder: `SKILL.md`, `soul.md`, `voice.md`, `revealed.md`, `.github/agents/*.agent.md`, and `mcp_server.py`. -- [ ] Which data path you used: own data or Avery Washington. -- [ ] One measured finding in `revealed.md` that self-report would have missed. -- [ ] The council division of labor and the short return shape from each subagent. -- [ ] The mid-build twist: executive ask colliding with peer promise. -- [ ] Arbiter output with decision, draft, dissent, confidence, and gap. -- [ ] `check_boundary` returning `ALLOW`, `ASK_FIRST`, or `NEVER` with source. -- [ ] One Critic patch with net growth of +2 lines or less. -- [ ] The same core folder running from either VS Code agent mode or the Copilot CLI. +| What you're seeing | What to do | +| --- | --- | +| Agent mode is missing in VS Code | Org-managed setting. Use the Copilot CLI instead | +| The Arbiter answers without consulting anyone | Add "You MUST invoke each agent as a subagent before synthesizing" | +| Output truncates, context blows up | Sub-agents are too verbose — force short structured returns | +| Endless approval prompts | `--allow-all-tools`, in your own repo only | +| Long prompts fail on Windows | Command line caps at 8191 chars — pass via a file. `twinlib.py` does this | +| Custom agents aren't picked up | They must be in `.github/agents/` with the right frontmatter | +| Every drive agrees with every other | They're too balanced. Make each one biased | + +--- -[← Back to start](/) · [Scenario 1 brief](/scenarios/scenario-1) +[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) · [Where this comes from](/resources/research) diff --git a/docs/resources/index.md b/docs/resources/index.md index dadae08..8afedf2 100644 --- a/docs/resources/index.md +++ b/docs/resources/index.md @@ -17,6 +17,10 @@ title: Resources - [Agent Academy](https://github.com/microsoft/agent-academy) — self-paced guided missions (Copilot Studio) - [Agents League](https://github.com/microsoft/agentsleague) — competitive hackathon format +## For facilitators + +- [Facilitator kit](/facilitator/) — role cards, interview script, coach playbook, run of show + ## Tools > **TODO** — links for Microsoft 365 Copilot, Cowork, Copilot Studio, Scout, GitHub Copilot. From 74c8261b74aed660f567e325dae5d96493446dee Mon Sep 17 00:00:00 2001 From: Matt Quinlan <37308730+maquinl@users.noreply.github.com> Date: Thu, 30 Jul 2026 15:01:40 +0100 Subject: [PATCH 07/12] Flatten the navigation - two clicks to instructions The IA was four layers deep before anyone reached a step they could follow: Scenarios -> Levels -> Building Blocks -> Build page. Building Blocks in particular was stale, left over from before the build pages became self-contained. - Top nav is now Home / How the Hack Works / Start Building / Submit / Resources. 'Start Building' goes DIRECTLY to a build page. - Levels, Building Blocks and Scenarios removed from top nav. Pages kept so nothing 404s; old level pages now point at the build pages. - Building Blocks renamed 'Reference guides' and moved under Resources, with a note saying you probably don't need them. - Brick content INLINED into the build pages as collapsible ::: details blocks, at the step where it's relevant. Zero navigation - the detail opens in place and the page stays scannable when closed. Cowork: how skills work / getting good samples / schedules+triggers Code: agent file anatomy / building the server / the guardrail - All 'Full guide' round-trip links removed from build pages. - External download links now open in a new tab. - Levels page collapsed from four pages to one comparison table with direct Start links. - Home cards point at real destinations instead of the old maze. --- docs/.vitepress/config.mts | 24 +++---- docs/bricks/index.md | 28 ++++---- docs/build/advanced-scenario-1.md | 103 +++++++++++++++++++++++++++++- docs/build/base-scenario-1.md | 81 +++++++++++++++++++++-- docs/index.md | 20 +++--- docs/levels/advanced/index.md | 41 ++---------- docs/levels/base/index.md | 44 ++----------- docs/levels/builder/index.md | 27 ++------ docs/levels/index.md | 27 ++++---- 9 files changed, 243 insertions(+), 152 deletions(-) diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index d420d16..bfa6d1d 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -17,22 +17,22 @@ export default defineConfig({ { text: "Home", link: "/" }, { text: "How the Hack Works", link: "/how-it-works/" }, { - text: "Levels", + text: "Start Building", items: [ - { text: "🟢 Base · Copilot-Crafted", link: "/levels/base/" }, - { text: "🔵 Builder · Agent-Orchestrated", link: "/levels/builder/" }, - { text: "🟣 Advanced · Code-Extended", link: "/levels/advanced/" }, + { text: "🟢 Cowork — no code", link: "/build/base-scenario-1" }, + { text: "🟣 Code — VS Code + Copilot", link: "/build/advanced-scenario-1" }, + { text: "🔵 Copilot Studio (coming soon)", link: "/build/builder-scenario-1" }, ], }, - { text: "Building Blocks", link: "/bricks/" }, - { text: "Scenarios", link: "/scenarios/" }, { text: "Submit", link: "/submit/" }, { text: "Resources", items: [ - { text: "Overview", link: "/resources/" }, - { text: "⬇ Downloads", link: "/resources/downloads" }, + { text: "Downloads", link: "/resources/downloads" }, { text: "Where This Comes From", link: "/resources/research" }, + { text: "Reference guides", link: "/bricks/" }, + { text: "For facilitators", link: "/facilitator/" }, + { text: "More", link: "/resources/" }, ], }, ], @@ -53,11 +53,11 @@ export default defineConfig({ ], "/bricks/": [ { - text: "Building Blocks", + text: "Reference guides", items: [{ text: "Overview", link: "/bricks/" }], }, { - text: "🟢 Base · Cowork", + text: "🟢 Cowork", items: [ { text: "Connect Cowork to a data source", link: "/bricks/cowork-connect-source" }, { text: "Write a reusable Cowork skill", link: "/bricks/cowork-build-skill" }, @@ -66,7 +66,7 @@ export default defineConfig({ ], }, { - text: "🔵 Builder · Copilot Studio", + text: "🔵 Copilot Studio (coming soon)", items: [ { text: "Create an agent + solution", link: "/bricks/studio-create-agent" }, { text: "Add a topic with a trigger", link: "/bricks/studio-topic-trigger" }, @@ -78,7 +78,7 @@ export default defineConfig({ ], }, { - text: "🟣 Advanced · Scout / GitHub Copilot", + text: "🟣 Code", items: [ { text: "Set up Scout / GitHub Copilot", link: "/bricks/advanced-setup" }, { text: "Build a custom connector (MCP)", link: "/bricks/advanced-mcp-connector" }, diff --git a/docs/bricks/index.md b/docs/bricks/index.md index cfdad25..3008ff1 100644 --- a/docs/bricks/index.md +++ b/docs/bricks/index.md @@ -1,33 +1,27 @@ --- -title: Building Blocks +title: Reference guides --- -# Building Blocks +# Reference guides -Building blocks are short, reusable **how-to guides** — each covers one function (like "add a topic with a trigger"). They're written once and work for **any** scenario. Pick the blocks your altitude and scenario need, and snap them together. +::: tip You probably don't need these +Everything you need to build is already on your build page — [🟢 Cowork](/build/base-scenario-1) or [🟣 Code](/build/advanced-scenario-1). These are the longer versions, here if you want to go deeper or come back after the hack. +::: -> **How to use these:** Your [altitude page](/levels/) lists the blocks you're expected to demonstrate. Learn the mechanic here, then apply it to your scenario's data. - -## 🟢 Base · Cowork +## 🟢 Cowork - [Connect Cowork to a data source](/bricks/cowork-connect-source) - [Write a reusable Cowork skill](/bricks/cowork-build-skill) - [Produce a formatted output](/bricks/cowork-formatted-output) - [Re-run a skill on new inputs](/bricks/cowork-rerun-skill) -## 🔵 Builder · Copilot Studio - -- [Create an agent + solution](/bricks/studio-create-agent) -- [Add a topic with a trigger](/bricks/studio-topic-trigger) -- [Ground on a knowledge source](/bricks/studio-knowledge-grounding) -- [Build two agents that hand off](/bricks/studio-multi-agent) -- [Add an agent flow](/bricks/studio-agent-flow) -- [Send an Adaptive Card to Teams](/bricks/studio-adaptive-card) -- [Publish your agent](/bricks/studio-publish) - -## 🟣 Advanced · Scout / GitHub Copilot +## 🟣 Code - [Set up Scout / GitHub Copilot](/bricks/advanced-setup) - [Build a custom connector (MCP)](/bricks/advanced-mcp-connector) - [Ground on live data with Work IQ](/bricks/advanced-work-iq) - [Add a guardrail / output check](/bricks/advanced-guardrail) + +## 🔵 Copilot Studio + +Coming soon. \ No newline at end of file diff --git a/docs/build/advanced-scenario-1.md b/docs/build/advanced-scenario-1.md index 9a5020c..0c9ed16 100644 --- a/docs/build/advanced-scenario-1.md +++ b/docs/build/advanced-scenario-1.md @@ -35,13 +35,13 @@ The same spec folder also runs in Cowork and the CLI unmodified. That portabilit ## Before you start
- + 📦 Starter repo Schema, MCP skeleton, council runner, test harness. The contract — not the solution. Get it → - + 🗂️ Avery Washington Optional. A made-up marketing manager with a fake inbox and calendar — use them instead of your own data. @@ -145,6 +145,51 @@ Two more that bite: - **Force short returns.** Three verbose sub-agents will blow the Arbiter's context window before it reasons. - **Run with `--allow-all-tools`** in your own repo, or you'll spend the session clicking approval prompts. +::: details Agent file anatomy +Each agent is a markdown file in `.github/agents/` with frontmatter declaring what it can reach: + +```md +--- +name: capacity +description: Argues from measured load. Subagent — never replies to the user. +tools: ['read'] +--- + +You are one of three competing drives. You are CAPACITY. + +Read `digital-twin/references/revealed.md` FIRST, then `soul.md`. +You argue from measured reality, not stated intent. + +You are biased. That is your job. Do not be balanced. + +**You are a subagent. Do NOT reply to the user. Return your position to the arbiter.** + +Return exactly: +POSITION: +BECAUSE: +COST IF IGNORED: +``` + +The Arbiter is the only one that talks to the user, and it declares its children: + +```md +--- +name: arbiter +description: Polls the drives, decides in voice, publishes the dissent. +tools: ['read', 'edit', 'agent'] +agents: ['ambition', 'obligation', 'capacity'] +--- +``` + +**Running it from the CLI:** + +```powershell +copilot -p "Run the council on this dilemma: " --allow-all-tools +``` + +On Windows the command line caps at 8191 characters, so long prompts have to go through a file — `twinlib.py` in the starter repo handles that for you. +::: + ## 5 · Expose it as a server Build the MCP server so anything can call your twin — Cowork, VS Code, Claude, an agent nobody's written yet. @@ -165,6 +210,36 @@ propose_soul_patch(what_it_said, what_they_would_do) The split matters: Cowork connectors need answers in **under 30 seconds**, which the thin tools clear easily and `twin_decide` never will. +::: details Building the server +```python +from mcp.server.mcpserver import MCPServer + +mcp = MCPServer(name="digital-twin", version="1.0.0") + +@mcp.tool(description="How this person decides. Call before drafting or prioritizing anything.") +def soul_spec() -> str: + return (REFS / "soul.md").read_text(encoding="utf-8") + +if __name__ == "__main__": + mcp.run(transport="stdio") # VS Code, Claude Desktop + # mcp.run(transport="streamable-http", host="127.0.0.1", port=8848) +``` + +**The `description` is not documentation** — it's how a calling agent decides whether to use your tool. Write it as an instruction: *"Call this before drafting anything on their behalf."* + +**Wire it into VS Code** with `.vscode/mcp.json` (already in the starter): + +```json +{ "servers": { "digital-twin": { + "type": "stdio", "command": "python", + "args": ["${workspaceFolder}/mcp_server.py"] } } } +``` + +Then `Ctrl+Shift+P` → **MCP: List Servers** → start it. Switch Copilot Chat to **Agent** mode and your tools appear under the 🔧 icon. + +**Two transports, two audiences.** `stdio` for local editors. `streamable-http` is the shape a Cowork connector needs — JSON-RPC 2.0 over HTTPS. Production would also need TLS and OAuth; local is fine today. +::: + ## 6 · Add the guardrail One check that runs before anything leaves the system: @@ -179,6 +254,30 @@ Run it before any send, share, commit, decline, or external message. **Enforce it at the tool, not in a prompt.** That's the difference between a suggestion and a boundary — yours has to hold even when the caller is an agent you didn't write. +::: details What a guardrail looks like +```python +@mcp.tool(description="Check whether an action is allowed before taking it. " + "Call before any send, commit, decline, or external message.") +def check_boundary(action: str, recipient: str = "") -> str: + a = f"{action} {recipient}".lower() + + if any(k in a for k in ("why", "reason", "travel", "calendar", "ooo")): + return ("NEVER\nrule: never disclose calendar reasons or travel. " + "A decline says WHEN I'm free, never WHY I'm not.\n" + "source: soul.md > Boundaries") + + if any(k in a for k in ("external", "customer", "commit", "deadline")): + return ("ASK_FIRST\nrule: anything external, or any date commitment.\n" + "source: soul.md > Boundaries") + + return "ALLOW\nrule: no boundary governs this\nsource: soul.md > Boundaries" +``` + +Note it returns **the rule and where it came from**, not just a verdict — so a calling agent can explain itself, and a human can audit it. + +**Try this in your demo:** have another agent ask your twin to explain why the person is out next week. Watching it return `NEVER` — with a citation — is the moment the room understands the difference between a boundary and a polite request. +::: + ## 7 · ⚡ The twist Your facilitator will hand this out partway through. Run it through the full council: diff --git a/docs/build/base-scenario-1.md b/docs/build/base-scenario-1.md index 15c05c9..05990e8 100644 --- a/docs/build/base-scenario-1.md +++ b/docs/build/base-scenario-1.md @@ -33,13 +33,13 @@ It's plain text, it's yours, and it works in Cowork, VS Code, and 30+ other AI t Grab these now — you'll need the first one in about two minutes.
- + Twin Forge A skill we built that interviews you and drafts your first twin. Download the file, then click Raw → Save. Get it → - + 🗂️ Avery Washington Optional. A made-up marketing manager with a fake inbox and calendar — use them instead of your own data. @@ -67,6 +67,34 @@ You'll see **"Skill uploaded — twin-forge."** **Start a new Cowork session afterwards.** Cowork only looks for new skills when a session begins, so an already-open one won't see it. ::: +::: details How skills work, if you're curious +A Cowork skill is one markdown file: a bit of YAML at the top telling Cowork *when* to load it, then plain instructions. + +```md +--- +name: meeting-brief +description: Use this when I ask for a meeting brief, prep notes, or a stakeholder summary. +--- + +# Meeting Brief + +When this skill runs, you MUST: +1. Identify the meeting, attendees, and goal. +2. Pull relevant calendar, email, and file context. +3. Return the output in the shape below. + +Never invent missing context. If evidence is thin, say what's missing. +``` + +Cowork decides which skill to load by reading the **description** — so put the phrases you'd actually type in there. + +Skills live in OneDrive at `/Documents/Cowork/skills/{name}/`. A skill can carry a `references/` folder (loaded into context when needed) and a `scripts/` folder (executed, not read). + +**The reason this matters:** it's the [Agent Skills open standard](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/blob/main/Allfiles/twin-forge/SKILL.md). The same file is read by VS Code Copilot, Claude Code, Gemini CLI, Cursor and 30+ other tools. You're not writing something trapped in one product. + +**Want to make your own later?** Cowork → Customize → Skills → **Add ▾** → **Create new** walks you through it. Or just say *"build me a skill that…"* in chat and it'll draft one with you. +::: + ## 2 · Pick your data Start a **new** Cowork session and say: @@ -106,8 +134,6 @@ This feels wrong and it's the single highest-value thing you'll do. Longer isn't **Cut anything that isn't a rule you'd actually apply.** -Want the mechanics of editing a skill? [Full guide →](/bricks/cowork-build-skill) - ## 5 · Give it your voice Open your voice file. If it *describes* your writing — "professional but friendly" — replace that with **actual emails you sent.** Five to ten, pasted exactly as you wrote them. @@ -118,7 +144,30 @@ When you write, you make hundreds of small choices you've never consciously noti Showing beats describing. -[Full guide →](/bricks/cowork-connect-source) +::: details Getting good samples out of Cowork +There's nothing to connect and no auth to set up — Cowork already reaches your mail, calendar, Teams, files and org chart through Work IQ. It only ever sees what you can see. + +The trick is asking for a shape you can reuse, not a summary: + +```text +Find my last 10 sent emails. Return one row per email with: date, recipient, +subject, the exact greeting, the exact signoff, and three verbatim phrases +that sound like me. Do not summarize before returning the table. +``` + +Then for the behavioral half: + +```text +Summarize my calendar for the last 30 days. Group time by category, and give me +the percentage I marked tentative, the percentage I organized myself, and my +typical response time by sender. +``` + +**Two rules:** ask for *one* source at a time, and tell it not to summarize before returning. Summaries lose exactly the detail you need. + +Keep the prompts that work — you'll want to run them again. +::: + ## 6 · Give it judgment @@ -164,7 +213,27 @@ Pick one and set it up: Cowork drafts and waits for your approval. Keep it that way today. ::: -[Full guide →](/bricks/cowork-rerun-skill) +::: details Setting up a schedule or a trigger +**Schedule** — just describe it in chat: + +```text +Send me a focus plan every weekday at 9 AM. +``` + +Manage them at **Cowork → Scheduled**, which has a **Runs** tab and a **Manage schedules** tab. You get up to five. + +**Trigger** — describe the event instead: + +```text +When my manager emails me about the launch, draft a reply in my voice. +``` + +Cowork proposes a **"Set up trigger?"** card showing *When*, *Run in*, *What it does*, and the permissions it needs. Review it, then arm it. + +Triggers fire on incoming email or a Teams message/@mention, and the default is **draft-and-approve** — it prepares the action and asks first. Leave that on. + +**Before you arm anything:** run the skill manually on new input once and check the output still holds up. Automating something unreliable just makes it unreliable on a schedule. +::: --- diff --git a/docs/index.md b/docs/index.md index 5600195..0cb611a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -36,23 +36,23 @@ hero:
- + 🎯 1 · Pick a scenario - A real, relatable Microsoft work problem on safe, sanitized data. Coming soon. + Scenario 1 is The Digital Twin — a spec of how you work that any AI tool can read. See scenarios → 🎚️ - 2 · Pick your altitude - Base, Builder, or Advanced — how deep you want to build. - Pick altitude → + 2 · Pick how to build + Cowork with no code, or real code in VS Code. Same result, different route. + Compare → - + 🧱 - 3 · Follow the how-to guides - Short, step-by-step guides for each part of your build. Use the ones your solution needs. - Browse guides → + 3 · Follow your build page + Everything you need is on one page, start to finish. No hunting around. + Start building → 🚀 @@ -68,7 +68,7 @@ hero: ## Start here — build your path -

Pick your altitude, then your scenario, and we'll take you straight to your build page. All three altitudes solve the same problem — they're just different ways to build, so pick whichever fits how you like to work.

+

Two clicks and you're building. All three routes solve the same problem — pick whichever fits how you like to work.

diff --git a/docs/levels/advanced/index.md b/docs/levels/advanced/index.md index 83acbfa..369fc58 100644 --- a/docs/levels/advanced/index.md +++ b/docs/levels/advanced/index.md @@ -1,40 +1,13 @@ --- -title: Advanced · Code-Extended +title: Pick how you want to build --- -# 🟣 Advanced · Code-Extended +# Pick how you want to build -**Build with:** Scout + GitHub Copilot. +This page moved. Head straight to your build page: -You write real code. You get the contract and the harness — not the solution. +- 🟢 **[Cowork — no code](/build/base-scenario-1)** +- 🟣 **[Code — VS Code + GitHub Copilot](/build/advanced-scenario-1)** +- 🔵 Copilot Studio — coming soon -## Assembly map - -| Scenario | Go here | -| --- | --- | -| **🧬 Scenario 1 · The Digital Twin** | **[Start building →](/build/advanced-scenario-1)** | -| Scenario 2 | Coming soon | -| Scenario 3 | Coming soon | - -::: tip Grab the starter repo first -Schema, MCP server skeleton, council runner, and test harness are on the [Downloads page](/resources/downloads). -::: - -## What you'll demonstrate (the spine) - -- [ ] A custom connector / tool -- [ ] Grounded on live data (Work IQ) -- [ ] One guardrail that checks the output - -## Building blocks for this altitude - -- [Set up Scout / GitHub Copilot](/bricks/advanced-setup) -- [Build a custom connector (MCP)](/bricks/advanced-mcp-connector) -- [Ground on live data with Work IQ](/bricks/advanced-work-iq) -- [Add a guardrail / output check](/bricks/advanced-guardrail) - -## How your team splits the work - -For Scenario 1, the team builds **one** system. Each person owns one agent in a council — Ambition, Obligation, Capacity, Arbiter, or Critic — and everyone shares a single `soul.md`. You have to integrate. That's the point. - -See [the build page](/build/advanced-scenario-1) for who owns what. +Or [compare the three](/levels/). \ No newline at end of file diff --git a/docs/levels/base/index.md b/docs/levels/base/index.md index 86b6ac0..369fc58 100644 --- a/docs/levels/base/index.md +++ b/docs/levels/base/index.md @@ -1,43 +1,13 @@ --- -title: Base · Copilot-Crafted +title: Pick how you want to build --- -# 🟢 Base · Copilot-Crafted +# Pick how you want to build -**Build with:** Microsoft 365 Copilot + Cowork. +This page moved. Head straight to your build page: -No code. Fully guided, step by step. +- 🟢 **[Cowork — no code](/build/base-scenario-1)** +- 🟣 **[Code — VS Code + GitHub Copilot](/build/advanced-scenario-1)** +- 🔵 Copilot Studio — coming soon -## Assembly map - -| Scenario | Go here | -| --- | --- | -| **🧬 Scenario 1 · The Digital Twin** | **[Start building →](/build/base-scenario-1)** | -| Scenario 2 | Coming soon | -| Scenario 3 | Coming soon | - -::: tip Start with Twin Forge -A skill we built that interviews you and drafts your first twin in about 12 minutes. Get it on the [Downloads page](/resources/downloads). -::: - -## What you'll demonstrate (the spine) - -Your build should show most of these. This is the fixed set of functions for this altitude — the scenario just decides *what* they operate on. - -- [ ] Pull from a data source -- [ ] Author a **reusable** Cowork skill -- [ ] Produce a clean, formatted output -- [ ] Re-run it on new inputs - -## Building blocks for this altitude - -- [Connect Cowork to a data source](/bricks/cowork-connect-source) -- [Write a reusable Cowork skill](/bricks/cowork-build-skill) -- [Produce a formatted output](/bricks/cowork-formatted-output) -- [Re-run a skill on new inputs](/bricks/cowork-rerun-skill) - -## How your team splits the work - -For Scenario 1, **each person builds their own twin** — but the team agrees on the shared schema: what belongs in `soul.md`, what makes a useful tiebreaker rule, what a good blind spot looks like. - -Collaborative on the spec. Individual on the instance. Compare twins at the halfway checkpoint and steal each other's best fields. +Or [compare the three](/levels/). \ No newline at end of file diff --git a/docs/levels/builder/index.md b/docs/levels/builder/index.md index d863557..369fc58 100644 --- a/docs/levels/builder/index.md +++ b/docs/levels/builder/index.md @@ -1,26 +1,13 @@ --- -title: Builder · Agent-Orchestrated +title: Pick how you want to build --- -# 🔵 Builder · Agent-Orchestrated +# Pick how you want to build -**Build with:** Copilot Studio. +This page moved. Head straight to your build page: -## What you'll demonstrate (the spine) +- 🟢 **[Cowork — no code](/build/base-scenario-1)** +- 🟣 **[Code — VS Code + GitHub Copilot](/build/advanced-scenario-1)** +- 🔵 Copilot Studio — coming soon -- [ ] Two agents that hand off (a classifier + a responder) -- [ ] Grounded on a real knowledge source -- [ ] One automated action (an Adaptive Card alert to Teams) -- [ ] A topic with a trigger, and/or an agent flow - -## Building blocks for this altitude - -- [Create an agent + solution](/bricks/studio-create-agent) -- [Add a topic with a trigger](/bricks/studio-topic-trigger) -- [Ground on a knowledge source](/bricks/studio-knowledge-grounding) -- [Build two agents that hand off](/bricks/studio-multi-agent) -- [Add an agent flow](/bricks/studio-agent-flow) -- [Send an Adaptive Card to Teams](/bricks/studio-adaptive-card) -- [Publish your agent](/bricks/studio-publish) - -> **TODO** — add the assembly map once scenarios are locked. +Or [compare the three](/levels/). \ No newline at end of file diff --git a/docs/levels/index.md b/docs/levels/index.md index e11c6de..d3016cb 100644 --- a/docs/levels/index.md +++ b/docs/levels/index.md @@ -1,23 +1,22 @@ --- -title: Pick Your Altitude +title: Pick how you want to build --- -# Pick Your Altitude +# Pick how you want to build -All three altitudes solve the same scenario — they're just different ways to build, so pick whichever fits how you like to work. +Same scenario, three ways in. Pick whichever fits how you like to work — no track is a lesser version of another. -| Altitude | Build with | You'll be doing | Scenario 1 | +| | Build with | You'll be | | | --- | --- | --- | --- | -| [🟢 **Base** · Copilot-Crafted](/levels/base/) | Microsoft 365 Copilot + Cowork | Writing instructions, not code. Fully guided. | [Start →](/build/base-scenario-1) | -| [🔵 **Builder** · Agent-Orchestrated](/levels/builder/) | Copilot Studio | Wiring agents together in a low-code maker studio. | Coming soon | -| [🟣 **Advanced** · Code-Extended](/levels/advanced/) | Scout + GitHub Copilot | Real code. You get a contract and a harness, not a solution. | [Start →](/build/advanced-scenario-1) | +| 🟢 **Cowork** | Microsoft 365 Copilot | Writing instructions, not code. Guided end to end. | **[Start →](/build/base-scenario-1)** | +| 🔵 **Copilot Studio** | Copilot Studio | Wiring agents in a low-code maker studio. | Coming soon | +| 🟣 **Code** | VS Code + GitHub Copilot | Writing real code. You get a contract, not a solution. | **[Start →](/build/advanced-scenario-1)** | -## Which one is right for me? +## Not sure? -- **Never built an agent?** Base. It's guided end to end, and a sharp Base build beats a rushed Advanced one. -- **Comfortable in a maker studio?** Builder. -- **You live in VS Code or a terminal?** Advanced. +- **Never built an agent before?** 🟢 Cowork. It's guided the whole way, and a sharp Cowork build beats a rushed code one. +- **You live in a terminal or VS Code?** 🟣 Code. -::: tip No altitude is a lesser version -Every altitude produces the same portable artifact. The tracks just differ in how you get there — and how far you push it. -::: +::: tip Everyone ends up with the same thing +All three produce the same portable spec. The tracks differ in how you get there and how far you push it. +::: \ No newline at end of file From 72538349c13651f2d4c8d1c44550ac808b542ca2 Mon Sep 17 00:00:00 2001 From: Matt Quinlan <37308730+maquinl@users.noreply.github.com> Date: Thu, 30 Jul 2026 15:14:26 +0100 Subject: [PATCH 08/12] Surface the full step-by-step guides instead of burying them Previous commit hid the guides under Resources and told people they probably didn't need them. That was wrong - they're good, detailed, and especially useful on the Base path. - 'Guides' is back in the top nav as its own item - Every build page has a callout near the top pointing at them - Each expandable block ends with a direct link to its full guide, opening in a NEW TAB so nobody loses their place mid-build - Guides index rewritten: no more 'you probably don't need these'. Now a 'use it when' table so people can tell at a glance which one answers their question - Renamed 'Reference guides' -> 'Step-by-step guides', which is what they actually are Net effect: quick version expands in place, full version is one visible click away in a new tab, and both are obvious from the build page. --- docs/.vitepress/config.mts | 6 +- docs/bricks/index.md | 32 +- docs/build/advanced-scenario-1.md | 697 +++++++++++++++--------------- docs/build/base-scenario-1.md | 550 +++++++++++------------ 4 files changed, 661 insertions(+), 624 deletions(-) diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index bfa6d1d..665fe98 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -25,12 +25,12 @@ export default defineConfig({ ], }, { text: "Submit", link: "/submit/" }, + { text: "Guides", link: "/bricks/" }, { text: "Resources", items: [ { text: "Downloads", link: "/resources/downloads" }, { text: "Where This Comes From", link: "/resources/research" }, - { text: "Reference guides", link: "/bricks/" }, { text: "For facilitators", link: "/facilitator/" }, { text: "More", link: "/resources/" }, ], @@ -53,8 +53,8 @@ export default defineConfig({ ], "/bricks/": [ { - text: "Reference guides", - items: [{ text: "Overview", link: "/bricks/" }], + text: "Step-by-step guides", + items: [{ text: "All guides", link: "/bricks/" }], }, { text: "🟢 Cowork", diff --git a/docs/bricks/index.md b/docs/bricks/index.md index 3008ff1..63f8038 100644 --- a/docs/bricks/index.md +++ b/docs/bricks/index.md @@ -1,26 +1,34 @@ --- -title: Reference guides +title: Step-by-step guides --- -# Reference guides +# Step-by-step guides -::: tip You probably don't need these -Everything you need to build is already on your build page — [🟢 Cowork](/build/base-scenario-1) or [🟣 Code](/build/advanced-scenario-1). These are the longer versions, here if you want to go deeper or come back after the hack. +Full walkthroughs for each part of a build — every click, every prompt, every setting. + +::: tip How these fit with your build page +Your build page ([🟢 Cowork](/build/base-scenario-1) · [🟣 Code](/build/advanced-scenario-1)) gets you through the hack top to bottom, with the essentials expandable in place. + +**These are the complete versions.** Open one in a new tab and keep it beside your build page if you want every step spelled out — or come back to them after the hack when you're building something of your own. ::: ## 🟢 Cowork -- [Connect Cowork to a data source](/bricks/cowork-connect-source) -- [Write a reusable Cowork skill](/bricks/cowork-build-skill) -- [Produce a formatted output](/bricks/cowork-formatted-output) -- [Re-run a skill on new inputs](/bricks/cowork-rerun-skill) +| Guide | Use it when | +| --- | --- | +| [Connect Cowork to a data source](/bricks/cowork-connect-source) | You need to pull your mail, calendar, or files — and get it back in a shape you can reuse | +| [Write a reusable Cowork skill](/bricks/cowork-build-skill) | You're creating or editing a skill and want the full anatomy, limits, and sharing options | +| [Produce a formatted output](/bricks/cowork-formatted-output) | Your output needs to come back the same way every time | +| [Re-run a skill on new inputs](/bricks/cowork-rerun-skill) | You want it to run on a schedule, or fire on an email or @mention | ## 🟣 Code -- [Set up Scout / GitHub Copilot](/bricks/advanced-setup) -- [Build a custom connector (MCP)](/bricks/advanced-mcp-connector) -- [Ground on live data with Work IQ](/bricks/advanced-work-iq) -- [Add a guardrail / output check](/bricks/advanced-guardrail) +| Guide | Use it when | +| --- | --- | +| [Set up Scout / GitHub Copilot](/bricks/advanced-setup) | Getting agent mode, the CLI, and custom agent files working | +| [Build a custom connector (MCP)](/bricks/advanced-mcp-connector) | Exposing your twin as tools other agents can call | +| [Ground on live data with Work IQ](/bricks/advanced-work-iq) | Turning real calendar and mail behavior into evidence | +| [Add a guardrail / output check](/bricks/advanced-guardrail) | Stopping an agent doing something it shouldn't | ## 🔵 Copilot Studio diff --git a/docs/build/advanced-scenario-1.md b/docs/build/advanced-scenario-1.md index 0c9ed16..99d3f35 100644 --- a/docs/build/advanced-scenario-1.md +++ b/docs/build/advanced-scenario-1.md @@ -1,341 +1,356 @@ ---- -title: The Digital Twin — Code ---- - - - -# 🧬 The Digital Twin - -**You'll build this in code — VS Code, GitHub Copilot, and the Copilot CLI.** - -You get the contract and the plumbing. You write the agents. - -## Why - -AI can write any email. It can't write *your* email. - -It knows everything about your company and nothing about you — so every draft needs a rewrite, and the time you saved disappears in the last mile. - -But there's a second problem, and it's the one you'll solve here: **a person's judgment isn't one voice. It's an argument.** When you decide what to do on a Monday, you're negotiating between ambition, obligation, and capacity. A single prompt can role-play one of those. It can't run the argument. - -## What your team will have built - -One system, not five. Everyone shares a single spec, and each person owns one agent that reasons over it. - -| Piece | What it does | -| --- | --- | -| **The spec** | Three plain-text files: how the person decides, how they write, what their calendar reveals | -| **The council** | Three agents that argue, one that decides and **publishes what it overruled** | -| **The critic** | Watches a miss, works out which line of the spec caused it, proposes a patch | -| **The server** | Exposes the whole thing as MCP tools, so any agent can call it | -| **The guardrail** | Refuses to act outside the spec's boundaries — enforced at the tool, not suggested in a prompt | - -The same spec folder also runs in Cowork and the CLI unmodified. That portability is the point. - -## Before you start - -
- -```bash -git clone https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack.git -cd Team-Week-Imagineer-Hack/Allfiles/digital-twin-starter -``` - -::: warning Copy it out before you edit -Work in your own copy, not in the repo folder. -::: - -**Check this first, before anything else:** open Copilot Chat in VS Code and confirm you can switch to **Agent** mode. It's an org-managed setting and it may be off. If it is, use the Copilot CLI instead — everything here works either way. - ---- - -## 1 · Split the work - -Five people, five agents, one shared spec. Decide this in the first two minutes. - -| Who | Agent | Argues for | Returns | -| --- | --- | --- | --- | -| 1 | **Ambition** | The visible, strategic, reusable work | position · because · cost if ignored | -| 2 | **Obligation** | Promises already made, people waiting | position · because · cost if ignored | -| 3 | **Capacity** | What the calendar says you can actually absorb | position · because · cost if ignored | -| 4 | **Arbiter** | Nothing — it decides, in voice, and publishes the dissent | decision · draft · dissent · confidence · gap | -| 5 | **Critic** | Nothing — it diagnoses misses and patches the spec | root cause · diff · net lines | - -**Fewer than five?** Fold the Critic into the Arbiter. **More?** Add someone on tests and someone on the demo. - -::: tip The drives should be biased -Ambition shouldn't be balanced. Neither should Obligation or Capacity. Each one argues its corner as hard as it can — the Arbiter is where nuance happens. Balanced sub-agents produce mush. -::: - -## 2 · Write the spec - -Three files, shared by everyone. Get a rough version fast, then improve it all session. - -**soul** — how the person decides. Aim for about a page. The critical part is **tiebreakers, not values**: - -| ❌ Value | ✅ Tiebreaker | -| --- | --- | -| I value responsiveness. | When a same-day exec ask collides with a peer promise, cut scope before slipping the peer. | -| I care about quality. | When a claim can't be verified before the deadline, cut that section and hold the date. | - -A value tells an agent nothing. A tiebreaker tells it what to do. - -**voice** — 5–10 real sent emails, verbatim, plus the rules those samples imply. Don't clean them up; the quirks are the whole signal. - -**revealed** — what the calendar actually shows. - -::: tip Shorter really is better -Resist adding one more clause. Anthropic [found while building Constitutional AI](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback) that broad principles beat long specific ones. ["Lost in the Middle"](https://arxiv.org/abs/2307.03172) (peer-reviewed, *Transactions of the ACL*) showed models pay least attention to whatever's in the middle of a long prompt. Your spec is a prompt. -::: - -## 3 · Ground it in real behavior - -This is the half a person can't self-report. Pull it from evidence. - -**Your own data** — let Cowork's Work IQ do the retrieval and export the summary. Ask for percentages, not raw entries: - -```text -Summarize my last 30 days of calendar: time by category, accept/decline/tentative -ratio, self-organized vs invited ratio, recurring load. Use percentages. -Leave out private meeting titles. -``` - -**Avery Washington** — the persona pack has a 30-day calendar with everything already in it. - -Either way, extract these four: - -- time by category -- **response latency by sender** — the honest stakeholder ranking, whatever the org chart says -- accept / decline / tentative ratio -- self-organized vs. invited - -::: danger Don't build a Graph integration -Azure AD app registration plus MSAL will take 30–60 minutes and eat your session. Roughly a third of teams that try it never get past it. Let Cowork retrieve, or use the persona pack. Your working style is slow-moving data — a monthly snapshot is plenty. -::: - -## 4 · Write the agents - -Five files in `.github/agents/`. The starter repo has the required frontmatter and return contract for each — the bodies are yours. - -::: warning This one will cost you 20 minutes if you miss it -The Arbiter won't actually delegate unless you tell it to, in those words: - -```text -You MUST invoke each agent as a subagent before synthesizing. -``` - -Without that line it'll just answer directly and you'll wonder why the council never runs. -::: - -Two more that bite: - -- **Force short returns.** Three verbose sub-agents will blow the Arbiter's context window before it reasons. -- **Run with `--allow-all-tools`** in your own repo, or you'll spend the session clicking approval prompts. - -::: details Agent file anatomy -Each agent is a markdown file in `.github/agents/` with frontmatter declaring what it can reach: - -```md ---- -name: capacity -description: Argues from measured load. Subagent — never replies to the user. -tools: ['read'] ---- - -You are one of three competing drives. You are CAPACITY. - -Read `digital-twin/references/revealed.md` FIRST, then `soul.md`. -You argue from measured reality, not stated intent. - -You are biased. That is your job. Do not be balanced. - -**You are a subagent. Do NOT reply to the user. Return your position to the arbiter.** - -Return exactly: -POSITION: -BECAUSE: -COST IF IGNORED: -``` - -The Arbiter is the only one that talks to the user, and it declares its children: - -```md ---- -name: arbiter -description: Polls the drives, decides in voice, publishes the dissent. -tools: ['read', 'edit', 'agent'] -agents: ['ambition', 'obligation', 'capacity'] ---- -``` - -**Running it from the CLI:** - -```powershell -copilot -p "Run the council on this dilemma: " --allow-all-tools -``` - -On Windows the command line caps at 8191 characters, so long prompts have to go through a file — `twinlib.py` in the starter repo handles that for you. -::: - -## 5 · Expose it as a server - -Build the MCP server so anything can call your twin — Cowork, VS Code, Claude, an agent nobody's written yet. - -**Thin tools first.** These just read files, so they're instant and free: - -```text -soul_spec() voice_rules() revealed_behavior() -check_boundary(action, recipient) soul_gap() -``` - -**Thick tools if you have time.** These spend model calls: - -```text -twin_decide(situation) twin_draft(recipient, intent) -propose_soul_patch(what_it_said, what_they_would_do) -``` - -The split matters: Cowork connectors need answers in **under 30 seconds**, which the thin tools clear easily and `twin_decide` never will. - -::: details Building the server -```python -from mcp.server.mcpserver import MCPServer - -mcp = MCPServer(name="digital-twin", version="1.0.0") - -@mcp.tool(description="How this person decides. Call before drafting or prioritizing anything.") -def soul_spec() -> str: - return (REFS / "soul.md").read_text(encoding="utf-8") - -if __name__ == "__main__": - mcp.run(transport="stdio") # VS Code, Claude Desktop - # mcp.run(transport="streamable-http", host="127.0.0.1", port=8848) -``` - -**The `description` is not documentation** — it's how a calling agent decides whether to use your tool. Write it as an instruction: *"Call this before drafting anything on their behalf."* - -**Wire it into VS Code** with `.vscode/mcp.json` (already in the starter): - -```json -{ "servers": { "digital-twin": { - "type": "stdio", "command": "python", - "args": ["${workspaceFolder}/mcp_server.py"] } } } -``` - -Then `Ctrl+Shift+P` → **MCP: List Servers** → start it. Switch Copilot Chat to **Agent** mode and your tools appear under the 🔧 icon. - -**Two transports, two audiences.** `stdio` for local editors. `streamable-http` is the shape a Cowork connector needs — JSON-RPC 2.0 over HTTPS. Production would also need TLS and OAuth; local is fine today. -::: - -## 6 · Add the guardrail - -One check that runs before anything leaves the system: - -```text -ALLOW | ASK_FIRST | NEVER -rule: -source: -``` - -Run it before any send, share, commit, decline, or external message. - -**Enforce it at the tool, not in a prompt.** That's the difference between a suggestion and a boundary — yours has to hold even when the caller is an agent you didn't write. - -::: details What a guardrail looks like -```python -@mcp.tool(description="Check whether an action is allowed before taking it. " - "Call before any send, commit, decline, or external message.") -def check_boundary(action: str, recipient: str = "") -> str: - a = f"{action} {recipient}".lower() - - if any(k in a for k in ("why", "reason", "travel", "calendar", "ooo")): - return ("NEVER\nrule: never disclose calendar reasons or travel. " - "A decline says WHEN I'm free, never WHY I'm not.\n" - "source: soul.md > Boundaries") - - if any(k in a for k in ("external", "customer", "commit", "deadline")): - return ("ASK_FIRST\nrule: anything external, or any date commitment.\n" - "source: soul.md > Boundaries") - - return "ALLOW\nrule: no boundary governs this\nsource: soul.md > Boundaries" -``` - -Note it returns **the rule and where it came from**, not just a verdict — so a calling agent can explain itself, and a human can audit it. - -**Try this in your demo:** have another agent ask your twin to explain why the person is out next week. Watching it return `NEVER` — with a citation — is the moment the room understands the difference between a boundary and a polite request. -::: - -## 7 · ⚡ The twist - -Your facilitator will hand this out partway through. Run it through the full council: - -```text -A senior executive wants a new customer narrative by 3 PM today. -You already promised a peer their launch review notes by 4 PM. -Decide what to do, what to say to each of them, and what gets cut. -``` - -You're not looking for the nicest answer. You're looking for **the argument** — three positions, one decision, and a clear statement of what got overruled and why. - -## 8 · Let the critic patch it - -Find one thing the twin got wrong. Have the Critic diagnose **which line of the spec caused it** — not "the answer was bad." - -```text -HARD CAP: net growth of +2 lines. -Human approves before anything is written. -``` - -The cap is the whole point. Without it, a critic "fixes" every miss by making the spec fatter, and a fatter spec is a worse spec. - -::: tip Say the honest limit out loud in your demo -The **file** gets better. The **model** doesn't learn. Every run reloads an improved file. That's real and useful, and it isn't training — claiming otherwise is the fastest way to lose a technical room. -::: - ---- - -## Show it off - -60–90 seconds. Hit these: - -- [ ] The folder — spec, agents, server -- [ ] **One thing the calendar revealed that self-report would never have caught** -- [ ] The council: who owns what, and the short return shape -- [ ] The twist, run live -- [ ] Arbiter output — **especially the dissent** -- [ ] The guardrail returning `NEVER` on something -- [ ] One critic patch, +2 lines or fewer -- [ ] The same spec folder running somewhere else — CLI, VS Code, or Cowork - -::: tip The moment that lands -Not the architecture. It's the dissent — showing what your twin *decided against*, and why. A single prompt can't produce that, and everyone in the room can see it. -::: - -## Stuck? - -| What you're seeing | What to do | -| --- | --- | -| Agent mode is missing in VS Code | Org-managed setting. Use the Copilot CLI instead | -| The Arbiter answers without consulting anyone | Add "You MUST invoke each agent as a subagent before synthesizing" | -| Output truncates, context blows up | Sub-agents are too verbose — force short structured returns | -| Endless approval prompts | `--allow-all-tools`, in your own repo only | -| Long prompts fail on Windows | Command line caps at 8191 chars — pass via a file. `twinlib.py` does this | -| Custom agents aren't picked up | They must be in `.github/agents/` with the right frontmatter | -| Every drive agrees with every other | They're too balanced. Make each one biased | - ---- - -[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) · [Where this comes from](/resources/research) +--- +title: The Digital Twin — Code +--- + + + +# 🧬 The Digital Twin + +**You'll build this in code — VS Code, GitHub Copilot, and the Copilot CLI.** + +You get the contract and the plumbing. You write the agents. + +## Why + +AI can write any email. It can't write *your* email. + +It knows everything about your company and nothing about you — so every draft needs a rewrite, and the time you saved disappears in the last mile. + +But there's a second problem, and it's the one you'll solve here: **a person's judgment isn't one voice. It's an argument.** When you decide what to do on a Monday, you're negotiating between ambition, obligation, and capacity. A single prompt can role-play one of those. It can't run the argument. + +## What your team will have built + +One system, not five. Everyone shares a single spec, and each person owns one agent that reasons over it. + +| Piece | What it does | +| --- | --- | +| **The spec** | Three plain-text files: how the person decides, how they write, what their calendar reveals | +| **The council** | Three agents that argue, one that decides and **publishes what it overruled** | +| **The critic** | Watches a miss, works out which line of the spec caused it, proposes a patch | +| **The server** | Exposes the whole thing as MCP tools, so any agent can call it | +| **The guardrail** | Refuses to act outside the spec's boundaries — enforced at the tool, not suggested in a prompt | + +The same spec folder also runs in Cowork and the CLI unmodified. That portability is the point. + +## Before you start + + + +```bash +git clone https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack.git +cd Team-Week-Imagineer-Hack/Allfiles/digital-twin-starter +``` + +::: warning Copy it out before you edit +Work in your own copy, not in the repo folder. +::: + +**Check this first, before anything else:** open Copilot Chat in VS Code and confirm you can switch to **Agent** mode. It's an org-managed setting and it may be off. If it is, use the Copilot CLI instead — everything here works either way. + +::: tip Want every step spelled out? +This page gets you through the build. There are also **[full step-by-step guides](/bricks/)** for each part — open one in a new tab and keep it beside this page. +::: + +--- + +## 1 · Split the work + +Five people, five agents, one shared spec. Decide this in the first two minutes. + +| Who | Agent | Argues for | Returns | +| --- | --- | --- | --- | +| 1 | **Ambition** | The visible, strategic, reusable work | position · because · cost if ignored | +| 2 | **Obligation** | Promises already made, people waiting | position · because · cost if ignored | +| 3 | **Capacity** | What the calendar says you can actually absorb | position · because · cost if ignored | +| 4 | **Arbiter** | Nothing — it decides, in voice, and publishes the dissent | decision · draft · dissent · confidence · gap | +| 5 | **Critic** | Nothing — it diagnoses misses and patches the spec | root cause · diff · net lines | + +**Fewer than five?** Fold the Critic into the Arbiter. **More?** Add someone on tests and someone on the demo. + +::: tip The drives should be biased +Ambition shouldn't be balanced. Neither should Obligation or Capacity. Each one argues its corner as hard as it can — the Arbiter is where nuance happens. Balanced sub-agents produce mush. +::: + +## 2 · Write the spec + +Three files, shared by everyone. Get a rough version fast, then improve it all session. + +**soul** — how the person decides. Aim for about a page. The critical part is **tiebreakers, not values**: + +| ❌ Value | ✅ Tiebreaker | +| --- | --- | +| I value responsiveness. | When a same-day exec ask collides with a peer promise, cut scope before slipping the peer. | +| I care about quality. | When a claim can't be verified before the deadline, cut that section and hold the date. | + +A value tells an agent nothing. A tiebreaker tells it what to do. + +**voice** — 5–10 real sent emails, verbatim, plus the rules those samples imply. Don't clean them up; the quirks are the whole signal. + +**revealed** — what the calendar actually shows. + +::: tip Shorter really is better +Resist adding one more clause. Anthropic [found while building Constitutional AI](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback) that broad principles beat long specific ones. ["Lost in the Middle"](https://arxiv.org/abs/2307.03172) (peer-reviewed, *Transactions of the ACL*) showed models pay least attention to whatever's in the middle of a long prompt. Your spec is a prompt. +::: + +## 3 · Ground it in real behavior + +This is the half a person can't self-report. Pull it from evidence. + +**Your own data** — let Cowork's Work IQ do the retrieval and export the summary. Ask for percentages, not raw entries: + +```text +Summarize my last 30 days of calendar: time by category, accept/decline/tentative +ratio, self-organized vs invited ratio, recurring load. Use percentages. +Leave out private meeting titles. +``` + +**Avery Washington** — the persona pack has a 30-day calendar with everything already in it. + +Either way, extract these four: + +- time by category +- **response latency by sender** — the honest stakeholder ranking, whatever the org chart says +- accept / decline / tentative ratio +- self-organized vs. invited + +::: danger Don't build a Graph integration +Azure AD app registration plus MSAL will take 30–60 minutes and eat your session. Roughly a third of teams that try it never get past it. Let Cowork retrieve, or use the persona pack. Your working style is slow-moving data — a monthly snapshot is plenty. + +📖 Ground on live data with Work IQ — full guide (opens in a new tab) ↗ +::: + +## 4 · Write the agents + +Five files in `.github/agents/`. The starter repo has the required frontmatter and return contract for each — the bodies are yours. + +::: warning This one will cost you 20 minutes if you miss it +The Arbiter won't actually delegate unless you tell it to, in those words: + +```text +You MUST invoke each agent as a subagent before synthesizing. +``` + +Without that line it'll just answer directly and you'll wonder why the council never runs. +::: + +Two more that bite: + +- **Force short returns.** Three verbose sub-agents will blow the Arbiter's context window before it reasons. +- **Run with `--allow-all-tools`** in your own repo, or you'll spend the session clicking approval prompts. + +::: details Agent file anatomy +Each agent is a markdown file in `.github/agents/` with frontmatter declaring what it can reach: + +```md +--- +name: capacity +description: Argues from measured load. Subagent — never replies to the user. +tools: ['read'] +--- + +You are one of three competing drives. You are CAPACITY. + +Read `digital-twin/references/revealed.md` FIRST, then `soul.md`. +You argue from measured reality, not stated intent. + +You are biased. That is your job. Do not be balanced. + +**You are a subagent. Do NOT reply to the user. Return your position to the arbiter.** + +Return exactly: +POSITION: +BECAUSE: +COST IF IGNORED: +``` + +The Arbiter is the only one that talks to the user, and it declares its children: + +```md +--- +name: arbiter +description: Polls the drives, decides in voice, publishes the dissent. +tools: ['read', 'edit', 'agent'] +agents: ['ambition', 'obligation', 'capacity'] +--- +``` + +**Running it from the CLI:** + +```powershell +copilot -p "Run the council on this dilemma: " --allow-all-tools +``` + +On Windows the command line caps at 8191 characters, so long prompts have to go through a file — `twinlib.py` in the starter repo handles that for you. + +📖 Set up Scout / GitHub Copilot — full guide (opens in a new tab) ↗ + +::: + +## 5 · Expose it as a server + +Build the MCP server so anything can call your twin — Cowork, VS Code, Claude, an agent nobody's written yet. + +**Thin tools first.** These just read files, so they're instant and free: + +```text +soul_spec() voice_rules() revealed_behavior() +check_boundary(action, recipient) soul_gap() +``` + +**Thick tools if you have time.** These spend model calls: + +```text +twin_decide(situation) twin_draft(recipient, intent) +propose_soul_patch(what_it_said, what_they_would_do) +``` + +The split matters: Cowork connectors need answers in **under 30 seconds**, which the thin tools clear easily and `twin_decide` never will. + +::: details Building the server +```python +from mcp.server.mcpserver import MCPServer + +mcp = MCPServer(name="digital-twin", version="1.0.0") + +@mcp.tool(description="How this person decides. Call before drafting or prioritizing anything.") +def soul_spec() -> str: + return (REFS / "soul.md").read_text(encoding="utf-8") + +if __name__ == "__main__": + mcp.run(transport="stdio") # VS Code, Claude Desktop + # mcp.run(transport="streamable-http", host="127.0.0.1", port=8848) +``` + +**The `description` is not documentation** — it's how a calling agent decides whether to use your tool. Write it as an instruction: *"Call this before drafting anything on their behalf."* + +**Wire it into VS Code** with `.vscode/mcp.json` (already in the starter): + +```json +{ "servers": { "digital-twin": { + "type": "stdio", "command": "python", + "args": ["${workspaceFolder}/mcp_server.py"] } } } +``` + +Then `Ctrl+Shift+P` → **MCP: List Servers** → start it. Switch Copilot Chat to **Agent** mode and your tools appear under the 🔧 icon. + +**Two transports, two audiences.** `stdio` for local editors. `streamable-http` is the shape a Cowork connector needs — JSON-RPC 2.0 over HTTPS. Production would also need TLS and OAuth; local is fine today. + +📖 Build a custom connector (MCP) — full guide (opens in a new tab) ↗ + +::: + +## 6 · Add the guardrail + +One check that runs before anything leaves the system: + +```text +ALLOW | ASK_FIRST | NEVER +rule: +source: +``` + +Run it before any send, share, commit, decline, or external message. + +**Enforce it at the tool, not in a prompt.** That's the difference between a suggestion and a boundary — yours has to hold even when the caller is an agent you didn't write. + +::: details What a guardrail looks like +```python +@mcp.tool(description="Check whether an action is allowed before taking it. " + "Call before any send, commit, decline, or external message.") +def check_boundary(action: str, recipient: str = "") -> str: + a = f"{action} {recipient}".lower() + + if any(k in a for k in ("why", "reason", "travel", "calendar", "ooo")): + return ("NEVER\nrule: never disclose calendar reasons or travel. " + "A decline says WHEN I'm free, never WHY I'm not.\n" + "source: soul.md > Boundaries") + + if any(k in a for k in ("external", "customer", "commit", "deadline")): + return ("ASK_FIRST\nrule: anything external, or any date commitment.\n" + "source: soul.md > Boundaries") + + return "ALLOW\nrule: no boundary governs this\nsource: soul.md > Boundaries" +``` + +Note it returns **the rule and where it came from**, not just a verdict — so a calling agent can explain itself, and a human can audit it. + +**Try this in your demo:** have another agent ask your twin to explain why the person is out next week. Watching it return `NEVER` — with a citation — is the moment the room understands the difference between a boundary and a polite request. + +📖 Add a guardrail / output check — full guide (opens in a new tab) ↗ + +::: + +## 7 · ⚡ The twist + +Your facilitator will hand this out partway through. Run it through the full council: + +```text +A senior executive wants a new customer narrative by 3 PM today. +You already promised a peer their launch review notes by 4 PM. +Decide what to do, what to say to each of them, and what gets cut. +``` + +You're not looking for the nicest answer. You're looking for **the argument** — three positions, one decision, and a clear statement of what got overruled and why. + +## 8 · Let the critic patch it + +Find one thing the twin got wrong. Have the Critic diagnose **which line of the spec caused it** — not "the answer was bad." + +```text +HARD CAP: net growth of +2 lines. +Human approves before anything is written. +``` + +The cap is the whole point. Without it, a critic "fixes" every miss by making the spec fatter, and a fatter spec is a worse spec. + +::: tip Say the honest limit out loud in your demo +The **file** gets better. The **model** doesn't learn. Every run reloads an improved file. That's real and useful, and it isn't training — claiming otherwise is the fastest way to lose a technical room. +::: + +--- + +## Show it off + +60–90 seconds. Hit these: + +- [ ] The folder — spec, agents, server +- [ ] **One thing the calendar revealed that self-report would never have caught** +- [ ] The council: who owns what, and the short return shape +- [ ] The twist, run live +- [ ] Arbiter output — **especially the dissent** +- [ ] The guardrail returning `NEVER` on something +- [ ] One critic patch, +2 lines or fewer +- [ ] The same spec folder running somewhere else — CLI, VS Code, or Cowork + +::: tip The moment that lands +Not the architecture. It's the dissent — showing what your twin *decided against*, and why. A single prompt can't produce that, and everyone in the room can see it. +::: + +## Stuck? + +| What you're seeing | What to do | +| --- | --- | +| Agent mode is missing in VS Code | Org-managed setting. Use the Copilot CLI instead | +| The Arbiter answers without consulting anyone | Add "You MUST invoke each agent as a subagent before synthesizing" | +| Output truncates, context blows up | Sub-agents are too verbose — force short structured returns | +| Endless approval prompts | `--allow-all-tools`, in your own repo only | +| Long prompts fail on Windows | Command line caps at 8191 chars — pass via a file. `twinlib.py` does this | +| Custom agents aren't picked up | They must be in `.github/agents/` with the right frontmatter | +| Every drive agrees with every other | They're too balanced. Make each one biased | + +--- + +[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) · [Where this comes from](/resources/research) diff --git a/docs/build/base-scenario-1.md b/docs/build/base-scenario-1.md index 05990e8..b11a566 100644 --- a/docs/build/base-scenario-1.md +++ b/docs/build/base-scenario-1.md @@ -1,268 +1,282 @@ ---- -title: The Digital Twin — Cowork ---- - - - -# 🧬 The Digital Twin - -**You'll build this in Cowork. No code, and no experience needed.** - -## Why - -AI can write any email. It can't write *your* email. - -It knows everything about your company and nothing about you — so every draft needs a rewrite, and the time you saved disappears in the last mile. - -**The last mile is you.** Today you're going to write that part down. - -## What you'll walk out with - -A one-page spec of how you actually work — and any AI tool can read it. - -| File | What it holds | -| --- | --- | -| **soul** | How you decide. Your priorities, and what you do when two of them collide. | -| **voice** | How you write. Real emails of yours, and the patterns inside them. | -| **revealed** | What your calendar says about you — versus what you say about you. | - -It's plain text, it's yours, and it works in Cowork, VS Code, and 30+ other AI tools without changing a thing. - -## Before you start - -Grab these now — you'll need the first one in about two minutes. - - - ---- - -## 1 · Install Twin Forge - -1. Open Microsoft 365 Copilot and click the **Cowork** tab. -2. In the left menu, click **Customize**. -3. Click the **Skills** tab. -4. Click the arrow next to **Add**, then **Upload skill**. -5. Choose the `SKILL.md` file you downloaded. - -You'll see **"Skill uploaded — twin-forge."** - -![Twin Forge showing under Your skills on the Cowork Customize page](/img/twin-forge-uploaded.png) - -::: warning Two things that will trip you up -**Upload the file on its own.** Don't zip it. Zipped uploads fail silently — nothing appears and you get no error. - -**Start a new Cowork session afterwards.** Cowork only looks for new skills when a session begins, so an already-open one won't see it. -::: - -::: details How skills work, if you're curious -A Cowork skill is one markdown file: a bit of YAML at the top telling Cowork *when* to load it, then plain instructions. - -```md ---- -name: meeting-brief -description: Use this when I ask for a meeting brief, prep notes, or a stakeholder summary. ---- - -# Meeting Brief - -When this skill runs, you MUST: -1. Identify the meeting, attendees, and goal. -2. Pull relevant calendar, email, and file context. -3. Return the output in the shape below. - -Never invent missing context. If evidence is thin, say what's missing. -``` - -Cowork decides which skill to load by reading the **description** — so put the phrases you'd actually type in there. - -Skills live in OneDrive at `/Documents/Cowork/skills/{name}/`. A skill can carry a `references/` folder (loaded into context when needed) and a `scripts/` folder (executed, not read). - -**The reason this matters:** it's the [Agent Skills open standard](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/blob/main/Allfiles/twin-forge/SKILL.md). The same file is read by VS Code Copilot, Claude Code, Gemini CLI, Cursor and 30+ other tools. You're not writing something trapped in one product. - -**Want to make your own later?** Cowork → Customize → Skills → **Add ▾** → **Create new** walks you through it. Or just say *"build me a skill that…"* in chat and it'll draft one with you. -::: - -## 2 · Pick your data - -Start a **new** Cowork session and say: - -```text -Start Twin Forge and help me build a v0.1 digital twin. -``` - -It'll ask which you want: - -**Your own data** — Twin Forge reads your sent mail and calendar. Nothing is set up, nothing is shared, and it only sees what you can already see. This makes the better twin, because it's really you. - -**Avery Washington** — the made-up marketing manager. Pick this if you'd rather not use your own work data. Download their pack and **attach the files** when Twin Forge asks; it can't see them otherwise. - -## 3 · Get your first draft - -Twin Forge takes it from here, about 12 minutes: - -- reads your last ~10 sent emails and ~30 days of calendar -- asks you around 8 quick questions, one at a time -- shows you where what you *said* and what your calendar *shows* disagree -- writes your three files - -::: tip Answer honestly, not aspirationally -Every question is *"what did you actually do last time?"* — not *"what do you value?"* If you describe your best self, you'll get a twin of someone else. -::: - -**You now have a v0.1 twin. Everything from here is you making it good — and that's the actual hack.** - ---- - -## 4 · Make it shorter - -Your first draft is too long. Cut it to about one page. - -This feels wrong and it's the single highest-value thing you'll do. Longer isn't better. Anthropic [found while building Constitutional AI](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback) that broad principles worked better than long, specific ones — the longer versions actually reduced effectiveness. And ["Lost in the Middle"](https://arxiv.org/abs/2307.03172) (peer-reviewed, *Transactions of the ACL*) showed models pay least attention to whatever sits in the middle of a long prompt. - -**Cut anything that isn't a rule you'd actually apply.** - -## 5 · Give it your voice - -Open your voice file. If it *describes* your writing — "professional but friendly" — replace that with **actual emails you sent.** Five to ten, pasted exactly as you wrote them. - -Don't tidy them up. The dropped apostrophes, the dashes, the way you sign off — that's the whole signal. - -When you write, you make hundreds of small choices you've never consciously noticed — how you open, whether you bullet or run on, what you do with dashes, how you sign off. You can't list them. But they're all sitting there in your sent folder. - -Showing beats describing. - -::: details Getting good samples out of Cowork -There's nothing to connect and no auth to set up — Cowork already reaches your mail, calendar, Teams, files and org chart through Work IQ. It only ever sees what you can see. - -The trick is asking for a shape you can reuse, not a summary: - -```text -Find my last 10 sent emails. Return one row per email with: date, recipient, -subject, the exact greeting, the exact signoff, and three verbatim phrases -that sound like me. Do not summarize before returning the table. -``` - -Then for the behavioral half: - -```text -Summarize my calendar for the last 30 days. Group time by category, and give me -the percentage I marked tentative, the percentage I organized myself, and my -typical response time by sender. -``` - -**Two rules:** ask for *one* source at a time, and tell it not to summarize before returning. Summaries lose exactly the detail you need. - -Keep the prompts that work — you'll want to run them again. -::: - - -## 6 · Give it judgment - -Your twin needs to know what you do when two good things collide. Most first drafts have values where rules should be. - -| ❌ This is a value | ✅ This is a rule | -| --- | --- | -| I value accuracy. | When an unverified claim threatens a committed date, cut scope and hold the date. | -| I'm responsive to leadership. | When an exec ask conflicts with a peer promise, reply to the exec within the hour, protect the peer's deadline, offer a smaller same-day version. | -| I collaborate well. | When two people both say theirs is top priority, I decide and tell them. I don't escalate it. | - -A value tells an agent nothing. **A rule tells it what to do.** - -## 7 · Compare with your team - -Ten minutes, together. Everyone built their own twin — now build a better *shape* for all of them. - -Each person shows **one rule that worked** and **one that's still vague.** Steal shamelessly. Agree on what belongs in a good soul file. Keep your own answers; share the structure. - -## 8 · ⚡ The twist - -Your facilitator will hand this out partway through. Give it to your twin: - -```text -A senior executive wants a new customer narrative by 3 PM today. -You already promised a peer their launch review notes by 4 PM. -Use my twin: what do I do, what do I say to each of them, and what gets cut? -``` - -The goal isn't a polite answer. It's whether your twin makes **your** tradeoff — and can say what it gave up. - -If it can't, you've found your next missing rule. Add it and run it again. - -## 9 · Make it run without you - -Pick one and set it up: - -**On a schedule** — *"Every weekday at 9 AM, compare my calendar to my capacity rules and draft a focus plan."* - -**On a trigger** — fires when an email arrives or someone @mentions you in Teams. - -::: warning Nothing sends on its own -Cowork drafts and waits for your approval. Keep it that way today. -::: - -::: details Setting up a schedule or a trigger -**Schedule** — just describe it in chat: - -```text -Send me a focus plan every weekday at 9 AM. -``` - -Manage them at **Cowork → Scheduled**, which has a **Runs** tab and a **Manage schedules** tab. You get up to five. - -**Trigger** — describe the event instead: - -```text -When my manager emails me about the launch, draft a reply in my voice. -``` - -Cowork proposes a **"Set up trigger?"** card showing *When*, *Run in*, *What it does*, and the permissions it needs. Review it, then arm it. - -Triggers fire on incoming email or a Teams message/@mention, and the default is **draft-and-approve** — it prepares the action and asks first. Leave that on. - -**Before you arm anything:** run the skill manually on new input once and check the output still holds up. Automating something unreliable just makes it unreliable on a schedule. -::: - ---- - -## Show it off - -60–90 seconds. Hit these: - -- [ ] Whose twin — yours or Avery's -- [ ] Your soul file, about a page -- [ ] Your voice file, with real samples in it -- [ ] **One thing your calendar revealed that surprised you** -- [ ] The exec-vs-peer conflict, and what your twin decided -- [ ] Your scheduled prompt or trigger - -::: tip The best demo isn't the most complex one -It's the one where someone reads a draft your twin wrote and says *"yeah, that sounds like you."* -::: - -## Stuck? - -| What you're seeing | What to do | -| --- | --- | -| Cowork ignores Twin Forge | Start a **new** session — skills only load at the start | -| Upload seemed to do nothing | Upload the `.md` file, not a zip | -| "I can't find the reference files" | You've got an old copy — re-download it | -| Avery's data can't be found | Attach the pack files to the session | -| Twin sounds like a stranger | Your voice file is descriptions, not real emails. Go back to step 5 | -| Twin gives wishy-washy answers | Your soul file has values, not rules. Go back to step 6 | - ---- - -[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) · [Where this comes from](/resources/research) +--- +title: The Digital Twin — Cowork +--- + + + +# 🧬 The Digital Twin + +**You'll build this in Cowork. No code, and no experience needed.** + +## Why + +AI can write any email. It can't write *your* email. + +It knows everything about your company and nothing about you — so every draft needs a rewrite, and the time you saved disappears in the last mile. + +**The last mile is you.** Today you're going to write that part down. + +## What you'll walk out with + +A one-page spec of how you actually work — and any AI tool can read it. + +| File | What it holds | +| --- | --- | +| **soul** | How you decide. Your priorities, and what you do when two of them collide. | +| **voice** | How you write. Real emails of yours, and the patterns inside them. | +| **revealed** | What your calendar says about you — versus what you say about you. | + +It's plain text, it's yours, and it works in Cowork, VS Code, and 30+ other AI tools without changing a thing. + +## Before you start + +Grab these now — you'll need the first one in about two minutes. + + + +::: tip Want every step spelled out? +This page gets you through the build, with the essentials expandable in place. There are also **[full step-by-step guides](/bricks/)** covering every click and setting — open one in a new tab and keep it beside this page. +::: + +--- + +## 1 · Install Twin Forge + +1. Open Microsoft 365 Copilot and click the **Cowork** tab. +2. In the left menu, click **Customize**. +3. Click the **Skills** tab. +4. Click the arrow next to **Add**, then **Upload skill**. +5. Choose the `SKILL.md` file you downloaded. + +You'll see **"Skill uploaded — twin-forge."** + +![Twin Forge showing under Your skills on the Cowork Customize page](/img/twin-forge-uploaded.png) + +::: warning Two things that will trip you up +**Upload the file on its own.** Don't zip it. Zipped uploads fail silently — nothing appears and you get no error. + +**Start a new Cowork session afterwards.** Cowork only looks for new skills when a session begins, so an already-open one won't see it. +::: + +::: details How skills work, if you're curious +A Cowork skill is one markdown file: a bit of YAML at the top telling Cowork *when* to load it, then plain instructions. + +```md +--- +name: meeting-brief +description: Use this when I ask for a meeting brief, prep notes, or a stakeholder summary. +--- + +# Meeting Brief + +When this skill runs, you MUST: +1. Identify the meeting, attendees, and goal. +2. Pull relevant calendar, email, and file context. +3. Return the output in the shape below. + +Never invent missing context. If evidence is thin, say what's missing. +``` + +Cowork decides which skill to load by reading the **description** — so put the phrases you'd actually type in there. + +Skills live in OneDrive at `/Documents/Cowork/skills/{name}/`. A skill can carry a `references/` folder (loaded into context when needed) and a `scripts/` folder (executed, not read). + +**The reason this matters:** it's the [Agent Skills open standard](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/blob/main/Allfiles/twin-forge/SKILL.md). The same file is read by VS Code Copilot, Claude Code, Gemini CLI, Cursor and 30+ other tools. You're not writing something trapped in one product. + +**Want to make your own later?** Cowork → Customize → Skills → **Add ▾** → **Create new** walks you through it. Or just say *"build me a skill that…"* in chat and it'll draft one with you. + +📖 Write a reusable Cowork skill — full guide (opens in a new tab) ↗ + +::: + +## 2 · Pick your data + +Start a **new** Cowork session and say: + +```text +Start Twin Forge and help me build a v0.1 digital twin. +``` + +It'll ask which you want: + +**Your own data** — Twin Forge reads your sent mail and calendar. Nothing is set up, nothing is shared, and it only sees what you can already see. This makes the better twin, because it's really you. + +**Avery Washington** — the made-up marketing manager. Pick this if you'd rather not use your own work data. Download their pack and **attach the files** when Twin Forge asks; it can't see them otherwise. + +## 3 · Get your first draft + +Twin Forge takes it from here, about 12 minutes: + +- reads your last ~10 sent emails and ~30 days of calendar +- asks you around 8 quick questions, one at a time +- shows you where what you *said* and what your calendar *shows* disagree +- writes your three files + +::: tip Answer honestly, not aspirationally +Every question is *"what did you actually do last time?"* — not *"what do you value?"* If you describe your best self, you'll get a twin of someone else. +::: + +**You now have a v0.1 twin. Everything from here is you making it good — and that's the actual hack.** + +--- + +## 4 · Make it shorter + +Your first draft is too long. Cut it to about one page. + +This feels wrong and it's the single highest-value thing you'll do. Longer isn't better. Anthropic [found while building Constitutional AI](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback) that broad principles worked better than long, specific ones — the longer versions actually reduced effectiveness. And ["Lost in the Middle"](https://arxiv.org/abs/2307.03172) (peer-reviewed, *Transactions of the ACL*) showed models pay least attention to whatever sits in the middle of a long prompt. + +**Cut anything that isn't a rule you'd actually apply.** + +## 5 · Give it your voice + +Open your voice file. If it *describes* your writing — "professional but friendly" — replace that with **actual emails you sent.** Five to ten, pasted exactly as you wrote them. + +Don't tidy them up. The dropped apostrophes, the dashes, the way you sign off — that's the whole signal. + +When you write, you make hundreds of small choices you've never consciously noticed — how you open, whether you bullet or run on, what you do with dashes, how you sign off. You can't list them. But they're all sitting there in your sent folder. + +Showing beats describing. + +::: details Getting good samples out of Cowork +There's nothing to connect and no auth to set up — Cowork already reaches your mail, calendar, Teams, files and org chart through Work IQ. It only ever sees what you can see. + +The trick is asking for a shape you can reuse, not a summary: + +```text +Find my last 10 sent emails. Return one row per email with: date, recipient, +subject, the exact greeting, the exact signoff, and three verbatim phrases +that sound like me. Do not summarize before returning the table. +``` + +Then for the behavioral half: + +```text +Summarize my calendar for the last 30 days. Group time by category, and give me +the percentage I marked tentative, the percentage I organized myself, and my +typical response time by sender. +``` + +**Two rules:** ask for *one* source at a time, and tell it not to summarize before returning. Summaries lose exactly the detail you need. + +Keep the prompts that work — you'll want to run them again. + +📖 Connect Cowork to a data source — full guide (opens in a new tab) ↗ + +::: + + +## 6 · Give it judgment + +Your twin needs to know what you do when two good things collide. Most first drafts have values where rules should be. + +| ❌ This is a value | ✅ This is a rule | +| --- | --- | +| I value accuracy. | When an unverified claim threatens a committed date, cut scope and hold the date. | +| I'm responsive to leadership. | When an exec ask conflicts with a peer promise, reply to the exec within the hour, protect the peer's deadline, offer a smaller same-day version. | +| I collaborate well. | When two people both say theirs is top priority, I decide and tell them. I don't escalate it. | + +A value tells an agent nothing. **A rule tells it what to do.** + +## 7 · Compare with your team + +Ten minutes, together. Everyone built their own twin — now build a better *shape* for all of them. + +Each person shows **one rule that worked** and **one that's still vague.** Steal shamelessly. Agree on what belongs in a good soul file. Keep your own answers; share the structure. + +## 8 · ⚡ The twist + +Your facilitator will hand this out partway through. Give it to your twin: + +```text +A senior executive wants a new customer narrative by 3 PM today. +You already promised a peer their launch review notes by 4 PM. +Use my twin: what do I do, what do I say to each of them, and what gets cut? +``` + +The goal isn't a polite answer. It's whether your twin makes **your** tradeoff — and can say what it gave up. + +If it can't, you've found your next missing rule. Add it and run it again. + +## 9 · Make it run without you + +Pick one and set it up: + +**On a schedule** — *"Every weekday at 9 AM, compare my calendar to my capacity rules and draft a focus plan."* + +**On a trigger** — fires when an email arrives or someone @mentions you in Teams. + +::: warning Nothing sends on its own +Cowork drafts and waits for your approval. Keep it that way today. +::: + +::: details Setting up a schedule or a trigger +**Schedule** — just describe it in chat: + +```text +Send me a focus plan every weekday at 9 AM. +``` + +Manage them at **Cowork → Scheduled**, which has a **Runs** tab and a **Manage schedules** tab. You get up to five. + +**Trigger** — describe the event instead: + +```text +When my manager emails me about the launch, draft a reply in my voice. +``` + +Cowork proposes a **"Set up trigger?"** card showing *When*, *Run in*, *What it does*, and the permissions it needs. Review it, then arm it. + +Triggers fire on incoming email or a Teams message/@mention, and the default is **draft-and-approve** — it prepares the action and asks first. Leave that on. + +**Before you arm anything:** run the skill manually on new input once and check the output still holds up. Automating something unreliable just makes it unreliable on a schedule. + +📖 Re-run a skill on new inputs — full guide (opens in a new tab) ↗ + +::: + +--- + +📖 Produce a formatted output — full guide (opens in a new tab) ↗ +## Show it off + +60–90 seconds. Hit these: + +- [ ] Whose twin — yours or Avery's +- [ ] Your soul file, about a page +- [ ] Your voice file, with real samples in it +- [ ] **One thing your calendar revealed that surprised you** +- [ ] The exec-vs-peer conflict, and what your twin decided +- [ ] Your scheduled prompt or trigger + +::: tip The best demo isn't the most complex one +It's the one where someone reads a draft your twin wrote and says *"yeah, that sounds like you."* +::: + +## Stuck? + +| What you're seeing | What to do | +| --- | --- | +| Cowork ignores Twin Forge | Start a **new** session — skills only load at the start | +| Upload seemed to do nothing | Upload the `.md` file, not a zip | +| "I can't find the reference files" | You've got an old copy — re-download it | +| Avery's data can't be found | Attach the pack files to the session | +| Twin sounds like a stranger | Your voice file is descriptions, not real emails. Go back to step 5 | +| Twin gives wishy-washy answers | Your soul file has values, not rules. Go back to step 6 | + +--- + +[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) · [Where this comes from](/resources/research) From 7b1521566766a944fe0b4af104e117fbf76f1c0a Mon Sep 17 00:00:00 2001 From: Matt Quinlan <37308730+maquinl@users.noreply.github.com> Date: Thu, 30 Jul 2026 15:23:13 +0100 Subject: [PATCH 09/12] Remove fluffy and unfounded language The intro claimed AI 'knows everything about your company and nothing about you'. That is false - Copilot has memory and Work IQ has a personalization layer. Replaced with the claim that actually holds: Copilot personalizes by INFERENCE. You cannot inspect what it concluded, you cannot correct it directly, and it does not follow you between tools. What it does not have is what you have explicitly decided. That is defensible and it is still the reason to do the scenario. Also cut: - 'It can't write YOUR email' / 'the last mile is you' - metaphor - 'the productivity gain evaporates' - metaphor - 'the quirks are the whole signal' -> names the actual specifics - 'steal shamelessly', 'this feels wrong', 'the moment that lands', 'the best demo isn't the most complex one' - 'a sharp Cowork build beats a rushed code one' - unfounded comparison - 'villain's complaint' section headings - 'A value tells an agent nothing' -> 'A value cannot be applied. A rule can.' REMOVED the 'Where This Comes From' page and every link to it. how-it-works updated to match the flattened navigation. --- docs/.vitepress/config.mts | 1 - docs/build/advanced-scenario-1.md | 26 ++++++------- docs/build/base-scenario-1.md | 36 ++++++++--------- docs/how-it-works/index.md | 8 ++-- docs/how-it-works/run-of-show.md | 2 +- docs/levels/index.md | 6 +-- docs/resources/index.md | 4 -- docs/resources/research.md | 65 ------------------------------- docs/scenarios/scenario-1.md | 24 +++++------- docs/scenarios/scenario-2.md | 2 +- docs/scenarios/scenario-3.md | 2 +- 11 files changed, 51 insertions(+), 125 deletions(-) delete mode 100644 docs/resources/research.md diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 665fe98..a838087 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -30,7 +30,6 @@ export default defineConfig({ text: "Resources", items: [ { text: "Downloads", link: "/resources/downloads" }, - { text: "Where This Comes From", link: "/resources/research" }, { text: "For facilitators", link: "/facilitator/" }, { text: "More", link: "/resources/" }, ], diff --git a/docs/build/advanced-scenario-1.md b/docs/build/advanced-scenario-1.md index 99d3f35..ee6543e 100644 --- a/docs/build/advanced-scenario-1.md +++ b/docs/build/advanced-scenario-1.md @@ -10,13 +10,13 @@ title: The Digital Twin — Code You get the contract and the plumbing. You write the agents. -## Why +## What you're solving -AI can write any email. It can't write *your* email. +Copilot already personalizes. It has memory, and Work IQ reads your mail, calendar, and files. -It knows everything about your company and nothing about you — so every draft needs a rewrite, and the time you saved disappears in the last mile. +What it doesn't have is anything you've explicitly decided — how you rank competing priorities, which promises you protect, what you'd refuse outright. That gets inferred, you can't inspect or correct it, and it doesn't travel between tools. -But there's a second problem, and it's the one you'll solve here: **a person's judgment isn't one voice. It's an argument.** When you decide what to do on a Monday, you're negotiating between ambition, obligation, and capacity. A single prompt can role-play one of those. It can't run the argument. +There's a second problem this track solves: **a decision under conflict isn't one voice.** When an exec ask lands on top of a peer promise, you're weighing ambition against obligation against capacity. A single prompt can role-play one of those at a time. It can't run the argument and tell you what it overruled. ## What your team will have built @@ -24,13 +24,13 @@ One system, not five. Everyone shares a single spec, and each person owns one ag | Piece | What it does | | --- | --- | -| **The spec** | Three plain-text files: how the person decides, how they write, what their calendar reveals | +| **The spec** | Three plain-text files: how the person decides, how they write, what their calendar shows | | **The council** | Three agents that argue, one that decides and **publishes what it overruled** | | **The critic** | Watches a miss, works out which line of the spec caused it, proposes a patch | | **The server** | Exposes the whole thing as MCP tools, so any agent can call it | -| **The guardrail** | Refuses to act outside the spec's boundaries — enforced at the tool, not suggested in a prompt | +| **The guardrail** | Refuses actions outside the spec's boundaries — enforced at the tool, not suggested in a prompt | -The same spec folder also runs in Cowork and the CLI unmodified. That portability is the point. +The same spec folder runs in Cowork and the CLI unmodified. ## Before you start @@ -97,7 +97,7 @@ Three files, shared by everyone. Get a rough version fast, then improve it all s A value tells an agent nothing. A tiebreaker tells it what to do. -**voice** — 5–10 real sent emails, verbatim, plus the rules those samples imply. Don't clean them up; the quirks are the whole signal. +**voice** — 5–10 real sent emails, verbatim, plus the rules those samples imply. Do not clean them up; the punctuation and signoff habits are the part a description would lose. **revealed** — what the calendar actually shows. @@ -303,7 +303,7 @@ You already promised a peer their launch review notes by 4 PM. Decide what to do, what to say to each of them, and what gets cut. ``` -You're not looking for the nicest answer. You're looking for **the argument** — three positions, one decision, and a clear statement of what got overruled and why. +You are checking for three positions, one decision, and an explicit statement of what got overruled and why. ## 8 · Let the critic patch it @@ -314,7 +314,7 @@ HARD CAP: net growth of +2 lines. Human approves before anything is written. ``` -The cap is the whole point. Without it, a critic "fixes" every miss by making the spec fatter, and a fatter spec is a worse spec. +Without the cap, the critic fixes every miss by adding lines, and the spec degrades as it grows. ::: tip Say the honest limit out loud in your demo The **file** gets better. The **model** doesn't learn. Every run reloads an improved file. That's real and useful, and it isn't training — claiming otherwise is the fastest way to lose a technical room. @@ -335,8 +335,8 @@ The **file** gets better. The **model** doesn't learn. Every run reloads an impr - [ ] One critic patch, +2 lines or fewer - [ ] The same spec folder running somewhere else — CLI, VS Code, or Cowork -::: tip The moment that lands -Not the architecture. It's the dissent — showing what your twin *decided against*, and why. A single prompt can't produce that, and everyone in the room can see it. +::: tip Lead with the dissent +Show what the twin decided against and why. That is the part a single prompt cannot produce, and it is visible in one screen. ::: ## Stuck? @@ -353,4 +353,4 @@ Not the architecture. It's the dissent — showing what your twin *decided again --- -[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) · [Where this comes from](/resources/research) +[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) diff --git a/docs/build/base-scenario-1.md b/docs/build/base-scenario-1.md index b11a566..0a92caf 100644 --- a/docs/build/base-scenario-1.md +++ b/docs/build/base-scenario-1.md @@ -8,25 +8,27 @@ title: The Digital Twin — Cowork **You'll build this in Cowork. No code, and no experience needed.** -## Why +## What you're solving -AI can write any email. It can't write *your* email. +Copilot already personalizes. It has memory, and Work IQ reads your mail, calendar, and files. That covers a lot. -It knows everything about your company and nothing about you — so every draft needs a rewrite, and the time you saved disappears in the last mile. +What it doesn't have is anything you've explicitly **decided**. How you rank priorities when two of them collide. Which promises you protect. What you'd never send without checking first. That gets inferred from what you've already done — you can't inspect it, you can't correct it, and it doesn't move with you when you switch tools. -**The last mile is you.** Today you're going to write that part down. +So you re-supply the same context every session, and rewrite the output when you don't. + +Today you write it down once, in a file you control. ## What you'll walk out with -A one-page spec of how you actually work — and any AI tool can read it. +A one-page spec of how you work, in plain text, that any AI tool can read. | File | What it holds | | --- | --- | | **soul** | How you decide. Your priorities, and what you do when two of them collide. | | **voice** | How you write. Real emails of yours, and the patterns inside them. | -| **revealed** | What your calendar says about you — versus what you say about you. | +| **revealed** | What your calendar shows about how you actually spend time. | -It's plain text, it's yours, and it works in Cowork, VS Code, and 30+ other AI tools without changing a thing. +It's yours, you can edit it, and it works in Cowork, VS Code, and 30+ other AI tools without changing anything. ## Before you start @@ -137,7 +139,7 @@ Every question is *"what did you actually do last time?"* — not *"what do you Your first draft is too long. Cut it to about one page. -This feels wrong and it's the single highest-value thing you'll do. Longer isn't better. Anthropic [found while building Constitutional AI](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback) that broad principles worked better than long, specific ones — the longer versions actually reduced effectiveness. And ["Lost in the Middle"](https://arxiv.org/abs/2307.03172) (peer-reviewed, *Transactions of the ACL*) showed models pay least attention to whatever sits in the middle of a long prompt. +Cutting is the highest-value thing you'll do here. Longer is not better. Anthropic [found while building Constitutional AI](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback) that broad principles worked better than long, specific ones — the longer versions actually reduced effectiveness. And ["Lost in the Middle"](https://arxiv.org/abs/2307.03172) (peer-reviewed, *Transactions of the ACL*) showed models pay least attention to whatever sits in the middle of a long prompt. **Cut anything that isn't a rule you'd actually apply.** @@ -145,11 +147,9 @@ This feels wrong and it's the single highest-value thing you'll do. Longer isn't Open your voice file. If it *describes* your writing — "professional but friendly" — replace that with **actual emails you sent.** Five to ten, pasted exactly as you wrote them. -Don't tidy them up. The dropped apostrophes, the dashes, the way you sign off — that's the whole signal. - -When you write, you make hundreds of small choices you've never consciously noticed — how you open, whether you bullet or run on, what you do with dashes, how you sign off. You can't list them. But they're all sitting there in your sent folder. +Do not tidy them up. The dropped apostrophes, the dash habits, the signoff — those are the specifics a description would lose. -Showing beats describing. +Most people cannot accurately describe their own writing. The openers, the sentence length, the punctuation habits — you use them without deciding to, so you cannot list them from memory. Your sent folder already contains them. ::: details Getting good samples out of Cowork There's nothing to connect and no auth to set up — Cowork already reaches your mail, calendar, Teams, files and org chart through Work IQ. It only ever sees what you can see. @@ -189,13 +189,13 @@ Your twin needs to know what you do when two good things collide. Most first dra | I'm responsive to leadership. | When an exec ask conflicts with a peer promise, reply to the exec within the hour, protect the peer's deadline, offer a smaller same-day version. | | I collaborate well. | When two people both say theirs is top priority, I decide and tell them. I don't escalate it. | -A value tells an agent nothing. **A rule tells it what to do.** +A value cannot be applied. A rule can. ## 7 · Compare with your team Ten minutes, together. Everyone built their own twin — now build a better *shape* for all of them. -Each person shows **one rule that worked** and **one that's still vague.** Steal shamelessly. Agree on what belongs in a good soul file. Keep your own answers; share the structure. +Each person shows **one rule that worked** and **one that's still vague.** Copy what works. Agree on what belongs in a soul file. Keep your own answers; share the structure. ## 8 · ⚡ The twist @@ -207,7 +207,7 @@ You already promised a peer their launch review notes by 4 PM. Use my twin: what do I do, what do I say to each of them, and what gets cut? ``` -The goal isn't a polite answer. It's whether your twin makes **your** tradeoff — and can say what it gave up. +You are checking one thing: does it make **your** tradeoff, and can it state what it gave up? If it can't, you've found your next missing rule. Add it and run it again. @@ -262,8 +262,8 @@ Triggers fire on incoming email or a Teams message/@mention, and the default is - [ ] The exec-vs-peer conflict, and what your twin decided - [ ] Your scheduled prompt or trigger -::: tip The best demo isn't the most complex one -It's the one where someone reads a draft your twin wrote and says *"yeah, that sounds like you."* +::: tip What to aim for in the demo +Someone who knows you reads a draft your twin wrote and recognises it. That lands harder than showing more features. ::: ## Stuck? @@ -279,4 +279,4 @@ It's the one where someone reads a draft your twin wrote and says *"yeah, that s --- -[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) · [Where this comes from](/resources/research) +[← Back to start](/) · [What this scenario is about](/scenarios/scenario-1) diff --git a/docs/how-it-works/index.md b/docs/how-it-works/index.md index 64830a9..ba3840b 100644 --- a/docs/how-it-works/index.md +++ b/docs/how-it-works/index.md @@ -6,12 +6,12 @@ title: How the Hack Works You have two hours to turn a real work problem into a working agent. -You will pick a scenario, pick an altitude, follow the building blocks, and demo what you built. Coaches will roam. Your team will make choices together. The goal is not polish. The goal is a working thing you understand well enough to keep using. +You pick a scenario, pick how you want to build, and demo what you made. Coaches are in the room throughout. Aim for something that works and that you understand well enough to keep using, not something polished. ## The flow 1. **Pick a scenario** — start with a real Microsoft work problem. -2. **Pick your altitude** — Base, Builder, or Advanced. +2. **Pick how you want to build** — Cowork with no code, or real code in VS Code. 3. **Choose your data path** — use your own data privately, or use the provided synthetic pack. 4. **Build the smallest working version** — get to v0.1 fast. 5. **Test it on a real prompt** — see where it breaks. @@ -22,7 +22,7 @@ You will pick a scenario, pick an altitude, follow the building blocks, and demo - **Nothing sends.** Your agent drafts for human review. It does not send email, book meetings, or make commitments on your behalf. - **Keep private data private.** If you use your own Microsoft 365 data, keep it on your own screen. -- **Build small.** A short, sharp spec usually beats a long one. +- **Build small.** A short spec outperforms a long one. - **Use observed behavior.** What you actually did last time matters more than what you wish you did. - **Portability matters.** Prefer files and formats you can carry across tools. @@ -30,7 +30,7 @@ You will pick a scenario, pick an altitude, follow the building blocks, and demo Done means you can run your agent on a fresh prompt and get useful output that reflects the scenario. -For Scenario 1, that means a portable twin spec — `soul.md`, `voice.md`, and `revealed.md` — plus an agent that uses it to draft, decide, or critique in a way that feels specific to the person it represents. +For Scenario 1, that means a portable twin spec — `soul.md`, `voice.md`, and `revealed.md` — plus an agent that uses it to draft, decide, or critique in a way that is specific to the person it represents. ## What you'll walk out with diff --git a/docs/how-it-works/run-of-show.md b/docs/how-it-works/run-of-show.md index 50fc289..67c778c 100644 --- a/docs/how-it-works/run-of-show.md +++ b/docs/how-it-works/run-of-show.md @@ -8,7 +8,7 @@ Facilitator-facing agenda for the two-hour hack. | Time | Segment | What happens | | ---- | ------- | ------------ | -| 0:00–0:05 | Welcome | Frame the day: AI is competent in general, weak in the last mile. Today, teams build that last mile. | +| 0:00–0:05 | Welcome | Frame the problem: Copilot personalizes by inference, which you cannot inspect, correct, or carry between tools. Teams write that layer explicitly. | | 0:05–0:10 | Pick path | Participants choose Path A, their own twin, or Path B, Avery Washington's synthetic persona pack. Reinforce privacy. | | 0:10–0:15 | Seal your answers | Everyone answers the forced-choice dilemmas and sets them aside. These are for the final reveal, not scoring. | | 0:15–0:30 | Bootstrap v0.1 | Use the Twin Forge skill, a downloadable Cowork skill that interviews the participant and emits `soul.md` v0.1. Avery Washington teams use the persona pack. | diff --git a/docs/levels/index.md b/docs/levels/index.md index d3016cb..17420ca 100644 --- a/docs/levels/index.md +++ b/docs/levels/index.md @@ -14,9 +14,9 @@ Same scenario, three ways in. Pick whichever fits how you like to work — no tr ## Not sure? -- **Never built an agent before?** 🟢 Cowork. It's guided the whole way, and a sharp Cowork build beats a rushed code one. +- **Never built an agent before?** 🟢 Cowork. It is guided end to end and needs no setup. - **You live in a terminal or VS Code?** 🟣 Code. -::: tip Everyone ends up with the same thing -All three produce the same portable spec. The tracks differ in how you get there and how far you push it. +::: tip All three produce the same artifact +The portable spec is identical. The tracks differ in what you build around it. ::: \ No newline at end of file diff --git a/docs/resources/index.md b/docs/resources/index.md index 8afedf2..745efde 100644 --- a/docs/resources/index.md +++ b/docs/resources/index.md @@ -8,10 +8,6 @@ title: Resources **[⬇ Downloads](/resources/downloads)** — Twin Forge, the Avery Washington persona pack, and the Advanced starter repo. -## Why the scenario works the way it does - -**[Where This Comes From](/resources/research)** — the thinking behind the scenario, what's peer reviewed, what isn't, and the limits worth stating out loud. - ## Reference hacks - [Agent Academy](https://github.com/microsoft/agent-academy) — self-paced guided missions (Copilot Studio) diff --git a/docs/resources/research.md b/docs/resources/research.md deleted file mode 100644 index 6c1a15e..0000000 --- a/docs/resources/research.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Where This Comes From ---- - -# Where This Comes From - -The thinking behind the Digital Twin scenario, and how much weight each source can carry. - -::: warning A note on sources -Most AI research circulates as **preprints** on arXiv — posted by the authors, not peer reviewed. That doesn't make it wrong, but it isn't settled science, and we don't build claims on it. - -Below, anything stated as fact is either **peer reviewed** or **published by the lab that ran the work**. Everything else is listed as further reading, clearly marked, with no claims attached. -::: - -## What we'll actually stand behind - -### Where instructions sit in a prompt changes whether they're followed - -**[Lost in the Middle: How Language Models Use Long Contexts](https://arxiv.org/abs/2307.03172)** · Liu et al. -*Peer reviewed — Transactions of the Association for Computational Linguistics.* - -Model attention follows a U-curve. Content at the beginning or end of a prompt gets used; content in the middle is most likely to be missed — even when it's exactly what's needed. - -**Why it matters here:** a long soul file buries its own best rules. Compression isn't tidying up, it's the work. - -### Broad principles beat long, specific ones - -**[Constitutional AI: Harmlessness from AI Feedback](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback)** · Anthropic -*Published by Anthropic on their own research site.* - -While developing the technique, Anthropic reported that a short, broad principle worked notably well, and that writing longer and more specific versions tended to *reduce* effectiveness. - -**Why it matters here:** the instinct to add one more clause is the instinct to make it worse. - -## What we observed building it ourselves - -Not research — one build, one person. Useful as a story, not as evidence: - -The first twin we made was worse than no twin at all, because its author wrote down who they *wanted* to be. The spec said they escalated priority conflicts; in practice they just decided and told people after. It said they'd never ship anything unverified; in practice they cut scope and protected the date. - -Rewriting those rules from what they actually did was the moment it started sounding like them. **That gap — between the self you describe and the self your calendar records — is the whole scenario.** - -## Further reading - -Preprints and project pages. Interesting, relevant, **not peer reviewed** — read them as ideas, not findings. - -| | | -| --- | --- | -| [Reflexion](https://arxiv.org/abs/2303.11366) | An agent writes a plain-language post-mortem of its own failure and reads it back on the next attempt | -| [Self-Refine](https://arxiv.org/abs/2303.17651) | Generate, critique your own output, revise. One model, three roles | -| [MemGPT / Letta](https://arxiv.org/abs/2310.08560) | An agent that manages and edits its own memory as it runs | -| [Whose Opinions Do Language Models Reflect?](https://arxiv.org/abs/2303.17548) | Left alone, model output drifts toward an aggregate voice rather than any specific person | -| [Generative Agent Simulations of 1,000 People](https://arxiv.org/abs/2411.10109) | Building agents of real individuals from interviews and surveys, and measuring how closely they match | - -These informed the 🟣 Advanced track's critic agent and the general shape of the scenario. None of them is doing any load-bearing work in what we claim. - -## The honest limits - -Say these out loud in your demo. They make it stronger, not weaker. - -**The file gets better. The model doesn't learn.** A self-patching spec is real and genuinely useful, but every run simply reloads an improved file. Nothing is being trained. - -**Sounding like you isn't being you.** A twin can match your phrasing closely and still be more predictable and less surprising than you are. It drafts. You decide. - -**Your twin only knows what you've written down.** It can't infer what you've never done, what you're deliberately trying to change, or what you'd refuse outright — unless you tell it. diff --git a/docs/scenarios/scenario-1.md b/docs/scenarios/scenario-1.md index f88738d..90f6f98 100644 --- a/docs/scenarios/scenario-1.md +++ b/docs/scenarios/scenario-1.md @@ -4,30 +4,30 @@ title: Scenario 1 · The Digital Twin # Scenario 1 — The Digital Twin -## The problem (villain's complaint) +## The problem -I use AI all day, and somehow I still do the last mile myself. +Copilot personalizes already. It has memory, and Work IQ reads mail, calendar, and files. That gets a draft most of the way. -It can write an email. It cannot write *my* email. It can summarize a thread. It misses the thing I would have flagged. It knows Microsoft in the abstract, but it does not know how I make tradeoffs, who I protect, what I never send without checking, or when I cut scope to hold a date. +What it does not have is what a person has explicitly decided: how they rank priorities that conflict, which commitments they protect, what they never send without checking, when they cut scope instead of moving a date. Those get inferred from past activity. You cannot inspect the inference, you cannot correct it directly, and it does not follow you from one tool to the next. -So every draft becomes a rewrite. Every summary needs a pass. The productivity gain evaporates right where the work gets personal. +The result is a rewrite on most drafts, and the same context re-supplied in every session. ## What 'done' looks like -You build a portable digital twin spec and an agent that can run on it. +You build a portable digital twin spec and an agent that runs on it. Your twin is three files: - **`soul.md`** — how you decide: identity, priority stack, decision rules, stakeholder table, boundaries, capacity, and blind spots. - **`voice.md`** — how you write: 5–10 real sent-email samples, plus the style rules those samples imply. -- **`revealed.md`** — what your calendar says about you, compared with what you say about yourself. +- **`revealed.md`** — what your calendar shows about how you actually spend time. -These files use the **Agent Skills open standard**: `SKILL.md` plus a `references/` folder. The same files should run in Cowork, VS Code Copilot, and the GitHub Copilot CLI without rewriting them. +These files use the **Agent Skills open standard**: `SKILL.md` plus a `references/` folder. The same files run in Cowork, VS Code Copilot, and the GitHub Copilot CLI without rewriting them. -Done means your twin can draft or advise in a way that feels recognizably like you — and you can point to the specific rule, sample, or calendar pattern that made it behave that way. +Done means the twin drafts or advises in a way you would recognise as yours, and you can point to the specific rule, sample, or calendar pattern that produced it. ::: tip The reveal is not a score -At the start, you answer a few forced-choice work dilemmas and seal them. At the end, your twin answers the same dilemmas cold. You compare the answers to learn what it understood, what it missed, and what needs correction. +At the start, you answer a few forced-choice work dilemmas and seal them. At the end, your twin answers the same dilemmas cold. Compare the two to see what it understood, what it missed, and what needs correcting. ::: ## The data @@ -38,7 +38,7 @@ Choose one path. Use your own Microsoft 365 data: sent mail, calendar patterns, and your own recollection of recent decisions. -This is the strongest experience because the last mile is real. Keep it private. Work in your own tenant, use only your own screen, and do not paste personal data into shared spaces. +This produces the most accurate twin, because the evidence is real. Keep it private. Work in your own tenant, use only your own screen, and do not paste personal data into shared spaces. Use: @@ -75,7 +75,3 @@ In Base, everyone builds their own twin, but the team converges on the shared sc In Advanced, the team builds one integrated system. Each person owns one council agent — Ambition, Obligation, Capacity, Arbiter, or Critic — and all agents share one `soul.md`. ::: - ---- - -Why this scenario is designed the way it is: [Where This Comes From](/resources/research). diff --git a/docs/scenarios/scenario-2.md b/docs/scenarios/scenario-2.md index 06ca329..cc8efb8 100644 --- a/docs/scenarios/scenario-2.md +++ b/docs/scenarios/scenario-2.md @@ -8,7 +8,7 @@ title: Scenario 2 (TBD) This scenario is not yet locked. Placeholder structure below. ::: -## The problem (villain's complaint) +## The problem > **TODO** — one paragraph, in the voice of the person who feels the pain. Real Microsoft work, generic enough to apply across teams. diff --git a/docs/scenarios/scenario-3.md b/docs/scenarios/scenario-3.md index 6f647d0..a34cdc5 100644 --- a/docs/scenarios/scenario-3.md +++ b/docs/scenarios/scenario-3.md @@ -8,7 +8,7 @@ title: Scenario 3 (TBD) This scenario is not yet locked. Placeholder structure below. ::: -## The problem (villain's complaint) +## The problem > **TODO** — one paragraph, in the voice of the person who feels the pain. Real Microsoft work, generic enough to apply across teams. From bde6082b8728c0cf83574477ffb6d6d60711a9a3 Mon Sep 17 00:00:00 2001 From: Matt Quinlan <37308730+maquinl@users.noreply.github.com> Date: Thu, 30 Jul 2026 15:39:21 +0100 Subject: [PATCH 10/12] Serve downloads from the site - no GitHub, no git clone Participants were being sent to github.com to click Raw and Save As, or to clone the whole Team Week repo. Both are wrong for a timed hack. - scripts/pack-downloads.mjs zips Allfiles into docs/public/downloads/ and runs automatically before docs:dev and docs:build, so downloads can never drift from source. No dependencies - uses Compress-Archive on Windows, zip elsewhere, both present in CI. - Download cards now point at same-origin files with the HTML download attribute, so they save directly instead of navigating. Twin Forge saves as SKILL.md, ready to upload into Cowork as-is. - git clone replaced with: download the zip, unzip, open in VS Code. Plus an optional one-liner (PowerShell and curl) that fetches, unzips and launches VS Code in one go. - NEW digital-twin.code-workspace in the starter - opens with agent mode enabled, parent-repo customizations on, pycache hidden, and the Copilot + Python extensions recommended. - docs/public/downloads/ gitignored since it's generated. Verified all three files return HTTP 200 and the zips contain a proper top-level folder. --- .gitignore | 3 + .../digital-twin.code-workspace | 14 ++++ docs/build/advanced-scenario-1.md | 29 +++++-- docs/build/base-scenario-1.md | 10 +-- docs/resources/downloads.md | 76 +++++++++++++------ package.json | 5 +- scripts/pack-downloads.mjs | 64 ++++++++++++++++ 7 files changed, 161 insertions(+), 40 deletions(-) create mode 100644 Allfiles/digital-twin-starter/digital-twin.code-workspace create mode 100644 scripts/pack-downloads.mjs diff --git a/.gitignore b/.gitignore index ae6aff3..8356ff5 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ docs/.vitepress/cache/ # OS / editor .DS_Store Thumbs.db + +# generated by scripts/pack-downloads.mjs +docs/public/downloads/ diff --git a/Allfiles/digital-twin-starter/digital-twin.code-workspace b/Allfiles/digital-twin-starter/digital-twin.code-workspace new file mode 100644 index 0000000..69d55e3 --- /dev/null +++ b/Allfiles/digital-twin-starter/digital-twin.code-workspace @@ -0,0 +1,14 @@ +{ + "folders": [{ "path": "." }], + "settings": { + "chat.agent.enabled": true, + "chat.useCustomizationsInParentRepositories": true, + "files.exclude": { + "**/__pycache__": true, + "**/.twin-scratch": true + } + }, + "extensions": { + "recommendations": ["github.copilot", "github.copilot-chat", "ms-python.python"] + } +} diff --git a/docs/build/advanced-scenario-1.md b/docs/build/advanced-scenario-1.md index ee6543e..24ee539 100644 --- a/docs/build/advanced-scenario-1.md +++ b/docs/build/advanced-scenario-1.md @@ -35,27 +35,40 @@ The same spec folder runs in Cowork and the CLI unmodified. ## Before you start +Unzip it wherever you keep projects, then open the folder in VS Code. **No cloning, no repo to fork.** + +::: details Prefer one line in a terminal? +**PowerShell** — downloads, unzips, and opens it in VS Code: + +```powershell +$u='https://microsoftlearning.github.io/Team-Week-Imagineer-Hack/downloads/digital-twin-starter.zip' +$z="$env:TEMP\dts.zip"; iwr $u -OutFile $z +Expand-Archive $z -DestinationPath "$HOME\digital-twin" -Force +code "$HOME\digital-twin\digital-twin-starter" +``` + +**macOS / Linux:** + ```bash -git clone https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack.git -cd Team-Week-Imagineer-Hack/Allfiles/digital-twin-starter +curl -L -o /tmp/dts.zip https://microsoftlearning.github.io/Team-Week-Imagineer-Hack/downloads/digital-twin-starter.zip +unzip -q /tmp/dts.zip -d ~/digital-twin && code ~/digital-twin/digital-twin-starter ``` -::: warning Copy it out before you edit -Work in your own copy, not in the repo folder. +Add the persona pack the same way, swapping in `avery-persona-pack.zip`. ::: **Check this first, before anything else:** open Copilot Chat in VS Code and confirm you can switch to **Agent** mode. It's an org-managed setting and it may be off. If it is, use the Copilot CLI instead — everything here works either way. diff --git a/docs/build/base-scenario-1.md b/docs/build/base-scenario-1.md index 0a92caf..03ca0c5 100644 --- a/docs/build/base-scenario-1.md +++ b/docs/build/base-scenario-1.md @@ -35,17 +35,17 @@ It's yours, you can edit it, and it works in Cowork, VS Code, and 30+ other AI t Grab these now — you'll need the first one in about two minutes. diff --git a/docs/resources/downloads.md b/docs/resources/downloads.md index ab35e56..b45c78c 100644 --- a/docs/resources/downloads.md +++ b/docs/resources/downloads.md @@ -4,45 +4,71 @@ title: Downloads # Downloads -Everything you need for **Scenario 1 · The Digital Twin**. Grab what your path needs — you can download a single folder without cloning the whole repo. +Everything for **Scenario 1 · The Digital Twin**. Files download straight from this site — no GitHub account, no cloning. -::: tip Fastest way to get a folder -Paste the folder's GitHub URL into [download-directory.github.io](https://download-directory.github.io/) and it hands you a `.zip`. Or clone the repo once and use the `Allfiles` folder locally. -::: - -## 🟢 Base · Cowork +## 🟢 Cowork -| What | Why you need it | Get it | -| --- | --- | --- | -| **Twin Forge skill** | Bootstraps a v0.1 twin in ~12 minutes. Upload it into Cowork and say *"Start Twin Forge."* | [SKILL.md](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/blob/main/Allfiles/twin-forge/SKILL.md) | -| **Avery Washington persona pack** | Path B data if you'd rather not use your own. | [Allfiles/persona-pack](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/tree/main/Allfiles/persona-pack) | + -**Installing Twin Forge:** Cowork → **Customize** → **Skills** → **Add ▾** → **Upload skill** → pick `SKILL.md`. Then **start a new session** — skills are discovered at session start. +**Installing Twin Forge:** Cowork → **Customize** → **Skills** → **Add ▾** → **Upload skill** → pick the downloaded `SKILL.md`. Then **start a new session** — skills are only discovered at session start. -::: warning Upload the .md on its own -Tested on a live tenant: `.zip` uploads silently fail. `SKILL.md` is fully self-contained, so there's nothing else to bundle. +::: warning Upload the .md, not a .zip +Tested on a live tenant: `.zip` skill uploads fail silently. `SKILL.md` is self-contained, so there's nothing else to bundle. ::: -Or drop it in OneDrive at `/Documents/Cowork/skills/twin-forge/SKILL.md`. +## 🟣 Code -## 🟣 Advanced · Scout / GitHub Copilot + -| What | Why you need it | Get it | -| --- | --- | --- | -| **Starter repo** | Schema, MCP server skeleton, council runner, test harness. The contract — not the solution. | [Allfiles/digital-twin-starter](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/tree/main/Allfiles/digital-twin-starter) | -| **Avery Washington persona pack** | Path B data. | [Allfiles/persona-pack](https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack/tree/main/Allfiles/persona-pack) | +Unzip, then open `digital-twin.code-workspace` in VS Code — it comes with agent mode and the right extension recommendations already set. -```bash -git clone https://github.com/MicrosoftLearning/Team-Week-Imagineer-Hack.git -cd Team-Week-Imagineer-Hack/Allfiles/digital-twin-starter +::: details One-line setup in a terminal +**PowerShell:** + +```powershell +$u='https://microsoftlearning.github.io/Team-Week-Imagineer-Hack/downloads/digital-twin-starter.zip' +$z="$env:TEMP\dts.zip"; iwr $u -OutFile $z +Expand-Archive $z -DestinationPath "$HOME\digital-twin" -Force +code "$HOME\digital-twin\digital-twin-starter\digital-twin.code-workspace" ``` -::: warning Copy before you edit -Work in a copy of `digital-twin-starter`, not in the repo folder itself. +**macOS / Linux:** + +```bash +curl -L -o /tmp/dts.zip https://microsoftlearning.github.io/Team-Week-Imagineer-Hack/downloads/digital-twin-starter.zip +unzip -q /tmp/dts.zip -d ~/digital-twin +code ~/digital-twin/digital-twin-starter/digital-twin.code-workspace +``` ::: ## 🧑‍🏫 Facilitators - [Facilitator kit](/facilitator/) — role cards, interview script, coach playbook - [Run of show](/how-it-works/run-of-show) -- **Spoilers:** `Allfiles/persona-pack/calendar/summary-stats.md` gives away Avery's planted contradictions. Hand it to stuck teams only. +- **Spoilers:** inside the persona pack, `calendar/summary-stats.md` gives away the planted contradictions. Hand it to stuck teams only. \ No newline at end of file diff --git a/package.json b/package.json index c16d041..591a551 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,9 @@ "vitepress": "^2.0.0-alpha.12" }, "scripts": { - "docs:dev": "vitepress dev docs", - "docs:build": "vitepress build docs", + "pack": "node scripts/pack-downloads.mjs", + "docs:dev": "npm run pack && vitepress dev docs", + "docs:build": "npm run pack && vitepress build docs", "docs:preview": "vitepress preview docs", "lint:md": "markdownlint-cli2 \"docs/**/*.md\" \"#docs/node_modules\"" } diff --git a/scripts/pack-downloads.mjs b/scripts/pack-downloads.mjs new file mode 100644 index 0000000..32e1884 --- /dev/null +++ b/scripts/pack-downloads.mjs @@ -0,0 +1,64 @@ +// Packages the Allfiles folders into docs/public/downloads/ so the site serves +// them directly - participants never touch GitHub or run git clone. +// +// Runs automatically before docs:dev and docs:build, so the downloads can't +// drift from the source files. +// +// No dependencies: uses PowerShell's Compress-Archive on Windows and `zip` +// elsewhere, both of which ship with the platform / CI image. + +import { execFileSync } from "node:child_process"; +import { copyFileSync, existsSync, mkdirSync, rmSync, statSync } from "node:fs"; +import { join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = fileURLToPath(new URL("..", import.meta.url)); +const out = join(root, "docs", "public", "downloads"); +const isWin = process.platform === "win32"; + +rmSync(out, { recursive: true, force: true }); +mkdirSync(out, { recursive: true }); + +function zipFolder(srcDir, zipPath) { + if (isWin) { + execFileSync( + "powershell", + [ + "-NoProfile", + "-Command", + `$ProgressPreference='SilentlyContinue'; Compress-Archive -Path '${srcDir}' -DestinationPath '${zipPath}' -Force`, + ], + { stdio: "pipe" } + ); + } else { + // zip from the parent so the archive contains the folder itself + const parent = join(srcDir, ".."); + const name = srcDir.split(/[\\/]/).pop(); + execFileSync("zip", ["-qr", zipPath, name], { cwd: parent, stdio: "pipe" }); + } +} + +const jobs = [ + { src: join(root, "Allfiles", "digital-twin-starter"), zip: "digital-twin-starter.zip" }, + { src: join(root, "Allfiles", "persona-pack"), zip: "avery-persona-pack.zip" }, +]; + +for (const j of jobs) { + if (!existsSync(j.src)) { + console.warn(` skip (missing): ${j.src}`); + continue; + } + const dest = join(out, j.zip); + zipFolder(j.src, dest); + console.log(` ${j.zip.padEnd(28)} ${(statSync(dest).size / 1024).toFixed(1)} KB`); +} + +// Twin Forge ships as a single .md - Cowork's skill upload rejects .zip. +const forge = join(root, "Allfiles", "twin-forge", "SKILL.md"); +if (existsSync(forge)) { + const dest = join(out, "twin-forge-SKILL.md"); + copyFileSync(forge, dest); + console.log(` ${"twin-forge-SKILL.md".padEnd(28)} ${(statSync(dest).size / 1024).toFixed(1)} KB`); +} + +console.log("packaged -> docs/public/downloads/"); From 380c7d7fe8b169b51c4df0b58dc20ba6fc2bb51e Mon Sep 17 00:00:00 2001 From: Matt Quinlan <37308730+maquinl@users.noreply.github.com> Date: Thu, 30 Jul 2026 15:48:29 +0100 Subject: [PATCH 11/12] Wire the sealed-answer test into the instructions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The harness existed in the starter and the run of show scheduled 'Seal your answers' at 0:10 and 'Reveal' at 1:50 - but neither build page mentioned it. Participants following the build page would never have known to run it, and the files looked like dead code. Both tracks now open with it and close with it: 🟣 Code Step 1 python test/take_test.py Step 10 python test/compare.py 🟢 Cowork Step 1 download The Twin Test, answer, set aside Step 11 ask the twin the same 15, fill in the table - NEW Allfiles/twin-test/twin-test.md - a printable version for Base, since that track has no repo and no Python. Same 15 dilemmas, with a fill-in table and the end-of-session prompt included. - Packaged as a download alongside the others. - Starter README now leads with the harness instead of burying it in a quickstart code block, and explains what a mismatch means. - AGENTS.md describes what test/ is for, so Copilot can explain it. - Both demo checklists gained: 'one dilemma your twin got wrong, and the rule you'd add because of it'. Framing is consistent everywhere: no score, no leaderboard. Mismatches are the output, and each one names the soul.md field to fix - which is exactly what compare.py already printed. --- Allfiles/digital-twin-starter/AGENTS.md | 2 +- Allfiles/digital-twin-starter/README.md | 22 +++++ Allfiles/twin-test/twin-test.md | 102 ++++++++++++++++++++++++ docs/build/advanced-scenario-1.md | 49 ++++++++++-- docs/build/base-scenario-1.md | 59 +++++++++++--- docs/resources/downloads.md | 4 + scripts/pack-downloads.mjs | 18 +++-- 7 files changed, 230 insertions(+), 26 deletions(-) create mode 100644 Allfiles/twin-test/twin-test.md diff --git a/Allfiles/digital-twin-starter/AGENTS.md b/Allfiles/digital-twin-starter/AGENTS.md index c745219..7dae0ec 100644 --- a/Allfiles/digital-twin-starter/AGENTS.md +++ b/Allfiles/digital-twin-starter/AGENTS.md @@ -17,7 +17,7 @@ Use the synthetic example name **Avery Washington** in examples. Do not introduc - `mcp_server.py` — MCP thin tools plus TODO thick-tool stubs. - `twinlib.py` — Copilot CLI large-prompt helper. - `run.ps1` — local council runner. -- `test/` — sealed forced-choice comparison harness. +- `test/` — the sealed-answer harness. `take_test.py` records the human's gut answers to 15 dilemmas BEFORE the build; `compare.py` runs the twin over the same 15 at the end and diffs them, naming the soul.md field behind each mismatch. No score is produced, by design. ## Council output contracts diff --git a/Allfiles/digital-twin-starter/README.md b/Allfiles/digital-twin-starter/README.md index 0c1c5ed..c04bec6 100644 --- a/Allfiles/digital-twin-starter/README.md +++ b/Allfiles/digital-twin-starter/README.md @@ -4,6 +4,28 @@ Build a portable **digital twin**: a compact spec for how someone works, plus ag This starter gives you the plumbing. You write the spec and the council agents. +## The test harness — start here + +**Before you write anything**, seal your answers: + +```powershell +python test/take_test.py +``` + +Fifteen forced-choice work dilemmas. Answer fast — what you *actually* did last time, not what you'd like to have done. It flags anything that took over 25 seconds, because a deliberated answer is an aspirational one. + +That writes `test/sealed-answers.md`. Don't open it again until the end. + +**At the end of the session**, have the twin answer the same fifteen cold: + +```powershell +python test/compare.py +``` + +You get a line-by-line diff, and every mismatch names the `soul.md` field that dilemma was probing — so a miss points straight at the rule to fix. + +There is deliberately **no score and no leaderboard**. Mismatches are the output. The useful ones are where the twin picked the sensible, well-adjusted answer and you wouldn't have. + ## Quickstart ```powershell diff --git a/Allfiles/twin-test/twin-test.md b/Allfiles/twin-test/twin-test.md new file mode 100644 index 0000000..6a10055 --- /dev/null +++ b/Allfiles/twin-test/twin-test.md @@ -0,0 +1,102 @@ +--- +title: The Twin Test +--- + +# The Twin Test + +**Do this before you build anything. It takes about four minutes.** + +Fifteen forced-choice work situations. For each one, circle the letter that matches what you **actually did last time** — not what you'd like to have done. + +Then fold it over and don't look at it again until the end of the session. + +::: warning Answer fast +If you're deliberating, you're constructing an answer rather than recalling one. Aim for well under 30 seconds each. There are no good or bad answers here, only yours. +::: + +At the end, your twin answers the same fifteen cold and you compare. **This is not a score.** The mismatches are the point — each one shows a rule you wrote down that doesn't match how you actually work. + +--- +**1.** A launch note is due Friday. Thursday afternoon you find one product claim you cannot verify. +(a) Ship it with a caveat   (b) Cut the claim and ship on time   (c) Slip the note until verified   (d) Ask your manager to decide +› *probes: decision_rules — accuracy vs committed date* + +**2.** Two peer teams ask for help this week and both say their request is urgent. +(a) Try to do both   (b) Pick the higher-impact one yourself   (c) Ask your manager to arbitrate   (d) Tell the peers to align first +› *probes: decision_rules — priority conflict* + +**3.** A three-hour all-hands lands on your only open focus block. +(a) Attend live   (b) Mark tentative and half-watch   (c) Decline and watch the recording   (d) Ask whether attendance is required +› *probes: capacity — meeting load vs focus* + +**4.** A teammate asks you to own one more workstream. You are already at capacity. +(a) Say yes   (b) Say yes and quietly drop something else   (c) Say yes only if a named item slips   (d) Say no +› *probes: capacity — overcommitment rule* + +**5.** You will miss a date you committed to. You realize it six days early. +(a) Tell the stakeholder now with a new real date   (b) Ask for help before naming a date   (c) Push hard and only report if you miss   (d) Wait for the next 1:1 +› *probes: voice — status update under pressure* + +**6.** A senior person repeats an inaccurate claim in a group thread. +(a) Correct it publicly   (b) DM them with the correction   (c) Let it go   (d) Correct it publicly but soften the wording +› *probes: boundaries — accuracy vs hierarchy* + +**7.** A partner team sends a meeting invite titled "sync" with no agenda. +(a) Accept   (b) Mark tentative   (c) Ask for the agenda first   (d) Offer to resolve async +› *probes: capacity — meeting intake rule* + +**8.** You built a useful internal asset nobody asked for. Sharing it may create support work. +(a) Share broadly   (b) Share with a no-support caveat   (c) Keep it for yourself   (d) Share only with your immediate team +› *probes: priority_stack — reusable leverage vs support cost* + +**9.** A recurring 1:1 conflicts with a build block for the third time. +(a) Keep the 1:1   (b) Reschedule and offer two times   (c) Cancel this occurrence   (d) Shorten it to 15 minutes +› *probes: stakeholders — relationship maintenance* + +**10.** An agent drafts a reply to your manager. It is factually right but does not sound like you. +(a) Send it   (b) Rewrite from scratch   (c) Edit the tone and send   (d) Do not send; handle live +› *probes: voice — tolerable voice drift* + +**11.** An external partner asks for a capability answer and you are only 80% sure. +(a) Answer with a caveat   (b) Say you will confirm and follow up   (c) Route them to the product owner   (d) Give the answer confidently +› *probes: boundaries — external uncertainty* + +**12.** You are heads-down and three important chats have waited two business days. +(a) Keep building and clear them tonight   (b) Stop and clear all three now   (c) Send a short delay note now   (d) Clear only the most senior sender +› *probes: blind_spots — response latency under load* + +**13.** A focus block you created is booked over by a non-urgent meeting. +(a) Let it go   (b) Decline and cite the focus block   (c) Mark tentative   (d) Move the focus block +› *probes: boundaries — protecting focus time* + +**14.** A necessary coordination task is adjacent to your role but has no clear owner. +(a) Own it and send the invite   (b) Raise the gap and wait   (c) Escalate the ownership gap   (d) Do the minimum async without a meeting +› *probes: priority_stack — ownership of ambiguous work* + +**15.** You are asked to commit to a date for content while the product is still changing weekly. +(a) Give the requested date   (b) Give a date with explicit assumptions   (c) Give a range   (d) Refuse to commit until stable +› *probes: decision_rules — dates under uncertainty* + +--- + +## Your answers + +| # | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| --- |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| **You** | | | | | | | | | | | | | | | | +| **Twin** | | | | | | | | | | | | | | | | +| **Match?** | | | | | | | | | | | | | | | | + +## At the end of the session + +Ask your twin to answer all fifteen, cold: + +```text +Using my twin, answer these fifteen dilemmas as I would actually answer them — +not as I would like to, and not as a well-adjusted professional would. +Reply with just the numbers and letters. +``` + +Then fill in the bottom two rows. For every mismatch, look at the field named under that dilemma — that's the part of your soul file to fix. + +The interesting misses are where **the twin picked the sensible answer and you wouldn't have.** \ No newline at end of file diff --git a/docs/build/advanced-scenario-1.md b/docs/build/advanced-scenario-1.md index 24ee539..c8f9367 100644 --- a/docs/build/advanced-scenario-1.md +++ b/docs/build/advanced-scenario-1.md @@ -79,7 +79,23 @@ This page gets you through the build. There are also **[full step-by-step guides --- -## 1 · Split the work +## 1 · Seal your answers + +**Do this before you build anything.** It takes four minutes and you can't do it later. + +```powershell +python test/take_test.py +``` + +Fifteen forced-choice work dilemmas. Answer fast and honestly — what you *actually* did last time, not what you'd like to have done. It writes `test/sealed-answers.md` and you don't look at it again until the end. + +::: warning Don't deliberate +The script flags any answer that took more than 25 seconds. A considered answer is an aspirational one, and aspirational answers make the comparison worthless. +::: + +At the end of the session your twin answers the same fifteen cold, and you diff them. That's not a score — it's the fastest way to find which rules you got wrong. + +## 2 · Split the work Five people, five agents, one shared spec. Decide this in the first two minutes. @@ -97,7 +113,7 @@ Five people, five agents, one shared spec. Decide this in the first two minutes. Ambition shouldn't be balanced. Neither should Obligation or Capacity. Each one argues its corner as hard as it can — the Arbiter is where nuance happens. Balanced sub-agents produce mush. ::: -## 2 · Write the spec +## 3 · Write the spec Three files, shared by everyone. Get a rough version fast, then improve it all session. @@ -118,7 +134,7 @@ A value tells an agent nothing. A tiebreaker tells it what to do. Resist adding one more clause. Anthropic [found while building Constitutional AI](https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback) that broad principles beat long specific ones. ["Lost in the Middle"](https://arxiv.org/abs/2307.03172) (peer-reviewed, *Transactions of the ACL*) showed models pay least attention to whatever's in the middle of a long prompt. Your spec is a prompt. ::: -## 3 · Ground it in real behavior +## 4 · Ground it in real behavior This is the half a person can't self-report. Pull it from evidence. @@ -145,7 +161,7 @@ Azure AD app registration plus MSAL will take 30–60 minutes and eat your sessi 📖 Ground on live data with Work IQ — full guide (opens in a new tab) ↗ ::: -## 4 · Write the agents +## 5 · Write the agents Five files in `.github/agents/`. The starter repo has the required frontmatter and return contract for each — the bodies are yours. @@ -212,7 +228,7 @@ On Windows the command line caps at 8191 characters, so long prompts have to go ::: -## 5 · Expose it as a server +## 6 · Expose it as a server Build the MCP server so anything can call your twin — Cowork, VS Code, Claude, an agent nobody's written yet. @@ -265,7 +281,7 @@ Then `Ctrl+Shift+P` → **MCP: List Servers** → start it. Switch Copilot Chat ::: -## 6 · Add the guardrail +## 7 · Add the guardrail One check that runs before anything leaves the system: @@ -306,7 +322,7 @@ Note it returns **the rule and where it came from**, not just a verdict — so a ::: -## 7 · ⚡ The twist +## 8 · ⚡ The twist Your facilitator will hand this out partway through. Run it through the full council: @@ -318,7 +334,7 @@ Decide what to do, what to say to each of them, and what gets cut. You are checking for three positions, one decision, and an explicit statement of what got overruled and why. -## 8 · Let the critic patch it +## 9 · Let the critic patch it Find one thing the twin got wrong. Have the Critic diagnose **which line of the spec caused it** — not "the answer was bad." @@ -333,6 +349,22 @@ Without the cap, the critic fixes every miss by adding lines, and the spec degra The **file** gets better. The **model** doesn't learn. Every run reloads an improved file. That's real and useful, and it isn't training — claiming otherwise is the fastest way to lose a technical room. ::: +## 10 · The reveal + +Last thing. Your twin answers the fifteen dilemmas you sealed at the start, cold: + +```powershell +python test/compare.py +``` + +You get a line-by-line comparison, and for every mismatch it names **which field of `soul.md` that dilemma was probing** — so a miss points straight at the rule to fix. + +::: tip This isn't a score +There's no percentage and no leaderboard. Mismatches are the useful output: each one is a place where what you wrote down doesn't match what you'd actually do. Expect several. The interesting ones are where the twin picked the sensible, well-adjusted answer and you wouldn't have. +::: + +Fix one and re-run it if you have time. That's the whole loop in miniature. + --- ## Show it off @@ -347,6 +379,7 @@ The **file** gets better. The **model** doesn't learn. Every run reloads an impr - [ ] The guardrail returning `NEVER` on something - [ ] One critic patch, +2 lines or fewer - [ ] The same spec folder running somewhere else — CLI, VS Code, or Cowork +- [ ] **One dilemma your twin got wrong**, and the rule you'd add because of it ::: tip Lead with the dissent Show what the twin decided against and why. That is the part a single prompt cannot produce, and it is visible in one screen. diff --git a/docs/build/base-scenario-1.md b/docs/build/base-scenario-1.md index 03ca0c5..09440a0 100644 --- a/docs/build/base-scenario-1.md +++ b/docs/build/base-scenario-1.md @@ -55,7 +55,26 @@ This page gets you through the build, with the essentials expandable in place. T --- -## 1 · Install Twin Forge +## 1 · Seal your answers + +**Do this before you build anything.** Four minutes, and you can't do it later. + + + 📝 + The Twin Test + Fifteen forced-choice work situations. Answer them, then set it aside. + Download → + + +Answer each one with what you **actually did last time** — not what you'd like to have done. Fast, under 30 seconds each. If you're deliberating, you're constructing an answer instead of recalling one. + +Then put it away. At the end of the session your twin answers the same fifteen cold and you compare. + +::: tip This is not a score +There's no percentage and no leaderboard. The mismatches are the useful part — each one is a rule you wrote down that doesn't match how you actually work. +::: + +## 2 · Install Twin Forge 1. Open Microsoft 365 Copilot and click the **Cowork** tab. 2. In the left menu, click **Customize**. @@ -104,7 +123,7 @@ Skills live in OneDrive at `/Documents/Cowork/skills/{name}/`. A skill can carry ::: -## 2 · Pick your data +## 3 · Pick your data Start a **new** Cowork session and say: @@ -118,7 +137,7 @@ It'll ask which you want: **Avery Washington** — the made-up marketing manager. Pick this if you'd rather not use your own work data. Download their pack and **attach the files** when Twin Forge asks; it can't see them otherwise. -## 3 · Get your first draft +## 4 · Get your first draft Twin Forge takes it from here, about 12 minutes: @@ -135,7 +154,7 @@ Every question is *"what did you actually do last time?"* — not *"what do you --- -## 4 · Make it shorter +## 5 · Make it shorter Your first draft is too long. Cut it to about one page. @@ -143,7 +162,7 @@ Cutting is the highest-value thing you'll do here. Longer is not better. Anthrop **Cut anything that isn't a rule you'd actually apply.** -## 5 · Give it your voice +## 6 · Give it your voice Open your voice file. If it *describes* your writing — "professional but friendly" — replace that with **actual emails you sent.** Five to ten, pasted exactly as you wrote them. @@ -179,7 +198,7 @@ Keep the prompts that work — you'll want to run them again. ::: -## 6 · Give it judgment +## 7 · Give it judgment Your twin needs to know what you do when two good things collide. Most first drafts have values where rules should be. @@ -191,13 +210,13 @@ Your twin needs to know what you do when two good things collide. Most first dra A value cannot be applied. A rule can. -## 7 · Compare with your team +## 8 · Compare with your team Ten minutes, together. Everyone built their own twin — now build a better *shape* for all of them. Each person shows **one rule that worked** and **one that's still vague.** Copy what works. Agree on what belongs in a soul file. Keep your own answers; share the structure. -## 8 · ⚡ The twist +## 9 · ⚡ The twist Your facilitator will hand this out partway through. Give it to your twin: @@ -211,7 +230,7 @@ You are checking one thing: does it make **your** tradeoff, and can it state wha If it can't, you've found your next missing rule. Add it and run it again. -## 9 · Make it run without you +## 10 · Make it run without you Pick one and set it up: @@ -223,6 +242,22 @@ Pick one and set it up: Cowork drafts and waits for your approval. Keep it that way today. ::: +## 11 · The reveal + +Pull out the Twin Test you sealed at the start. Ask your twin to answer the same fifteen, cold: + +```text +Using my twin, answer these fifteen dilemmas as I would actually answer them — +not as I'd like to, and not as a well-adjusted professional would. +Reply with just the numbers and letters. +``` + +Fill in the bottom two rows of the table and compare. + +For every mismatch, look at the field named under that dilemma — that's the part of your soul file that's wrong. **The interesting misses are where the twin picked the sensible answer and you wouldn't have.** + +Fix one and ask it again if you have time. + ::: details Setting up a schedule or a trigger **Schedule** — just describe it in chat: @@ -260,7 +295,7 @@ Triggers fire on incoming email or a Teams message/@mention, and the default is - [ ] Your voice file, with real samples in it - [ ] **One thing your calendar revealed that surprised you** - [ ] The exec-vs-peer conflict, and what your twin decided -- [ ] Your scheduled prompt or trigger +- [ ] Your scheduled prompt or trigger`r`n- [ ] **One dilemma your twin got wrong**, and the rule you'd add because of it ::: tip What to aim for in the demo Someone who knows you reads a draft your twin wrote and recognises it. That lands harder than showing more features. @@ -274,8 +309,8 @@ Someone who knows you reads a draft your twin wrote and recognises it. That land | Upload seemed to do nothing | Upload the `.md` file, not a zip | | "I can't find the reference files" | You've got an old copy — re-download it | | Avery's data can't be found | Attach the pack files to the session | -| Twin sounds like a stranger | Your voice file is descriptions, not real emails. Go back to step 5 | -| Twin gives wishy-washy answers | Your soul file has values, not rules. Go back to step 6 | +| Twin sounds like a stranger | Your voice file is descriptions, not real emails. Go back to step 7 | +| Twin gives wishy-washy answers | Your soul file has values, not rules. Go back to step 7 | --- diff --git a/docs/resources/downloads.md b/docs/resources/downloads.md index b45c78c..6b8c9e8 100644 --- a/docs/resources/downloads.md +++ b/docs/resources/downloads.md @@ -6,6 +6,10 @@ title: Downloads Everything for **Scenario 1 · The Digital Twin**. Files download straight from this site — no GitHub account, no cloning. +::: tip Do this first, whichever track you pick +📝 The Twin Test — fifteen forced-choice work situations. Answer them before you build, compare at the end. Four minutes. +::: + ## 🟢 Cowork
diff --git a/scripts/pack-downloads.mjs b/scripts/pack-downloads.mjs index 32e1884..ae9c825 100644 --- a/scripts/pack-downloads.mjs +++ b/scripts/pack-downloads.mjs @@ -54,11 +54,19 @@ for (const j of jobs) { } // Twin Forge ships as a single .md - Cowork's skill upload rejects .zip. -const forge = join(root, "Allfiles", "twin-forge", "SKILL.md"); -if (existsSync(forge)) { - const dest = join(out, "twin-forge-SKILL.md"); - copyFileSync(forge, dest); - console.log(` ${"twin-forge-SKILL.md".padEnd(28)} ${(statSync(dest).size / 1024).toFixed(1)} KB`); +const singles = [ + { src: join(root, "Allfiles", "twin-forge", "SKILL.md"), name: "twin-forge-SKILL.md" }, + { src: join(root, "Allfiles", "twin-test", "twin-test.md"), name: "twin-test.md" }, +]; + +for (const s of singles) { + if (!existsSync(s.src)) { + console.warn(` skip (missing): ${s.src}`); + continue; + } + const dest = join(out, s.name); + copyFileSync(s.src, dest); + console.log(` ${s.name.padEnd(28)} ${(statSync(dest).size / 1024).toFixed(1)} KB`); } console.log("packaged -> docs/public/downloads/"); From bb8bd0a7f5a7b663672e33cf41328c5c6a8a3678 Mon Sep 17 00:00:00 2001 From: Matt Quinlan <37308730+maquinl@users.noreply.github.com> Date: Thu, 30 Jul 2026 15:51:37 +0100 Subject: [PATCH 12/12] Scoring page states scoring is not in play, remove from sidebar The page still said 'TODO - the rubric' and was linked in the sidebar, which contradicts the rest of the site. Replaced with a note explaining the reveal mechanic instead, and unlinked it from the nav. --- docs/.vitepress/config.mts | 1 - docs/how-it-works/scoring.md | 14 +++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index a838087..f34e26e 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -103,7 +103,6 @@ export default defineConfig({ items: [ { text: "Overview", link: "/how-it-works/" }, { text: "Run of Show", link: "/how-it-works/run-of-show" }, - { text: "Scoring & Judging", link: "/how-it-works/scoring" }, ], }, ], diff --git a/docs/how-it-works/scoring.md b/docs/how-it-works/scoring.md index a4600a8..88efc49 100644 --- a/docs/how-it-works/scoring.md +++ b/docs/how-it-works/scoring.md @@ -4,14 +4,10 @@ title: Scoring & Judging # Scoring & Judging -> **TODO** — the rubric. Starting point adapted from the Agents League 6-criteria model; tune weights for a 2-hour format. +::: info Not in play for this event +There's no rubric, no points, and no leaderboard for Scenario 1. -| Criterion | What judges look for | Weight | -| --------- | -------------------- | ------ | -| Build | Does it work? Is the flow logical? | TBD | -| Impact | Clear before/after with evidence | TBD | -| Storytelling | Can anyone understand the demo? | TBD | -| Creativity | Novel approach for the chosen tool | TBD | -| Teamwork | Whole table contributed | TBD | +Teams do a **reveal** instead: everyone answers fifteen forced-choice work dilemmas at the start, seals them, and at the end their twin answers the same fifteen cold. The mismatches show which rules need fixing. That's a learning signal, not a score. -> **TODO** — decide gamification: badges tied to Team Week passport, "Hidden Mickey" bonus, reaction storm, etc. +See [Run of show](/how-it-works/run-of-show) for how it fits the two hours. +::: \ No newline at end of file