The Support Specialist agent is Sam now, not Izzy, in its template, the home page tour, the marketing page and the docs, and the tour's Chat sidebar matches the app's
13 files+86−760/13 viewed
| 117 | 117 | ## A support lead asks for a change | |
| 118 | 118 | ||
| 119 | 119 | Dana leads support. She has read access to `acme/billing` and no write | |
| 120 | − | access. Say the workspace has hired Izzy from the **Support Specialist** | |
| 121 | − | template. Dana DMs her: | |
| 120 | + | access. Say the workspace has hired Sam from the **Support Specialist** | |
| 121 | + | template. Dana DMs Sam: | |
| 122 | 122 | ||
| 123 | − | <Conversation title="DM with Izzy" topic="Dana has read access to acme/billing"> | |
| 123 | + | <Conversation title="DM with Sam" topic="Dana has read access to acme/billing"> | |
| 124 | 124 | <Message name="Dana Ruiz" time="14:05"> | |
| 125 | 125 | ||
| 126 | 126 | Customers on annual plans get charged twice when they downgrade mid-month. Can you fix it? | |
| 127 | 127 | ||
| 128 | 128 | </Message> | |
| 129 | − | <Message name="Izzy" agent role="Support Specialist" time="14:05"> | |
| 129 | + | <Message name="Sam" agent role="Support Specialist" time="14:05"> | |
| 130 | 130 | ||
| 131 | 131 | I can't change the billing code for you, but I can make sure the right people see this. Here is a bug report in your words: | |
| 132 | 132 | ||
| ⋯ | |||
| 137 | 137 | </Message> | |
| 138 | 138 | </Conversation> | |
| 139 | 139 | ||
| 140 | − | Izzy didn't refuse, and didn't pretend she could change the code. She | |
| 140 | + | Sam didn't refuse, and didn't pretend to be able to change the code. Sam | |
| 141 | 141 | wrote the request up and offered to route it. | |
| 142 | 142 | ||
| 143 | 143 | ### Requests become intake | |
| 32 | 32 | <Conversation title="# support" topic="Customer questions and escalations"> | |
| 33 | 33 | <Message name="Dana Ruiz" time="10:12"> | |
| 34 | 34 | ||
| 35 | − | @izzy can you go through this week's export complaints and file issues for anything that looks like a real bug? | |
| 35 | + | @sam can you go through this week's export complaints and file issues for anything that looks like a real bug? | |
| 36 | 36 | ||
| 37 | 37 | </Message> | |
| 38 | − | <Message name="Izzy" agent role="Support Specialist" time="10:12"> | |
| 38 | + | <Message name="Sam" agent role="Support Specialist" time="10:12"> | |
| 39 | 39 | ||
| 40 | 40 | On it. I've started a session for this: **Export complaints this week**. Follow along in its thread. | |
| 41 | 41 | ||
| 42 | 42 | </Message> | |
| 43 | 43 | </Conversation> | |
| 44 | 44 | ||
| 45 | − | In this example the workspace hired *Izzy* from the **Support Specialist** | |
| 46 | − | template; any agent works the same way. Izzy's card sits under her reply | |
| 45 | + | In this example the workspace hired *Sam* from the **Support Specialist** | |
| 46 | + | template; any agent works the same way. Sam's card sits under the reply | |
| 47 | 47 | with its status, steps and spend against its cap. A session also starts | |
| 48 | 48 | from a [routine](/guides/agent-routines/), or when another session brings | |
| 49 | 49 | the agent in. | |
| ⋯ | |||
| 58 | 58 | ## Sessions start sessions | |
| 59 | 59 | ||
| 60 | 60 | A session can hand parts of its work to the agent's subagents, or bring in | |
| 61 | − | a colleague: Izzy asks the QA agent to reproduce a bug before filing it. | |
| 61 | + | a colleague: Sam asks the QA agent to reproduce a bug before filing it. | |
| 62 | 62 | Each is a **child session** whose result comes back to the session that | |
| 63 | 63 | started it. The children make a **tree**, and the session page shows it. | |
| 64 | 64 | ||
| 13 | 13 | **An agent is a colleague you hire into a role.** Every workspace starts | |
| 14 | 14 | with one agent, `@g1t`, the orchestrator. Every other agent is one you | |
| 15 | 15 | hire, usually from a template in a click: for example, Margo from the **QA | |
| 16 | − | Engineer** template, Izzy from **Support Specialist**, David from **Sales | |
| 16 | + | Engineer** template, Sam from **Support Specialist**, David from **Sales | |
| 17 | 17 | Operations**. Each has a name, a handle | |
| 18 | 18 | you mention it by, a title, a team, a list of things it answers for, and a | |
| 19 | 19 | voice of its own. It sits in the member list next to the people. You DM it, | |
| ⋯ | |||
| 30 | 30 | | QA | Margo | QA Engineer | | |
| 31 | 31 | | Docs | Inky | Technical Writer | | |
| 32 | 32 | | Product | Dot | Product Manager | | |
| 33 | − | | Customer Support | Izzy | Support Specialist | | |
| 33 | + | | Customer Support | Sam | Support Specialist | | |
| 34 | 34 | | Sales | David | Sales Operations | | |
| 35 | 35 | | Operations | Bruno | Operations Engineer | | |
| 36 | 36 | ||
| ⋯ | |||
| 50 | 50 | | **In every workspace** | On every surface: Chat, issues and pull requests, the inbox and MCP. It works on issues and pull requests as described in [g1t's agent](/guides/working-with-g1t/). | | |
| 51 | 51 | | **Configurable** | Set its personality, model limits, budget and what it may do alone, like any agent. Its job is fixed, and you can add instructions to it. | | |
| 52 | 52 | | **Knows the team** <Soon /> | Every colleague's role, what they are working on and their budget, and which teams own what. | | |
| 53 | − | | **Delegates** <Soon /> | "Get the export timeout fixed and tell support when it ships" becomes three visible @mentions: the fix to `@otto`, the review to `@margo`, and a word to `#support` from `@izzy`. | | |
| 53 | + | | **Delegates** <Soon /> | "Get the export timeout fixed and tell support when it ships" becomes three visible @mentions: the fix to `@otto`, the review to `@margo`, and a word to `#support` from `@sam`. | | |
| 54 | 54 | | **Does the work itself when nobody fits** | In a workspace with no specialists, g1t does everything itself, as it does today. | | |
| 55 | 55 | | **Reports** <Soon /> | A daily or weekly summary of what the team's agents did, and answers to "what's everyone working on?" | | |
| 56 | 56 | ||
| ⋯ | |||
| 116 | 116 | | Operations | Bruno, or Skipper, Patch, Scout… | Operations Engineer | Cutting releases; watching deploys; first response to incidents; postmortems | Terse operator | Never below Standard | | |
| 117 | 117 | | Docs | Inky, or Quill, Folio, Rosie… | Technical Writer | Docs that are true after every change; decisions turned into pages; release notes | Friendly | Never above Standard | | |
| 118 | 118 | | Product | Dot, or Clover, Mabel, Penny… | Product Manager | Requests turned into intake; triage and duplicates; roadmap notes; telling people when it ships | Friendly | Never above Standard | | |
| 119 | − | | Customer Support | Izzy, or Biscuit, Sunny, Poppy… | Support Specialist | Product questions from the support team; customer bugs turned into intake; word when a fix ships | Friendly | Never above Standard | | |
| 119 | + | | Customer Support | Sam, or Robin, Jamie, Sunny… | Support Specialist | Product questions from the support team; customer bugs turned into intake; word when a fix ships | Friendly | Never above Standard | | |
| 120 | 120 | | Sales | David | Sales Operations | Account summaries, the voice-of-the-customer digest, notes before calls | Crisp | Never above Standard | | |
| 121 | 121 | ||
| 122 | 122 | Planning isn't a role: it is `@g1t`'s own job. | |
| ⋯ | |||
| 277 | 277 | | **Hand off** | It offers to bring the right colleague in. On yes, it mentions them with a short brief and they take the thread. Hand-offs are offered, never silent. | *"That's Margo's area. Want me to bring her in?"* | | |
| 278 | 278 | | **Steer** | When you are about to do something another role owns, it says so and names who to check with. | *"We're in the release freeze. Check with Bruno before merging."* | | |
| 279 | 279 | ||
| 280 | − | In a workspace that has hired Izzy from **Support Specialist** and Margo | |
| 280 | + | In a workspace that has hired Sam from **Support Specialist** and Margo | |
| 281 | 281 | from **QA Engineer**: | |
| 282 | 282 | ||
| 283 | 283 | <Conversation title="# web" topic="A consult, as it will show"> | |
| 284 | 284 | <Message name="Dana Ruiz" time="11:02"> | |
| 285 | 285 | ||
| 286 | − | @izzy a customer says exports skip archived rows. Is that expected? | |
| 286 | + | @sam a customer says exports skip archived rows. Is that expected? | |
| 287 | 287 | ||
| 288 | 288 | </Message> | |
| 289 | − | <Message name="Izzy" agent role="Support Specialist" time="11:03"> | |
| 289 | + | <Message name="Sam" agent role="Support Specialist" time="11:03"> | |
| 290 | 290 | ||
| 291 | 291 | It's expected: archived rows are left out unless the customer turns on **Include archived** before exporting. I checked with Margo, who confirmed it's covered by the export tests. | |
| 292 | 292 | ||
| 293 | − | *Izzy asked Margo · 2 messages* | |
| 293 | + | *Sam asked Margo · 2 messages* | |
| 294 | 294 | ||
| 295 | 295 | </Message> | |
| 296 | 296 | </Conversation> | |
| 14 | 14 | talk in channels and direct messages, and agents are members there like | |
| 15 | 15 | anyone else. Every workspace comes with `@g1t`, the orchestrator who knows | |
| 16 | 16 | them all. The rest you hire into roles from templates, like colleagues: for | |
| 17 | − | example, Margo from **QA Engineer** or Izzy from **Support Specialist**, | |
| 17 | + | example, Margo from **QA Engineer** or Sam from **Support Specialist**, | |
| 18 | 18 | each with a title, responsibilities, a voice and a budget. You DM them or | |
| 19 | 19 | mention them in a thread. Assign an issue to g1t, and the code it | |
| 20 | 20 | changes lands through pull requests, checks and review. No separate chat |
| 306 | 306 | { team: "QA", who: "Margo" }, | |
| 307 | 307 | { team: "Docs", who: "Inky" }, | |
| 308 | 308 | { team: "Product", who: "Dot" }, | |
| 309 | − | { team: "Support", who: "Izzy" }, | |
| 309 | + | { team: "Support", who: "Sam" }, | |
| 310 | 310 | { team: "Sales", who: "David" }, | |
| 311 | 311 | { team: "Operations", who: "Bruno" }, | |
| 312 | 312 | ]; |
| 218 | 218 | /* ------------------------------------------------------------------ */ | |
| 219 | 219 | ||
| 220 | 220 | /** The people in the story; everyone else is an agent. */ | |
| 221 | − | const PEOPLE: Record<string, string> = { Priya: "Priya Shah", Dana: "Dana Ruiz", Sam: "Sam Lee" }; | |
| 221 | + | const PEOPLE: Record<string, string> = { Priya: "Priya Shah", Dana: "Dana Ruiz", Alex: "Alex Lee" }; | |
| 222 | 222 | ||
| 223 | 223 | /** The agents in the story: a human name, a title, and a pixel creature of their own. */ | |
| 224 | 224 | const AGENTS: Record<string, { title: string; team: string }> = { | |
| ⋯ | |||
| 226 | 226 | Otto: { title: "Software Engineer", team: "Engineering" }, | |
| 227 | 227 | Margo: { title: "QA Engineer", team: "QA" }, | |
| 228 | 228 | Inky: { title: "Technical Writer", team: "Docs" }, | |
| 229 | − | Izzy: { title: "Support Specialist", team: "Customer Support" }, | |
| 229 | + | Sam: { title: "Support Specialist", team: "Customer Support" }, | |
| 230 | 230 | Dot: { title: "Product Manager", team: "Product" }, | |
| 231 | 231 | David: { title: "Sales Operations", team: "Sales" }, | |
| 232 | 232 | Bruno: { title: "Operations Engineer", team: "Operations" }, | |
| ⋯ | |||
| 492 | 492 | // Otto works from the handoff until the merge; everyone else is idle. | |
| 493 | 493 | const ottoBusy = frame.handoff && !frame.merged; | |
| 494 | 494 | const margoBusy = frame.consult && !frame.approved; | |
| 495 | + | // As the app has it: direct messages with people and agents alike, the | |
| 496 | + | // latest first; then the agents not talked to yet. | |
| 497 | + | const dms: { who: string; away?: boolean; status?: string; working?: boolean }[] = [ | |
| 498 | + | { who: "g1t" }, | |
| 499 | + | { who: "Dana" }, | |
| 500 | + | { who: "Margo", working: margoBusy }, | |
| 501 | + | { who: "Alex", away: true, status: "🗓️" }, | |
| 502 | + | ]; | |
| 495 | 503 | const agents: { who: string; working: boolean }[] = [ | |
| 496 | − | { who: "g1t", working: frame.g1tTyping }, | |
| 497 | 504 | { who: "Otto", working: ottoBusy }, | |
| 498 | − | { who: "Margo", working: margoBusy }, | |
| 499 | 505 | { who: "Inky", working: frame.docUpdated }, | |
| 500 | − | { who: "Izzy", working: frame.shipped && !frame.izzy }, | |
| 506 | + | { who: "Sam", working: frame.shipped && !frame.sam }, | |
| 501 | 507 | ]; | |
| 502 | 508 | return ( | |
| 503 | 509 | <> | |
| ⋯ | |||
| 524 | 530 | {name === "support" && <span className="min-w-4 rounded-full bg-line-strong px-1 text-center text-[9.5px] font-semibold text-fg">3</span>} | |
| 525 | 531 | </SideRow> | |
| 526 | 532 | ))} | |
| 533 | + | <div className="flex h-7 items-center gap-2 px-2 text-[12px] text-faint"> | |
| 534 | + | <Compass size={12} /> | |
| 535 | + | <span className="flex-1">Browse channels</span> | |
| 536 | + | <span className="text-[10.5px]">3</span> | |
| 537 | + | </div> | |
| 538 | + | <SideLabel>Direct messages</SideLabel> | |
| 539 | + | {dms.map((dm) => { | |
| 540 | + | const agent = dm.who in AGENTS; | |
| 541 | + | return ( | |
| 542 | + | <SideRow key={dm.who}> | |
| 543 | + | <span className="relative flex"> | |
| 544 | + | <Face who={dm.who} size={16} /> | |
| 545 | + | {!agent && <PresenceDot away={dm.away} />} | |
| 546 | + | {agent && dm.working && <PresenceDot />} | |
| 547 | + | </span> | |
| 548 | + | <span className="min-w-0 flex-1 truncate"> | |
| 549 | + | {agent ? dm.who : PEOPLE[dm.who]} | |
| 550 | + | {agent && <span className="text-faint"> · {dm.who === "g1t" ? "orchestrator" : AGENTS[dm.who].title}</span>} | |
| 551 | + | {dm.status && <span className="ml-1.5 text-[11px]">{dm.status}</span>} | |
| 552 | + | </span> | |
| 553 | + | </SideRow> | |
| 554 | + | ); | |
| 555 | + | })} | |
| 527 | 556 | <SideLabel>Agents</SideLabel> | |
| 528 | 557 | {agents.map((agent) => ( | |
| 529 | 558 | <SideRow key={agent.who}> | |
| 530 | − | <Face who={agent.who} size={16} /> | |
| 559 | + | <span className="relative flex"> | |
| 560 | + | <Face who={agent.who} size={16} /> | |
| 561 | + | {agent.working && <PresenceDot />} | |
| 562 | + | </span> | |
| 531 | 563 | <span className="min-w-0 flex-1 truncate"> | |
| 532 | 564 | {agent.who} | |
| 533 | 565 | <span className="text-faint"> · {AGENTS[agent.who].title}</span> | |
| 534 | − | </span> | |
| 535 | − | {agent.who !== "g1t" && <AgentDot working={agent.working} />} | |
| 536 | − | </SideRow> | |
| 537 | − | ))} | |
| 538 | − | <SideLabel>Direct messages</SideLabel> | |
| 539 | − | {[ | |
| 540 | − | { who: "Dana", away: false, status: null }, | |
| 541 | − | { who: "Sam", away: true, status: "🗓️" }, | |
| 542 | − | ].map((person) => ( | |
| 543 | − | <SideRow key={person.who}> | |
| 544 | − | <span className="relative flex"> | |
| 545 | − | <Face who={person.who} size={16} /> | |
| 546 | − | <PresenceDot away={person.away} /> | |
| 547 | − | </span> | |
| 548 | − | <span className="flex-1 truncate"> | |
| 549 | − | {PEOPLE[person.who]} | |
| 550 | − | {person.status && <span className="ml-1.5 text-[11px]">{person.status}</span>} | |
| 551 | 566 | </span> | |
| 552 | 567 | </SideRow> | |
| 553 | 568 | ))} | |
| 554 | − | <div className="mt-2 flex h-7 items-center gap-2 px-2 text-[12px] text-muted"> | |
| 555 | − | <Compass size={13} className="text-faint" /> | |
| 556 | − | <span className="flex-1">Browse all channels</span> | |
| 557 | − | <span className="text-[10.5px] text-faint">6</span> | |
| 558 | − | </div> | |
| 559 | 569 | </div> | |
| 560 | 570 | </> | |
| 561 | 571 | ); | |
| ⋯ | |||
| 615 | 625 | {frame.shipped && ( | |
| 616 | 626 | <Message who="g1t" time="09:41" enter> | |
| 617 | 627 | <p> | |
| 618 | − | <Rich text="Shipped. A 200,000-row export now finishes in about 3 s. @izzy, can you let #support know?" /> | |
| 628 | + | <Rich text="Shipped. A 200,000-row export now finishes in about 3 s. @sam, can you let #support know?" /> | |
| 619 | 629 | </p> | |
| 620 | 630 | </Message> | |
| 621 | 631 | )} | |
| 622 | − | {frame.izzy && ( | |
| 623 | − | <Message who="Izzy" time="09:42" enter> | |
| 632 | + | {frame.sam && ( | |
| 633 | + | <Message who="Sam" time="09:42" enter> | |
| 624 | 634 | <p> | |
| 625 | 635 | <Rich text="Done. Told #support, and Dana's two customers can export again." /> | |
| 626 | 636 | </p> | |
| ⋯ | |||
| 669 | 679 | { who: "Otto", working: true }, | |
| 670 | 680 | { who: "Margo" }, | |
| 671 | 681 | { who: "Inky" }, | |
| 672 | − | { who: "Izzy" }, | |
| 682 | + | { who: "Sam" }, | |
| 673 | 683 | { who: "Dot" }, | |
| 674 | 684 | ]; | |
| 675 | 685 | ||
| ⋯ | |||
| 1367 | 1377 | {frame.shipped && ( | |
| 1368 | 1378 | <Message who="g1t" time="09:41" enter> | |
| 1369 | 1379 | <p> | |
| 1370 | − | <Rich text="Shipped. @izzy, can you tell #support?" /> | |
| 1380 | + | <Rich text="Shipped. @sam, can you tell #support?" /> | |
| 1371 | 1381 | </p> | |
| 1372 | 1382 | </Message> | |
| 1373 | 1383 | )} | |
| 1374 | − | {frame.izzy && ( | |
| 1375 | − | <Message who="Izzy" time="09:42" enter> | |
| 1384 | + | {frame.sam && ( | |
| 1385 | + | <Message who="Sam" time="09:42" enter> | |
| 1376 | 1386 | <p> | |
| 1377 | 1387 | <Rich text="Done. Told #support." /> | |
| 1378 | 1388 | </p> | |
| 54 | 54 | ||
| 55 | 55 | test("each still shows its step's point", () => { | |
| 56 | 56 | assert.equal(frameAt(STILLS.code).approved, true); | |
| 57 | − | assert.equal(frameAt(STILLS.chat).izzy, true); | |
| 57 | + | assert.equal(frameAt(STILLS.chat).sam, true); | |
| 58 | 58 | assert.equal(frameAt(STILLS.agents).scene, "agents"); | |
| 59 | 59 | assert.equal(frameAt(STILLS.docs).docUpdated, true); | |
| 60 | 60 | }); | |
| 61 | 61 | ||
| 62 | − | test("Izzy tells #support after g1t says it shipped", () => { | |
| 63 | − | assert.equal(frameAt(BEAT.izzy - 1).izzy, false); | |
| 64 | − | assert.equal(frameAt(BEAT.izzy).shipped, true); | |
| 62 | + | test("Sam tells #support after g1t says it shipped", () => { | |
| 63 | + | assert.equal(frameAt(BEAT.sam - 1).sam, false); | |
| 64 | + | assert.equal(frameAt(BEAT.sam).shipped, true); | |
| 65 | 65 | }); |
| 6 | 6 | * | |
| 7 | 7 | * The story opens on the code: Otto's pull request #431 runs its checks, | |
| 8 | 8 | * is approved and is merged by the queue. Then where it came from: the | |
| 9 | − | * ask in #web, handed to @otto by g1t, now merged, and Izzy telling | |
| 9 | + | * ask in #web, handed to @otto by g1t, now merged, and Sam telling | |
| 10 | 10 | * #support. Then Otto's sessions, the record of what he did and spent, and | |
| 11 | − | * last Inky's docs page picking up the change. Otto, Margo, Izzy and Inky | |
| 11 | + | * last Inky's docs page picking up the change. Otto, Margo, Sam and Inky | |
| 12 | 12 | * are agents this workspace hired from role templates; only g1t is built in. | |
| 13 | 13 | */ | |
| 14 | 14 | ||
| ⋯ | |||
| 49 | 49 | cardMerged: boolean; | |
| 50 | 50 | /** g1t posted that it shipped. */ | |
| 51 | 51 | shipped: boolean; | |
| 52 | − | /** Izzy says she told #support. */ | |
| 53 | − | izzy: boolean; | |
| 52 | + | /** Sam says the support team has been told, in #support. */ | |
| 53 | + | sam: boolean; | |
| 54 | 54 | /** Otto consulted Margo, shown as a collapsed line on the task. */ | |
| 55 | 55 | consult: boolean; | |
| 56 | 56 | /** The docs page shows the changed line. */ | |
| ⋯ | |||
| 87 | 87 | chat: 6450, | |
| 88 | 88 | cardMerged: 7100, | |
| 89 | 89 | shipped: 8400, | |
| 90 | − | izzy: 9600, | |
| 90 | + | sam: 9600, | |
| 91 | 91 | railAgentsClick: 11000, | |
| 92 | 92 | agents: 11150, | |
| 93 | 93 | railDocsClick: 15000, | |
| ⋯ | |||
| 137 | 137 | const press = (at: number) => t >= at && t < at + 180; | |
| 138 | 138 | const moves: [number, CursorTarget][] = [ | |
| 139 | 139 | [BEAT.merged + 300, "rail-chat"], | |
| 140 | − | [BEAT.izzy + 500, "rail-agents"], | |
| 140 | + | [BEAT.sam + 500, "rail-agents"], | |
| 141 | 141 | [BEAT.agents + 2600, "rail-docs"], | |
| 142 | 142 | [BEAT.docs + 500, "idle"], | |
| 143 | 143 | ]; | |
| ⋯ | |||
| 169 | 169 | merged: t >= BEAT.merged, | |
| 170 | 170 | cardMerged: t >= BEAT.cardMerged, | |
| 171 | 171 | shipped: t >= BEAT.shipped, | |
| 172 | − | izzy: t >= BEAT.izzy, | |
| 172 | + | sam: t >= BEAT.sam, | |
| 173 | 173 | consult: true, | |
| 174 | 174 | docUpdated: t >= BEAT.docUpdated, | |
| 175 | 175 | cursor, | |
| ⋯ | |||
| 181 | 181 | /** A still frame for each pill, for reduced motion: the moment the step makes its point. */ | |
| 182 | 182 | export const STILLS: Record<Scene, number> = { | |
| 183 | 183 | code: BEAT.approved + 200, | |
| 184 | − | chat: BEAT.izzy + 400, | |
| 184 | + | chat: BEAT.sam + 400, | |
| 185 | 185 | agents: BEAT.agents + 400, | |
| 186 | 186 | docs: BEAT.docUpdated + 400, | |
| 187 | 187 | }; | |
| 89 | 89 | ### Roles, not tasks | |
| 90 | 90 | ||
| 91 | 91 | An agent is hired into a role, like a person: **Margo** works in QA, | |
| 92 | − | **Izzy** in Customer Support, **David** in Sales, **Bruno** in Operations. | |
| 92 | + | **Sam** in Customer Support, **David** in Sales, **Bruno** in Operations. | |
| 93 | 93 | The role is broad on purpose. | |
| 94 | 94 | ||
| 95 | 95 | - **A title and a team.** For example, "QA Engineer" on the QA team. | |
| ⋯ | |||
| 103 | 103 | - reproduce bug reports; | |
| 104 | 104 | - keep the release checklist honest. | |
| 105 | 105 | ||
| 106 | − | Izzy's: | |
| 106 | + | Sam's: | |
| 107 | 107 | - answer customer questions from Docs and the product; | |
| 108 | 108 | - turn bugs into intake for the owning team; | |
| 109 | 109 | - tell customers when their fix ships. | |
| ⋯ | |||
| 178 | 178 | - Operations: Bruno. | |
| 179 | 179 | - Docs: Inky. | |
| 180 | 180 | - Product: Dot. | |
| 181 | − | - Support: Izzy. | |
| 181 | + | - Support: Sam. | |
| 182 | 182 | - Sales: David. | |
| 183 | 183 | ||
| 184 | 184 | g1t is the one who knows everyone. The **role templates** are organised by | |
| 456 | 456 | export type RoutineEvent = (typeof ROUTINE_EVENTS)[number]["key"]; | |
| 457 | 457 | ||
| 458 | 458 | /** | |
| 459 | − | * A routine: work an agent does on a schedule or when something happens, such as Izzy's Monday digest | |
| 459 | + | * A routine: work an agent does on a schedule or when something happens, such as Sam's Monday digest | |
| 460 | 460 | * of support themes. Each run is a session posted in the routine's channel, | |
| 461 | 461 | * paid from the agent's budget, and run with the access of the person who | |
| 462 | 462 | * set it up (its sponsor), never more. |
| 18 | 18 | }); | |
| 19 | 19 | ||
| 20 | 20 | test("the query is what people said last, without mentions, cut short", () => { | |
| 21 | − | assert.equal(recallQuery(["@izzy can a customer get a refund after 40 days?", "hi", "on enterprise"]), "can a customer get a refund after 40 days? \non enterprise"); | |
| 21 | + | assert.equal(recallQuery(["@sam can a customer get a refund after 40 days?", "hi", "on enterprise"]), "can a customer get a refund after 40 days? \non enterprise"); | |
| 22 | 22 | assert.equal(recallQuery(["ok", ""]), null); | |
| 23 | 23 | assert.equal(recallQuery(["x".repeat(2000)])!.length, 600); | |
| 24 | 24 | }); |
| 1 | 1 | /** | |
| 2 | 2 | * Routines (docs/WORKSPACE.md, "Routines"): work an agent does on a | |
| 3 | − | * schedule, such as Izzy's Monday digest of support themes or Bruno's | |
| 3 | + | * schedule, such as Sam's Monday digest of support themes or Bruno's | |
| 4 | 4 | * morning look at failed deploys. Each run is a session in the routine's | |
| 5 | 5 | * channel, paid from the agent's budget, with the access of the person who | |
| 6 | 6 | * set it up (its sponsor), never more: if the sponsor leaves the workspace |
| 162 | 162 | }, | |
| 163 | 163 | { | |
| 164 | 164 | id: "support", | |
| 165 | − | display_name: "Izzy", | |
| 166 | − | handle: "izzy", | |
| 167 | − | name_ideas: ["Izzy", "Biscuit", "Sunny", "Waffles", "Poppy", "Moss", "Daisy", "Nugget"], | |
| 165 | + | display_name: "Sam", | |
| 166 | + | handle: "sam", | |
| 167 | + | name_ideas: ["Sam", "Robin", "Jamie", "Biscuit", "Sunny", "Waffles", "Poppy", "Moss", "Daisy", "Nugget"], | |
| 168 | 168 | title: "Support Specialist", | |
| 169 | 169 | department: "Customer Support", | |
| 170 | 170 | role: "Support Specialist, Customer Support", |