← All AI Engineer talks

AI Engineer World's Fair 2025

The Agent Awakens: Collaborative Development with Copilot

Read the talk

The Agent Awakens: Collaborative Development with Copilot

From a changing brunch request to a reviewable pull request, effective Copilot collaboration depends on explicit context, prepared environments, and deliberate human control.

From a talk by Christopher Harrison and John Peck

Before you start: Familiarity with Git branches, pull requests, and a code editor will help you follow the workshop; prior experience with Copilot or MCP is not required. The original hands-on lab required a personal or non-enterprise-managed GitHub account.

First brunch, then somewhere new, then waffles

A request to go to brunch sounds straightforward. Christopher Harrison recommends a restaurant; his partner says they have been there too often and wants somewhere new. He suggests another place. Then comes another constraint: she wants waffles. Each recommendation made sense given the information available, and each new detail changes the useful answer. Some constraints may have been known from the start; others emerge through conversation. That is the working meaning of Copilot as an AI pair programmer: collaboration includes discovering and sharing context, rather than expecting a perfect first request.

Context includes the repository, not just the prompt. Copilot reads code, so the same choices that help a new teammate understand a project also help it: descriptive function and variable names, clear structure, and fewer unexplained abbreviations or single-letter variables. A line or two of comments can explain what a piece of code does and how it does it. A navigable project layout makes the relevant implementation easier to find. These are ordinary code-quality practices with an additional consumer.

The next ingredient is intent. Older chatbots trained users to send terse, command-like inputs, but a development request can use natural language to explain both the desired result and its constraints. Harrison’s formulation is “don't be passive-aggressive with Copilot”: if you know an important requirement, tell it. An unstated preference cannot reliably guide an implementation.

3:513:58
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

3:51 · section reference included

Choose how much of the work to delegate

Copilot’s workloads differ in scope and in who steers the next action. Completions support a developer who already knows what to write. Chat introduces a question-and-response interaction, but a webpage change quickly exposes the limits of generating one file: HTML, JavaScript, and CSS may all need coordinated changes. Edits extends the interaction across files; IDE agent mode adds project navigation, task execution, and an iterative attempt to recover from errors.

WorkloadTypical scopeInteraction
CompletionsNext line, function, or classSuggestions while you type
ChatAnswer or generated fileAsk, inspect, refine
EditsCoordinated changes across filesDirect the editing task
IDE agent modeProject-level implementationNavigate, edit, run tasks, retry
Coding AgentDelegated GitHub issueBackground work and a pull request

Coding Agent moves the task out of the IDE interaction and into a GitHub issue workflow. Assign an issue, let the agent work in the background, and review the resulting pull request. It can run scripts and attempt corrections along the way. The newest mode receives the visual emphasis in the workshop, but that does not make it the best choice for every task.

Table compares Completions, Chat/Edits, Agent Mode, and Copilot coding agent by change scope, interaction frequency, inner or outer loop, and developer canvas.
GitHub Copilot code-generation modes, with the coding agent highlighted.
8:328:42
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

8:32 · section reference included

Get the lab into a working environment

The recorded workshop separates organization membership from Copilot access. Participants then visit OctoHOL, signed in with their GitHub handle, and accept the organization invitation. John Peck then provisions Copilot seats; attendees do not need to submit a separate seat request. Harrison repeatedly asks people to report failures, because silence otherwise looks like successful setup.

Harrison shares his GeekTrainer handle and offers the slide deck before directing participants to the agent-sdlc-lab short link displayed in the recording. The repository contract is specific: owner OctoHOL, repository name equal to the participant’s handle. Exercises zero and one are the starting point.

The repeated setup repairs are useful because they distinguish a repository that merely exists from the repository the lab needs:

  1. If organization access appears missing, inspect the owner dropdown in New repository.
  2. Begin at step zero, Set up the environment, rather than creating an empty repository independently.
  3. Open the referenced template in a new tab and select Use a template.
  4. Set the owner to OctoHOL and the name to your handle. Private visibility is acceptable.

The short-link slug is agent-sdlc-lab; SDLC means software development life cycle. In one repair, an attendee has created the wrong repository, and Harrison walks through its Settings deletion controls and confirmation before returning to the template flow. That deletion is a correction to an accidental lab repository, not a routine setup step.

The first exploratory pull request can remain unmerged. Template actions require GitHub sign-in; after creating the Codespace, participants return to their repository, create issues, and begin trying Coding Agent. A loaded Codespace does not necessarily mean chat has connected: the connection is established lazily, so the lab asks participants to send hello. A separate premium-request exhaustion error is referred for help, without a recorded resolution.

Faster participants can advance to exercise two or use the optional exercises. Codespaces is a separate product—a cloud container chosen here to avoid local installation work. During the billing discussion, Harrison estimates Enterprise at roughly $40 per month and Business at roughly $20; the historical Enterprise list price was $39 USD per user per month, with GitHub Enterprise Cloud required. His Business exclusion for Coding Agent belongs to its launch-era Enterprise/Pro+ eligibility, not a permanent plan distinction. The question about third-party-model credit consumption is not directly answered. A later stalled Codespace loads after a refresh.

11:0911:17
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

11:09 · section reference included

Give the issue requirements and the agent an environment

The demonstration delegates game-submission functionality. Its issue lists the requirements rather than relying on the agent to infer what submission should mean. For a more substantial change, Harrison would also include a suggested workflow for building the feature. This is the move from pair programmer to peer programmer: the issue must carry enough context for work to proceed without a developer supplying every next step.

Assignment also requires somewhere to execute. The workflow displayed as Copilot Setup Steps prepares the GitHub Actions environment before agent work, installing the required services and packages. The corresponding configuration identifiers are .github/workflows/copilot-setup-steps.yml and the job ID copilot-setup-steps, as specified in Harrison’s later setup guidance. The distinction matters: a readable workflow name describes its purpose, while the filename and job identifier connect that preparation to the agent’s startup.

Preparation and containment are linked. Harrison describes restricted outbound access and offers two ways to make dependencies available: permit the necessary destinations or install dependencies during setup. His description of blocking every external resource is broader than the launch design’s customizable trusted-destination list. The firewall documentation now also distinguishes agent traffic from setup processes and MCP traffic. The operational lesson is to provision the environment deliberately rather than assume the agent can fetch anything it needs.

The remaining boundaries separate proposed changes from accepted changes:

  • Ephemeral execution: GitHub Actions creates an environment for the work and tears it down afterward.
  • Branch-limited writes: the agent changes its own branch rather than writing directly into the base branch.
  • Draft pull request: the work is already a pull request, but remains in draft while it is being developed.
  • Workflow approval: a human selects Approve workflow runs before the pull request’s workflows can run, including the project’s security and test checks.
  • Independent approval: under the launch-era rule discussed here, the person who assigned the issue cannot supply the approval that satisfies required review. They can still inspect and comment on the work.

An attendee asks how that last rule works for a sole programmer. The session does not resolve the exception.

30:3530:52
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

30:35 · section reference included

Continue the work through the pull request

To extend the game feature, Harrison adds a comment requesting an endpoint to search games by name. The location matters: this is a comment on the pull request. An eyes reaction appears as Copilot resumes work, and View session reveals a new session continuing from the previous implementation. The demonstration establishes that the follow-up has started; it does not show a completed, validated search endpoint. Asked whether this runs on self-hosted runners, Harrison answers no for the version being demonstrated and deliberately avoids promising future support.

The next integration question is more ambitious: can a GitHub App installed by customers generate rich prompts and cause Copilot to work on their repositories? Harrison initially rejects treating Copilot as an open API for arbitrary customer codebases. He suggests exposing an MCP server that customers invoke through their own Copilot instead. When the question narrows to whether an installed app’s permissions permit assigning the customer’s Copilot on their behalf, he says he does not know and offers a follow-up. That narrower authorization question remains open.

When generated work is wrong, the repair depends on how far it has diverged:

  • A useful implementation with a misunderstanding: add a pull-request comment clarifying the desired behavior.
  • A fundamentally wrong direction: unassign Copilot, revise the issue, and reassign it to start again.
  • A recurring failure: investigate what the agent did not understand about the request or its environment.

Harrison repeatedly returns to missing context as his diagnostic starting point. The practical question is what information would have changed the agent’s decision, rather than how many times to repeat the same request.

36:1136:22
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

36:11 · section reference included

Put durable context in the repository

Repository instructions make the project’s expectations available beyond one issue or conversation. Harrison opens copilot-instructions.md, describing it as guidance used by Coding Agent and IDE chat. The visible Tailspin Toys file starts with a project overview, Code Standards, and Required Before Each Commit. As he scrolls, it also supplies language guidance, implementation specifics, and a map of the repository. These answer the questions a new contributor would otherwise have to reconstruct from scattered files.

VS Code displays copilot-instructions.md with a Tailspin Toys project overview, Code Standards, and Required Before Each Commit headings.
Repository guidance in copilot-instructions.md.

Model Context Protocol (MCP) adds a different source of context. Copilot can inspect commands exposed by configured servers and select one to obtain external information or perform an operation. This extends what it can use beyond its training knowledge and the code already available to it. Harrison suggests a search service for a large repository as one application: expose a way to find relevant code and information rather than expecting the model to discover everything unaided. The lab includes an MCP exercise.

42:0742:44
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

42:07 · section reference included

Apply repeatable patterns to the right files

Many coding tasks repeat a local pattern: another Flask endpoint, another React component, another test. Specialized instruction files can describe that pattern and point to an existing implementation or test as the prototype. They can be attached manually to chat, or selected automatically through an applyTo header. Harrison’s test example targets files in the server test folder whose names begin with test_; other examples target JSX, TSX, or .svelte files. He describes this scoped feature as Chat-only in the workshop’s version.

For a repository using server/tests/, the same selection mechanism can be expressed in .github/instructions/server-tests.instructions.md:

markdown

---
applyTo: "server/tests/test_*.py"
---

Follow the existing server tests when adding or changing tests.
Use the established fixtures and assertion style.
Keep new endpoint tests consistent with the existing game endpoint tests.

The complete extension is *.instructions.md; repository-wide guidance conventionally lives in .github/copilot-instructions.md. The VS Code custom-instructions guide documents these file forms. The pattern selects where the guidance applies, while the body tells Copilot what conventions to preserve.

Treat these files as maintained repository artifacts. Harrison compares the investment to writing a small automation script whose benefits accumulate with repeated use. An audience contribution recommends starting minimally and updating the guidance when mistakes reveal a missing rule. Harrison says instruction files are his main aid for getting consistent behavior during probabilistic live demonstrations. Team leads also have a role: record dependency choices, implementation patterns, and architectural decisions when the team makes them, so the instructions reflect the actual project.

An issue can repeat a requirement already present in an instruction file. Harrison says that repetition was unnecessary in his example, but intended to reinforce the requirement. More consequential is contradiction: the issue, repository guidance, specialized instructions, and referenced files should describe a consistent approach. His warning that there is no last-write rule should not be generalized into a current absence of instruction priority: VS Code now distinguishes priority between instruction types from the unspecified order in which instruction files are combined. Consistent guidance avoids depending on either mechanism to reconcile conflicting requirements.

45:0945:18
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

45:09 · section reference included

Keep the review process and take over when useful

MCP configuration raises an environment distinction. In the workshop, Harrison contrasts local VS Code connectivity with Coding Agent and says the remote agent needs its firewall opened for an MCP server. That answer belongs to the demonstrated setup; the firewall scope described earlier has since been documented differently. For authentication configuration, he points to repository settings and variables as a way to centralize setup, while initially qualifying his suggestion of organization-level configuration.

AI-generated code still goes through the normal DevOps flow. Developers already combine remembered code, examples, and copied snippets that need adaptation. The source of a proposed change does not remove the need for manual review, linters, security scans, or unit tests. Those safeguards remain the route by which a proposed implementation becomes acceptable repository code.

Scope is another reason to choose the workload deliberately. Asking an agent to update one file does not guarantee it will leave every other file alone. It may decide that additional changes are necessary. Harrison recommends Edit or Ask mode when direct developer steering is more appropriate than allowing the agent to determine the work. The prompt expresses the requested scope; reviewing the diff establishes what actually changed.

If the result is almost right and only one file needs attention, another agent session may be unnecessary. The output is an ordinary Git branch. Clone the repository if needed, check out that branch, and edit it manually—or continue with Copilot locally. From an existing clone, the handoff can be as small as:

bash

git fetch origin
read -r -p "Agent branch name: " agent_branch
git checkout "$agent_branch"

Harrison reaches for git checkout in the demonstration because it restores direct control without discarding the useful work already on the branch.

51:0351:11
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

51:03 · section reference included

Remote MCP access carries credentials and authority

Returning to the MCP architecture diagram, an attendee asks whether a remote agent can connect to a remote server and how long that access lasts. Harrison answers that the connection can act on the user’s behalf, but its lifetime depends on the configured credentials. For the GitHub MCP server, a token with an expiration is his concrete example. He does not describe Copilot as automatically signing the user out after a fixed interval.

Architecture diagram connects an IDE host and GitHub Copilot client to MCP servers, local data sources, and a remote server linked to an internet service.
MCP connections between Copilot, local servers, and remote services.

The direction of initiation also matters. In this interaction, the MCP server does not independently start the agent’s task; the user expresses an intent, and Copilot chooses whether to invoke a server. Harrison describes an interactive confirmation button, though he does not demonstrate it in this setup. That should not be transferred to cloud-agent behavior: the repository MCP configuration guide now says configured tools can run without per-use approval. Vet a server as a service that may access information and exercise the user’s authority. A renewed question about creating issues for another company and assigning its internal Copilot is deferred to an offline discussion.

56:1656:20
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

56:16 · section reference included

Separate issue environments, compose shared guidance

For the GitHub-hosted Coding Agent shown here, the internal model is not exposed to users. Harrison says GitHub selects it for the particular workload; possible future model visibility or selection is speculation in this discussion. Multiple delegated issues do not imply one shared workspace: each assignment receives its own environment. His example of assigning a hundred issues illustrates that arrangement, rather than establishing a tested concurrency limit.

Shared guidance need not become one enormous file. Harrison shows an instruction file referencing another instruction file, and explains that applyTo can select folders. Teams can therefore separate specialized guidance and connect it where needed. This demonstrates composition and file selection, not the deterministic folder-override hierarchy proposed in the audience question.

For shared MCP setup, Harrison describes organization- or repository-level server lists for Coding Agent, and a repository mcp.json file for VS Code. The server configuration can be shared, but each user still supplies credentials because operations act on that user’s behalf. A closing correction narrows the capability claim: the participant addressed as Harold says Coding Agent supports tools only at that time, while MCP resources have just arrived in VS Code. Harrison accepts the correction. Configuring the same server therefore does not imply identical capabilities across the two clients.

The final question asks about MCP namespace collisions. Harrison answers the related selection problem: Copilot must decide which server to call and when. If a particular scenario should use a particular server, encode that routing guidance in the instructions. He gives Azure MCP as an example whose installation prompts VS Code users to add instruction guidance. The session does not establish collision-resolution semantics, but it ends with a concrete maintenance action: when tool selection misses the intended behavior, add the missing context to the repository guidance that will shape the next request.

58:3158:40
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

58:31 · section reference included

Resources

Updates since the talk

Read the complete timestamped transcript
  1. 0:00

    [upbeat music] All right.

  2. 0:15

    Well, let's, uh, let's get, uh, get started here. I did see a couple people, uh, walk in at, uh, kind of the last minute. Um, if you haven't already, uh, read the slide there, uh, you'll notice the slide has the, uh, first bit of instructions.

  3. 0:26

    Uh, send an email, that email address that you see right up there, so [REDACTED:email_address]. And then just as the subject, just put in your GitHub handle. One quick note about the GitHub handle.

  4. 0:38

    If you are using enterprise-managed users, uh, this is gonna need to be a personal, um, GitHub handle. So that email address, and then your GitHub handle as the, uh, as the subject.

  5. 0:51

    Again, not... But you know what to do. So go ahead and, uh, and do that. And, uh, while everybody's, uh, getting settled in, uh, let's go ahead and get rocking and rolling.

  6. 1:02

    So, uh, my name is Christopher Harrison. Uh, the gentleman over there is, uh, John Peck. And, uh, we are both, uh, enterprise advocates at, uh, GitHub. Uh, obviously doing a whole lot of, uh, developer relation stuff, so basically talking to customers and, uh, doing events like this, primarily focused in on developer experience in this little thing called

  7. 1:22

    GitHub Copilot. So this is going to hopefully be a hands-on lab. Now, I am going to put out a couple of real quick caveats because we had the exact same lab this morning, and we ran into a couple of challenges, the biggest of which with the Wi-Fi network.

  8. 1:39

    That because what we're going to be doing is going to rely quite heavily on the network, we're going to try, okay? I'm gonna repeat that one more time. We are going to try.

  9. 1:48

    We are going to give it our best effort. If it works, wonderful. And if it doesn't work, here's what we're gonna do instead, is you will still have a day or two to be able to complete the lab, and you can go ahead and complete that on your own time.

  10. 2:04

    And what I will do instead is I will start doing some demos. I will, um, answer a whole bunch of questions. Um, the morning group had a whole bunch of questions, and something tells me that this group will also have a whole bunch of questions.

  11. 2:16

    Been doing enough Copilot talks, there always seems to be an awful lot of questions. More than happy to talk through all of that. So we are going to try our absolute best.

  12. 2:25

    Hopefully, everything will work, and if it doesn't work, we've got a nice little fallback. And I wanna make sure again that I highlight you will have access to the lab, um, for a couple of days after this event, so that way you could go out and do it on, uh, on your own time from, uh, from there.

  13. 2:40

    So one last time because I did see a couple of people that just walked in, notice the instructions on the slide. Please send an email,

  14. 2:48

    [REDACTED:email_address]. The subject, just put in your GitHub handle again. Make sure that it's your personal or a non-enterprise managed user account. If you don't know what enterprise managed users are, don't worry about it 'cause then you probably don't have one.

  15. 3:01

    If you have one, y- you'll know it. See a couple of knowing nods there. Okay. Without any further delay, let's go ahead and talk a little bit about GitHub Copilot.

  16. 3:11

    So John's gonna be working in the background here. Once, um, um, he is done working, I'm then gonna go ahead and, uh, make an introduction and get everybody pointed at the, uh, at the lab.

  17. 3:22

    But I wanna get started by talking about something that's very, very important when we're working with GitHub Copilot, and that is context. That you'll notice that we have a tagline for GitHub Copilot called your AI pair programmer.

  18. 3:38

    Now, not only is it wonderful marketing, it kind of is, um, but it's also a fantastic description of how best to think about GitHub Copilot, that you wanna think about it as an AI pair programmer.

  19. 3:51

    And the example that I always give, the analogy that I always give is my partner and I woke up the other day, and she says to me, "Hey, I wanna go to brunch."

  20. 3:58

    Fantastic. Who doesn't love brunch? And so I recommend that a spot, and she looks at me and says, "You know, here's the thing. Been there an awful lot lately.

  21. 4:06

    I wanna go somewhere new." Okay, fantastic. And then I recommended another spot. And then she says, "You know, now that I'm thinking about it, really kinda craving waffles." Spectacular.

  22. 4:15

    Who doesn't love waffles? And then I recommended another spot. Now, that's a very normal back and forth. That what happened was is a request was made. I had some level of context, and I gave back a perfectly valid response.

  23. 4:28

    And then some more context was provided, and then I gave yet another response, and that's a very common back and forth. And that may have been context that she had at the very beginning and maybe just hadn't yet shared, and it might also have been context that she sort of discovered as we were talking.

  24. 4:43

    Again, all of this is very, very normal, and it's how we think about when we're talking about with other people, when we're talking with human pair programmers, and then also in turn with that AI pair programmer, that context is key.

  25. 4:58

    Now, when we're talking about context, a lot of times we really focus in on the prompt when we're talking about context and AI. That I see an awful lot, especially with new developers to, uh, to Copilot, is they're really worried about, like, "Okay, well, how do I craft a prompt?"

  26. 5:16

    And don't get me wrong, prompt crafting is an important skill, but context goes beyond prompt crafting. Because unlike a lot of other tools, which are maybe going to run all of your code through different parsers or maybe even build your code or potentially even, like, run your code, Copilot, again, behaves like an AI pair programmer.

  27. 5:38

    It's going to be reading your code, just as if I brought somebody else new onto the team, and they're going to start reading your code. So making sure that that code is readable becomes very important.

  28. 5:51

    So if you have good function names, good variable names, if your code is well-structured, Copilot's gonna be able to navigate that pretty well.

  29. 6:01

    And if you're using a lot of single-letter variables, if you're using a lot of abbreviations, Copilot's gonna come along and it's going to struggle with that, just again, as another pair programmer would.

  30. 6:13

    In addition, comments. Now, we all know the impor- the importance of commenting code, and there is a strong part of me that has this feeling that good code doesn't need comments.

  31. 6:28

    But here's the thing, is having a line or two of comments does help you make your code that much more readable.

  32. 6:36

    And so even if it might be superfluous, if it's gonna make life easier, maybe just go ahead and add that in, 'cause it's not going to, say, slow down your application.

  33. 6:45

    So having comments describing what it is that you're gonna be doing, how it is that you're gonna be doing it, is really going to help things out. And then finally, last but not least, is your project structure, that having a good navigable project structure is also going to help Copilot.

  34. 7:03

    Now, the real takeaway that I want you to get out of all of this is this is sort of like just good code 101, that having good code is really going to help out an awful lot with context.

  35. 7:13

    I'm gonna come back to, to questions a little bit later.

  36. 7:17

    Okay. So how do we then help Copilot help us? And so number one, context, we talked about that. Number two, the intent. Make sure that you're clear about the intent.

  37. 7:25

    What is it that you are trying to do? And be clear about that intent.

  38. 7:32

    Now, one of the things that I see an awful lot of developers do, especially if they've maybe worked with, like, older chatbots, is when they start sending those initial prompts, that they're very terse because they're used to dealing with older chatbots that maybe weren't really good at processing, uh, natural language, and so it basically became like using

  39. 7:53

    command lines. That's not what this is built for. So be clear. If you want something to be done a particular way, and kind of getting into the specificity aspect here, tell Copilot, or as I like to say, don't be passive-aggressive with Copilot.

  40. 8:08

    Now, sometimes I'll see a new developer, they'll go in, they'll, they'll, they'll give, like, a very short prompt, and then they'll go, "Well, wait a minute, why didn't Copilot figure this part out?"

  41. 8:16

    Well, did you know that part? "Well, yeah." Did you tell Copilot? "Well, no." Okay, well, tell Copilot. Like, if there's an important piece of information that you need Copilot to consider, go ahead and make sure that you tell Copilot that.

  42. 8:32

    Okay. Now, Copilot supports a handful of different workloads. Um, you'll notice the one on the far end, Copilot Coding Agent, I'll get to that one in a minute. It's all bright and sparkly and so forth.

  43. 8:42

    Um, that's not because that one's, um, necessarily best. Um, it's just because it's the newest, and as we all know, we need to just highlight in sparkles the, um, the, the, the newest item.

  44. 8:53

    So, um, first up, let's talk about code completions. So code completion is sort of the original version, if you will, of GitHub Copilot. This is where I'm going in, I'm writing code, and then Copilot will suggest the next line, it will suggest the next function, and it will suggest the next class.

  45. 9:09

    And this is wonderful. If you're in the zone, you know what you're doing, and you're typing away, fantastic, and Copilot will be able to support you right there. Next up is chat.

  46. 9:17

    And originally, this was single shot, that I go in, I ask a question, and I get a response back. So maybe it can generate a single file for me.

  47. 9:25

    But the problem with that is we think about even the simplest of updates. Like, if I go to update a webpage, I'm gonna be updating an HTML, JavaScript, and a CSS file.

  48. 9:34

    That's multiple files. And so this is where edits comes into play. And with edits, Copilot is now able to edit across multiple files. And then we take that to the next level with agent mode.

  49. 9:47

    And with agent mode, now again, still inside my IDE, what Copilot's gonna be able to do is navigate your project, figure out what needs to be done, and then start building code.

  50. 9:59

    And it's able to work iteratively, and it's able to run external tasks like, for example, running your unit tests. And if it detects, hey, there's an error, it's even able to self-heal.

  51. 10:11

    I'm gonna sneeze. [sneezes]

  52. 10:14

    Bless you.

  53. 10:17

    Thank you. Okay. I, I was waiting for the second one. I usually sneeze in twos. It'll, it'll, it'll show up in a minute here. Um, okay. Um, and then finally, we get into Coding Agent, and Coding Agent is different because this is going to be done inside of github.com.

  54. 10:36

    So I'll have an issue on github.com, and I can then assign that to Coding Agent, and Coding Agent will then work in the background,

  55. 10:44

    figure out what needs to be done, be able to, again, run scripts, be able to self-heal, and then eventually create a, a pull request that you can then review and eventually merge into your code base.

  56. 10:58

    And so this is what we're going to be exploring. I'm not gonna worry too much about these two slides here. There we go. This is what we're gonna be exploring in this lab.

  57. 11:08

    John, how we doing?

  58. 11:09

    We are doing splendid. I have two people left to add before, and then I will need about three minutes to add them all to Copilot.

  59. 11:17

    Okay. But we can at least go in and start accepting invitations in the meantime.

  60. 11:20

    You can go in and start accepting invitations. One quick note, um, Michael Pope, I don't believe I have your correct handle, so if you could send me a new one, that would be great.

  61. 11:31

    Okay. And there was one person who walked in just a minute ago, so we'll need to get that sorted as well, but we can get there in a minute.

  62. 11:36

    Okay. So, um, first part to the lab. Navigate to the URL that you see right there. So [REDACTED:url]- uh, HOL, hands onOnlab. So O-C-T-O-H-O-L, Hotel Oscar Lima.

  63. 11:55

    And then at the very top... And by the way, I'm assuming that you're logged into GitHub with the handle that you sent over. And then up towards the very top, you should see Accept Invitation, and then go ahead and select Accept Invitation

  64. 12:10

    Now, here's the most important part about today.

  65. 12:15

    Silence means, hey, everything is fantastic. So if you're not seeing it, please let me know.

  66. 12:25

    Not responding to this.

  67. 12:27

    Um.

  68. 12:28

    Oh, I'm sorry. Yeah. Whoopsie.

  69. 12:30

    Okay.

  70. 12:33

    Yeah. Okay, cool.

  71. 12:35

    And then accept the invitation right at the very top. Okay. Yep.

  72. 12:41

    I can see.

  73. 12:45

    Did you send the email?

  74. 12:47

    No, I didn't get it.

  75. 12:48

    Okay. All right. Um, I'll come back in a second. Um-

  76. 12:52

    This box, ask Christy.

  77. 12:56

    Hey, John?

  78. 12:57

    Yeah.

  79. 12:57

    Do they need to ask for their Copilot seat?

  80. 13:00

    Um, they don't need to explicitly ask. I am just going through-

  81. 13:04

    Okay

  82. 13:04

    ... the process right now of adding those in.

  83. 13:07

    Okay. Perfect.

  84. 13:08

    So you don't have the people who forgot to click the button to ask. Can you go back and do that again?

  85. 13:12

    It doesn't matter.

  86. 13:13

    Okay.

  87. 13:13

    Yeah, he's, he's gonna be adding you in. Okay. Now, for anybody who did not send the email address, um, please go ahead and send an email to that address, and then with your GitHub handle.

  88. 13:27

    I'm gonna leave that up for about another 15 seconds here, because I'm trying to keep things moving for everybody as quick as I best can here.

  89. 13:40

    What's your handle?

  90. 13:41

    Um, the, uh, I can share the, uh, share the slide deck. Um, my handle is, uh, [REDACTED:username], and you can, um, basically find me on everywhere with, uh, with that, including GitHub.

  91. 13:52

    [REDACTED:username]?

  92. 13:53

    [REDACTED:username]. G-E-E-K Trainer.

  93. 13:57

    And GitHub?

  94. 13:58

    Um, uh, GitHub, at GitHub. Okay. Now then,

  95. 14:08

    let me get everybody rolling here. So, after you have accepted the invitation... Um, who has not yet accepted the invitation?

  96. 14:18

    I don't know. The email didn't go through or something. I feel like I've sent it. It's in my sent.

  97. 14:24

    Okay. And then what happened when you went to [REDACTED:username]? And by the way-

  98. 14:27

    I, I-

  99. 14:28

    ... I, I wanna make sure that I highlight something. You'll, you'll notice that more people raised hands. Silence means everything is fantastic. So if something is not working, please let me know.

  100. 14:37

    Now, for people who, um, uh, everything is working fantastic, then here's what you can do, is go to that URL.

  101. 14:46

    Actually going to modify this slide real quick. Is...

  102. 14:53

    What do you see? Things like short hold.

  103. 15:07

    And if we could get phones to a silent or a vibrate, that would be wonderful.

  104. 15:12

    Okay. All right. So, um, to get started with the lab, what you're gonna do, navigate to that URL that you see right there. So gh.io/agent-sdlc-lab.

  105. 15:29

    When you get to the part to create your repository,

  106. 15:33

    the owner is going to be [REDACTED:username], and then the name is going to be your handle, again, replacing your...

  107. 15:43

    See where that's going. And go ahead and start working on exercises zero and exercises one, and I will let you have at it. And then I'm gonna start going around and helping people get unstuck.

  108. 15:58

    Yeah, same issue as him. I sent the email, but I don't have a accepted invite.

  109. 16:03

    Um, uh, okay. Um, hey, John?

  110. 16:07

    Yeah.

  111. 16:08

    When, uh, when you have a minute?

  112. 16:11

    Absolutely.

  113. 16:13

    Okay.

  114. 16:13

    I've got two people in the hall. Where you at?

  115. 16:14

    Uh, right over here.

  116. 16:16

    All right. I'll be right over.

  117. 16:18

    Okay.

  118. 16:20

    I can't find the email.

  119. 16:22

    Did you send the email?

  120. 16:23

    Yes.

  121. 16:23

    Okay. Um, we'll go ahead and get John over to help you out in a minute.

  122. 16:28

    Yes?

  123. 16:31

    Sent email like this, and I have an email-

  124. 16:37

    Okay

  125. 16:37

    ... and, um, and I, I can't see any-

  126. 16:42

    Did, um... Was it maybe there earlier? Do me a favor. Um, hit plus right at the top here.

  127. 16:48

    Okay.

  128. 16:48

    Um, hit new repository. Just... Let's just test something real quick.

  129. 16:55

    Um, hit the, um, dropdown right here. Um, okay. We'll go ahead and get J- John over here in just a minute. Sorry. Yeah. Okay.

  130. 17:04

    All right. Now then, remember, silence means everything is hey, e- everything is fantastic. So if something is not working, please raise your hand. Otherwise, we are never going to know.

  131. 17:21

    What's this thing repository?

  132. 17:23

    Oh, okay. So note the owner. So owner is gonna be [REDACTED:username]. Nope.

  133. 17:30

    Oh.

  134. 17:30

    So notice the slide.

  135. 17:32

    Okay, sorry.

  136. 17:32

    Yep.

  137. 17:33

    I'll make it-

  138. 17:33

    And then the repository name is gonna be your handle. There you go. Yep. Hey.

  139. 17:38

    I'm in the same boat. I didn't get the asset.

  140. 17:40

    Um, okay, then hold on for just a minute. John will be over.

  141. 17:44

    All right.

  142. 17:44

    Hi.

  143. 17:44

    It's blank. Is it okay?

  144. 17:47

    Oh, oh, okay. So here's what we need to do. Hi. [laughs]

  145. 17:54

    Um, yep. Um, nope. Um, so yep. Uh, perfect. So go ahead and hit Enter.

  146. 18:06

    And so go ahead and scroll down. And you see the step zero here, set up the environment? Let's go ahead and just hit that And then now we're gonna follow the instructions from here.

  147. 18:14

    So you'll notice that you're gonna wanna open up the, um, that URL in a new tab, and then you're going to select, uh, use a template, and then create from there.

  148. 18:24

    Thank you. You're welcome. Just... All right. Just go directly to github.com/.

  149. 18:44

    All right. How's everybody doing? I know there's a couple of people that John's going around to. Yeah. Can we get a copy of the definition once we open the OctoHub?

  150. 18:55

    Yes. Yep. Beautiful. Uh, okay good. And then... Okay. Uh, who else had a... Something added? All right. Yeah, I sent the email.

  151. 19:10

    Just sent it. Oh, okay, great. I can't see- Doesn't matter

  152. 19:14

    ... but I'll do that. [laughs] Living on the edge. [laughs]

  153. 19:19

    I am now. Yeah. What is the HTML? Nope. I, um... Here's what you're gonna do is, um... So, uh, go to... Okay. So go to, um, docs. [inaudible]

  154. 19:37

    And then just scroll on down and, um, go to step zero.

  155. 19:42

    And then now go ahead and follow right along with what this says here.

  156. 19:48

    Sure. Yeah. [inaudible] Oh, okay. So, nope. So, um, we, um, we need to go to the first part here. So navigate to that URL here. [inaudible]

  157. 20:05

    So go to... Both of you, Daddy? Yep. So, um, real quick, as people are getting started, I want everybody to kind of notice the, the steps on the slide here.

  158. 20:16

    So step one is go here. What you're gonna find there is a set of instructions for the hands-on lab. And then in step zero, it's going to have you then create your repository.

  159. 20:28

    When you get to that step, you're gonna set the owner to [REDACTED:username] and then the name to your, your handle. So start here, start working through the lab, and then you're going to go in and, um, uh, and set that up.

  160. 20:44

    Okay. So let's go into step zero. Yep. And then now you'll notice it's gonna have you, um, open that up in a new tab. It's gonna have you create from- Create the- Exactly.

  161. 20:55

    Yep. And then you're all set. Don't sit down yet. [laughs]

  162. 21:37

    Yeah, so start at zero. Okay. So here's what we need to do is, um, um... Let's go ahead and, um, let's just, um, go to, um...

  163. 21:52

    Nope. Um, you see the, uh, the URL up at the very top there, the gh.io? Yeah. Okay. Um, nope. It looked like we, um, uh, didn't, uh, uh... It should be, um, SDLC.

  164. 22:04

    So let's go ahead and just try that again. So type in... Type... Nope, nope. Stop. Yep, there we go. So gh.io,

  165. 22:11

    um, slash agent-sdlc. Nope, nope. Here we have an SL. We want SDLC. Yep, dash lab. Enter.

  166. 22:25

    Software development life cycle. There we go. And so now go ahead and scroll on down. And then you'll notice there, step zero. Let's go ahead and go right into step zero.

  167. 22:36

    And then now it's gonna have you create your repository. So if we read through, we'll go to step one. We'll open that URL up in a brand-new tab and then follow the instructions from there.

  168. 22:54

    Okay. So, um- Right here? Yep. Open this one. Nope. Oh, create a new- Create a new repository. [inaudible]

  169. 23:04

    Yep. Nope. Put it into... Right where it says up on the slide, hit the dropdown, [REDACTED:username], and then the repository name will be your handle.

  170. 23:16

    Private? Uh, you can leave it as private. That's fine.

  171. 23:29

    Okay. All right, you're welcome.

  172. 23:48

    And then you'll see this. Yeah. I created a brand new repo. Mm. How do I delete it? Can I delete it? Yeah, you can just go ahead and delete that one.

  173. 24:00

    And then... Sorry. Okay, so all you have to do is go to settings.

  174. 24:04

    Scroll all the way down. All the way. Yep, there we go. And then, um, hit that. Oh. And then you're gonna hit delete. And then you're gonna hit delete. [laughs]

  175. 24:13

    And you're going to, um... You can actually just copy and paste it. Um, and then, uh, yeah. Okay. Welcome.

  176. 24:21

    Sure.

  177. 24:21

    Yo.

  178. 24:22

    Um, there's no explicit instructions when to merge the PR after initiating-

  179. 24:27

    Correct

  180. 24:27

    ... so leave it unmerged?

  181. 24:29

    Yeah, we can leave that unmerged.

  182. 24:30

    All right.

  183. 24:31

    Yep, yeah, yeah. We're just going in and, and kind of exploring it. There's also, um...

  184. 24:39

    Yeah, I'll get to that in a minute. Ask me that question again in, in five minutes. I don't wanna interrupt everybody, but it's, there's an important thing there, so ask me that question again in five minutes.

  185. 24:51

    Yeah. [background chatter]

  186. 24:55

    I opened that specific lab, but I don't see new stamp or anything. Maybe because I'm not signed in, or?

  187. 25:01

    Oh yeah, you need to be signed in. [laughs] There you go. [laughs]

  188. 25:08

    Okay. [laughs] [background chatter]

  189. 25:13

    This is good.

  190. 25:15

    Yeah.

  191. 25:16

    I've created the Codespaces-

  192. 25:17

    Perfect

  193. 25:18

    ... looks good.

  194. 25:18

    That hasn't resolved in a while.

  195. 25:20

    Uh, before I just created-

  196. 25:21

    Yep

  197. 25:21

    ... this purpose. Nothing else, right?

  198. 25:23

    Correct.

  199. 25:24

    So the network here is-

  200. 25:24

    Yep. Yeah. And, and just kinda keep on following on with the, uh, with the lab from there. What this is gonna have you do in a minute here is it's gonna have you open up, um, the, your repository again, and then you're gonna create a couple of issues and start playing around with coding agent.

  201. 25:38

    Yep. Um, there might be some Codespaces where the actual Git connection hasn't established yet 'cause that happens lazy after the initial load. Yep. Yeah. Well, and that's, uh, the, the lab actually says to send a, a hello, um, to like, um, um, kinda wake it up.

  202. 25:54

    Oh, okay. Yeah. Great. We, we, we had planned for that. This means I can hit all of them. I know.

  203. 25:59

    Keep rolling. [laughs] Yeah.

  204. 26:05

    I'm on step one.

  205. 26:05

    Fantastic.

  206. 26:06

    So I ran into something I can't resolve. I run out of premium requests.

  207. 26:11

    Oh. Hey, John?

  208. 26:12

    Sir. I'll bring a laptop. You can take a laptop. [laughs] There's two classes, right? There's phone problems. [laughs]

  209. 26:25

    He's having the premium request error.

  210. 26:27

    Ooh, fun, fun, fun. Okay. Um, so which path is specifically added?

  211. 26:34

    I made a pull request against your instructions repo. See you can type well.

  212. 26:40

    Oh, thank you. [laughs] I type really, really fast. I don't type, I type accurately, but I type really, really fast.

  213. 26:49

    There you go.

  214. 26:49

    See, here's the thing about being a developer. You don't have to spell correctly. You just have to spell consistently.

  215. 26:54

    Yeah, yeah.

  216. 26:55

    Yeah.

  217. 26:55

    And, uh, you can rely on the rest of us to focus.

  218. 26:57

    Yeah. [laughs] Yes.

  219. 27:15

    Yeah, actually, if you're, y- you know, if you're like in a, in a zone and you already like finish out step one and wanna start getting into step two, you can go ahead and do that.

  220. 27:23

    You'll also notice that all of the steps actually include like little optional exercises. So if you are, um, you know, uh, somebody who kind of like just moves really, really fast, um, there's other stuff to do in, in, in that lab.

  221. 27:36

    So yeah, so go ahead and, um, kinda keep working through exercise one. Um, I'm gonna do, uh, an overview of exercise one in like just a couple of minutes here. [background chatter]

  222. 28:44

    For Codespaces, no. So Codespaces is a separate product. The reason that we're using Codespaces is it's effectively a container in the cloud, and so it just eliminates setup. So like it's wonderful for just development in general, but especially something like this, having people install software, forget it.

  223. 28:58

    So yeah. Christopher. That's okay.

  224. 29:02

    Um, I also have the same question as John. How much does it cost to get these tri-party modes? Does it come out of my credits or not?

  225. 29:09

    So Copilot, uh, for Enterprise, which is gonna be like everything that we're using, is $39.99, um, a month, so $40 a month. Yeah. Um, uh, there's also a Business tier which does not, um...

  226. 29:20

    It, there's a few different features that it doesn't include, um, but one of the biggest is gonna be, um, access to, uh, to coding agent. Um, and that's, uh, $20 a month, or again, $19.99 or whatever.

  227. 29:31

    That's for the enterprise.

  228. 29:33

    Uh, yeah. Yep. Yeah. Yep. Yeah. Yeah.

  229. 29:37

    Yeah, I'm stuck on setting up your Codespace.

  230. 29:40

    Um, hit refresh real quick.

  231. 29:45

    It's on?

  232. 29:46

    Yeah.

  233. 29:47

    I know it used to work. I don't know if the model works for sure.

  234. 29:50

    Um, do you still have...

  235. 29:53

    Oh, oh, there it goes.

  236. 29:55

    There you go.

  237. 29:56

    Magic touch. Thank you.

  238. 30:01

    All right. So, um, here's what I'm gonna do. I know that people are still working. Um, periodically, I'm just gonna come up here. I'm gonna kinda talk and highlight a little bit about a feature.

  239. 30:11

    So this is basically, um, a real quick overview of what it is that you're doing in exercise, uh, one. You can have a seat. Make yourself comfortable. [laughs]

  240. 30:23

    Pretend like you're an adult. [laughs] Do I look like an adult? No. [laughs]

  241. 30:31

    Proof that you work with somebody for way too long. Um, [laughs]

  242. 30:35

    no. So, um, so let's talk a little bit about, um, GitHub Copilot Coding Agent. So the whole goal of Coding Agent is to have a, um, an AI peer programmer, that what I can do is I can assign it a Copilot issue...

  243. 30:52

    or, uh, sorry, a GitHub issue, and let Copilot begin work on it. Now, the first big thing about assigning an issue to Copilot, remember that whole speech we did about context, waffles, all that good stuff?

  244. 31:05

    Yeah, yeah, yeah. So context. Context is key. And so if we take a look at the issue that we created, we went ahead and gave it a pretty decent amount of detail about what it was that we wanted to have accomplished.

  245. 31:19

    So you'll notice that we're gonna be creating a, uh, functionality to allow for submission of games. So here's all of our requirements, and kinda list them all out. And if this was gonna be something more robust, I might have even dropped a, um, a potential workflow that I wanted it to kinda step through as it was building

  246. 31:38

    out all of the project. Again, don't be passive-aggressive with Copilot, that if there's some piece of information you want it to see and understand, absolutely 100% tell it about it.

  247. 31:49

    Now, the next thing is after you assign it, it needs an environment in which to work. And there is an, uh... there's a workflow that you can create, and it's called, he said, speaking slowly to stall, um, Copilot Setup Steps.

  248. 32:09

    And so when Copilot goes to do its work, it's going to be running inside of GitHub Actions, and it's going to, step zero, run everything that it sees inside this workflow.

  249. 32:23

    And if you look through this workflow, what you're gonna notice, a whole bunch of steps to install different services and packages and so forth. And that's now going to be the environment in which it's able to do its thing.

  250. 32:35

    Now, that also leads me to another very big point, which is about security. Because here's what I'm gonna do, is I'm gonna take an AI agent,

  251. 32:45

    I'm gonna assign it a task, and it's now able to go off and start doing things. And I wanna make sure that everything it's gonna be doing is going to be completely contained.

  252. 32:56

    So the first big thing about working with Coding Agent is that it does not have access to the internet.

  253. 33:09

    That by default, it is a firewall that's going to block it from any external resource. Now, you do have an ability to open up the firewall if you do want it to be able to access external resources, but by default it won't.

  254. 33:23

    And that includes, by the way, installing frameworks and libraries.

  255. 33:28

    So the only way it's going to have access to frameworks and libraries is either, A, you open up holes in the firewall, or B,

  256. 33:34

    you set this up to install all the necessary libraries. Number two, this is running inside of GitHub Actions, and if you're not already familiar with GitHub Actions, one great thing about it is that it's going to launch an ephemeral space.

  257. 33:49

    So it's going to set up a space, it's gonna do its work inside of there, and then it's going to collapse down from there.

  258. 33:56

    So it will not have access to any other resources besides what's inside of there. Number three, it does not have write access to your repository, save for the branch that it creates.

  259. 34:08

    So it cannot modify anything inside your code base. The only thing it's able to modify is just its branch. Number four, that branch, you're gonna notice, will not actually create a full pull request.

  260. 34:21

    It's going to leave that in draft form, not become an actual pull request unless you come along and say, "Yes, I approve this." Number five, along those lines, if you are a good developer shop and you have different requirements, things like security checks, things like unit tests, end-to-end tests, regression tests, all of which need to pass, what

  261. 34:44

    you're also gonna notice is that on this pull request, none of that can actually run...

  262. 34:52

    Where's that button? Right there. Until you click that button that says Approve workflow runs. So again, trying to keep it completely self-contained. And then finally, last but not least, and this was a question that was asked earlier about reviewing it and then merging it in.

  263. 35:07

    When it comes to the current version of Coding Agent, there is a restriction, and this is by design. Um, remember again, Coding Agent is brand new, so this can always change.

  264. 35:18

    But this is by design, that if you assign an issue to Coding Agent, you are not allowed to then review its work. So you need somebody else to review its work.

  265. 35:28

    So basically, it's sort of like in most organizations you're not allowed to review your own work. You need to bring somebody else in. Sort of the same thing is that I assign the peer programmer, and then I need somebody else to come along and say yes, that this actually...

  266. 35:42

    uh, that this actually is okay. All right. So questions on Copilot Coding Agent. So let's say you are the only programmer, right? So for that exception, like this That is a fantastic question. [laughs]

  267. 36:00

    And I want to review it. And I'm just going to say that that is a fantastic question.

  268. 36:04

    Give you ideas. And, and, and I'm going to say that's a fantastic question. [laughs]

  269. 36:11

    Um, other questions? Can you iterate on what it generates? That's a great question. So the question is... That was also a great question. Um, so the question is, can you iterate?

  270. 36:22

    And the answer is yes. Is, um, what I can do, um, let me zoom out a little bit. That was a little obnoxious. Um, is I can just go in and add a comment.

  271. 36:31

    So if I go in and I add a comment and I say, "Hey, um-

  272. 36:36

    ... what, what I potentially want it to do. Um, also add in an endpoint to search for games by name. There we go.

  273. 36:47

    And note here, he's adding some pull requests, not to your repo.

  274. 36:50

    Thank you. And if I scroll back up, give it just a second here, and then we'll notice the cute little eyeballs again. So now, what's happening is that Copilot has started work again, and if I hit View session, hopefully I've stalled just long enough here, you'll notice that it's actually started up a brand-new session.

  275. 37:10

    So it's gonna take the work that it did, and then it's going to start back up again and begin work again from there. Yeah?

  276. 37:16

    Does it work with self-hosted runners?

  277. 37:20

    No. Not at the moment.

  278. 37:21

    When?

  279. 37:22

    I, I, I shouldn't have even said at the moment. [laughs] [laughs]

  280. 37:27

    Let's, uh, let's, let's summarize that answer, no. [laughs] Uh, yeah?

  281. 37:31

    Yeah. If, if you were-

  282. 37:33

    I always feel like a press secretary whenever I'm doing this. [laughs]

  283. 37:35

    Um, can you run Copilot, uh, on behalf of other organizations? If you have a GitHub app and you have other companies that integrate with it, can you run a G- a GitHub Copilot on behalf of them or do you have to just run that yourself?

  284. 37:50

    So, um, give me a little bit more about what you're asking there.

  285. 37:54

    Yeah. So I have a GitHub application.

  286. 37:56

    Yep.

  287. 37:56

    Um, clients install my GitHub application. It generates some rich prompts that we want to use with basically GitHub Copilot to run something on their code base. Can we do that?

  288. 38:07

    No.

  289. 38:07

    Okay.

  290. 38:07

    So what you could do is you could stand up an MCP server, so that way they could use Copilot, talk to your code, and then start to interact that way.

  291. 38:17

    But you're not gonna be able to have Copilot, like, do something to somebody else's code base.

  292. 38:22

    Okay. So it's not like an open API that you can just have a Copilot stick in a code base and do stuff for-

  293. 38:27

    No

  294. 38:27

    ... someone else. Okay.

  295. 38:28

    Yeah.

  296. 38:28

    So it's the same question here. We have a GitHub app, and we're getting the pull request

  297. 38:33

    Mm-hmm

  298. 38:33

    ... in customers' accounts. So, so I think we cannot leverage, like-

  299. 38:39

    So yeah. So what you can do is if you have a pull request, you can assign that to, to Copilot at that point. But again, it needs to be on a repository that you own.

  300. 38:52

    Okay. So if we, if they installed our app, so it's of course in their repo, and we can technically assign the Copilot to do some work as well on behalf of the client.

  301. 39:03

    Yeah. Right?

  302. 39:06

    I don't know the answer to that. I'm, I'm gonna be honest. I, I don't know the answer to... Because I don't know necessarily, like, what an app is able to do on, on behalf of the user at that point.

  303. 39:20

    Um-

  304. 39:21

    We should try it.

  305. 39:22

    I, yeah, I would, I, I, I would need to get back to you on that. Yeah. My, my handle is [REDACTED:username]. Here, let me just,

  306. 39:29

    um... Ah. Um, doo, doo, doo, doo, doo.

  307. 39:39

    There we go. So just shoot me an email and I can try and dig up a, a more robust answer for you. Other questions? Yeah.

  308. 39:52

    I have a question about integration. So what if, like, I have a self-hosted coding agent-

  309. 39:57

    Mm-hmm

  310. 39:57

    ... issue, like, you know, I've already made the, the pull request. And then how do I, like, add it into that? Do I go and, like, add as a comment or...

  311. 40:08

    Uh, yeah, what if I, the company basically does not what I want?

  312. 40:13

    Yeah.

  313. 40:16

    Should I go out and, uh, and-

  314. 40:18

    Yeah, this is a, this is a great question, and I'm actually gonna up-level this, um, a little bit. So when we're talking specifically about Coding Agent, if it doesn't do, um, something that, that, uh, that I wanted it to, or if it does get something completely wrong, and keep in mind that AI, just like human developers, is

  315. 40:35

    going to periodically get things wrong, and it's sometimes going to get things spectacularly wrong, again, just like humans are going to sometimes get things spectacularly wrong. So, um, if that's the case, there's a few different approaches that I could take.

  316. 40:49

    So one of them would be is just like I did, um, here a minute, uh, ago, is... Or three minutes, 57 seconds ago, but who's counting? Um, is just add in a comment and just clarify, "Hey, this is really what I wanted to use."

  317. 41:02

    So that's one option. Um, if it's, like, completely wrong, if it's just, um, completely out of left field, then the next option is you can just go back, um, all the way up to the very top here, um, and under Assignees, um...

  318. 41:16

    And I'm not going to remove this 'cause I, I wanna let it keep doing its thing. But just unassign Copilot, change your issue, and then reassign Copilot.

  319. 41:26

    And then, and then that way it will just completely start from, from scratch.

  320. 41:31

    Um, number three, and I think this is always, um, very important when, when we're working with AI, is if we see it get something wrong, one of the first questions that we really wanna be asking is why did it get it wrong?

  321. 41:45

    And nine times out of 10, and I, I'm gonna come right back to this word yet again, is context, is that it didn't fully understand not only just your request, but the environment in which it was going to be working.

  322. 41:58

    So one of my absolute, um, favorite features, um, is, doo, doo,

  323. 42:07

    um, Copilot Instructions. So on Copilot Instructions, what you're gonna notice, and this is read, um, in, um, in Coding Agent, and it's also read on every single, um, chat request...

  324. 42:23

    Oh, how do I, um... Yes. I figured out a shortcut key on a Mac. Go me.

  325. 42:37

    Thank you. [laughs] Um.

  326. 42:41

    Magic of AI is real

  327. 42:44

    Hey. [laughs] Um, but what you're gonna notice here is I have copilot-instructions.md. This is looked up by coding agent, and it's also looked at by every single chat request that I make inside the IDE.

  328. 42:56

    And what you're gonna notice in here is I have a really nice high-level overview of what I'm doing and how it is that I'm doing it. So I've given it a little bit of introduction about the app itself and how it is that I'm building it, I've given it code standards, I've told that everything that's required before

  329. 43:10

    commit, I gave it some global language guidance, and then I gave it some specifics on, on what it is that I'm building and how it is that I want it to be built.

  330. 43:19

    And then if I scroll all the way down, you'll even notice that I highlighted that repository structure, so that way I'm clearly spelling out, this is where to go find things.

  331. 43:30

    So this is a big place to go in and look if you want Copilot to have some additional context, some additional information. Um, another big thing that you can do, again, speaking to things that both coding agent and Copilot Chat are, are able to use, is to stand up an MCP server.

  332. 43:46

    So this is actually one of the other exercises in the lab, um, is Model Context Protocol, and basically what an MCP server allows you to do... And I have a slide right here that shows you the, uh, the diagram.

  333. 43:59

    I need everybody to memorize this diagram. There's gonna be a quiz on this later.

  334. 44:03

    Oh.

  335. 44:03

    Fantastic. Um, but basically, here's what happens. If somebody goes in, they make a request to Copilot, Copilot can then look through the list of commands that have been exposed out through different MCP servers, and then from there, go access external data.

  336. 44:18

    Because this is always one of the challenges whenever I'm working with Copilot, or really anything that's built on top of an LLM, is that typically it's gonna be limited to just that training set and that's it.

  337. 44:28

    This allows it to access external, uh, information, and even perform operations on your behalf as well. So if you see Copilot Coding Agent doing things in a way that you weren't quite expecting, take a look at its context.

  338. 44:43

    Take a look at what it has. So look at your Copilot instructions. Maybe put an MCP server. So if you've got, like, a really, um, a large repo, a really large code base, and you want Copilot to be able to, like, better search and better reason over that, this is a place where, like, standing up an MCP

  339. 44:56

    server, um, would come into, uh, come into play. Now, um, I do wanna highlight one last thing, um, uh, because Harold is in the room, and, um, uh, he would be very disappointed in me if I, uh, didn't highlight this.

  340. 45:09

    Um, and this is .instructions files. Um, which... And I am not saying this just because Harold is in the room. This is one of the, of, of, of the things that, uh, that Harold works on.

  341. 45:18

    Um, I'm not saying that just because he is here. This is true. This is one of my absolute favorite little features, um, where when we think about, um, what we're doing in coding, uh, is we're doing a lot of the same thing over and over again.

  342. 45:32

    Like, I'm going in and I'm creating yet another React component, or in this case here, I'm creating yet another Flask endpoint. But I probably want all of those to follow a particular pattern.

  343. 45:43

    And so what I can do is I can create a .instructions file, and I can then manually add this into chat, and this .instructions file can then have information about how it is that I want it to be created, the different rules around it, and then even point to prototype files that basically say, "Hey, you see that

  344. 46:00

    games file over there? Use that. That's how I want this to be built. Hey, you see that test file? Use that. That's how I want it to be built."

  345. 46:08

    And I can even have this happen automatically, that you'll notice that I have apply to header info. And so now, if it matches this pattern, so if it's inside the server test folder and starts with test underscore, it's gonna automatically apply that.

  346. 46:22

    So let's say again, going to React components. I can then go ahead and set up a filter, so anything that ends with a JSX, uh, TSX, um, extension, I want it to apply this.

  347. 46:31

    If you're a Svelte developer, like I am,

  348. 46:35

    um... All right. Okay. All right. I got a couple of people. Fantastic. Beautiful. Um, then I can go ahead and set up a pattern so that anything that ends with .svelte is going to follow the instructions here.

  349. 46:48

    Now, again, this part here right now, only available inside of Copilot Chat, but again, other ways that I can start to provide context. That was an awful lot of context.

  350. 46:57

    There was a question over here. Yeah.

  351. 46:58

    How often do you update this as part of your software development lifecycle?

  352. 47:03

    Yeah, this is a great question, is, um, uh, how often do I, do you update this? Keep in mind that this is an artifact of your repository, and I very much want to treat that as such.

  353. 47:14

    So, um, I sort of give this an analogy to, you know those little scripts that you spend like three days writing, but it's gonna save you five minutes a day?

  354. 47:24

    Yeah.

  355. 47:24

    That's basically what these are, is that you're gonna spend some time, and you really should. Create your instructions file. Create your .instructions file. Like, really make these robust because what you're gonna wind up with then on the back end is increased productivity, but you're also then going to help ensure that the code that's being generated is generated

  356. 47:44

    the way that you want it to be generated. So as things change, then do that. Yes, Mr. Harold?

  357. 47:50

    Yeah. One of the different things, anytime you add, make mistakes, you wanna correct those immediately. So that's how you get it on the, on the... When you start minimal and then you keep adding, and you, and you see it here in the option to, like, make it, don't do that, or if you're hinted with this, do different

  358. 48:05

    step, that's-

  359. 48:07

    Yeah. And I would even add, like, to that, that, you know, one of the things that's relatively unique about being in DevRel is I do an awful lot of demos.

  360. 48:17

    Yeah.

  361. 48:17

    And one of the things about doing a demo is you need that to work. And doing that [laughs] with, um, a probabilistic tool, like GitHub Copilot, um, does become a little bit of an adventure.

  362. 48:30

    That will be the word that I will use there. Um, and instructions files have been probably the number one thing that I have leaned on to help ensure that I get some level of consistency.

  363. 48:41

    So I really can't overstate the importance of instructions file. And again, I'm not just saying that 'cause Harold's in the room Yeah.

  364. 48:46

    Can John have an opinion here?

  365. 48:48

    Yeah.

  366. 48:48

    Uh, which is also as important as who the- [coughs]

  367. 48:52

    ... right? Like, yes, you have the person who's actually operating on the problem, but team leads, you know-

  368. 48:57

    Yeah

  369. 48:58

    ... that's part of your responsibility set. And as much as, like, your team makes a decision about what set of dependencies we're gonna use, your team's making decisions about what our patterns will be, et cetera, any of the architectural decisions.

  370. 49:08

    Those should go into instruction file-

  371. 49:10

    When you make those. Yep, absolutely. Yeah.

  372. 49:13

    So, uh, in your issue, you specified you want some capacity in this, but it seems like that would be something that would be embedded within an instruction file to ensure that they're always passing.

  373. 49:25

    Yep.

  374. 49:26

    Is there any reason that it's here as a, a question in both, or does it matter? Or-

  375. 49:32

    So, um, so the, the question is, is that, um, hey, inside your issue, you told it something that it probably should have been able to find elsewhere, that it was inside the instruction file, um, and, um, and you still typed it out.

  376. 49:42

    Like, you know, do you really need to do that? Fantastic question. So I'm, I'm gonna answer that directly, but then I'm also gonna up-level that, um, uh, as well.

  377. 49:50

    So to answer the question directly, I really didn't need to. Um, but this really, again, kind of falls under that category of, like, not being passive-aggressive with Copilot. Like, if there's something that I know, typing it out isn't going to hurt anything.

  378. 50:02

    So adding that to that, if anything, it's just going to help it because now I'm just, like, further reinforcing the fact that, hey, this does need to, to, to actually work.

  379. 50:13

    Um, now I am gonna up-level real quick because I think this also then brings up another question, which is, hey, now we've got the issue here. Um, and especially, like, if I'm working with, um, with Copilot Chat, where now I could have, like, a .instructions file.

  380. 50:26

    And we've already seen that I can have those call other files, and then now I've got my Copilot instructions. And so that then kind of begs the next question, which is, well, is there a hierarchy here?

  381. 50:36

    And the answer is no, that there isn't any form of a last write, that it's gonna consider all of that context and then make its best decision from there.

  382. 50:44

    Which also then kinda leads to another thing, which we should really be focused in on, like John was highlighting with, like, our team leads, is let's try to be consistent.

  383. 50:52

    So let's not start sending mixed messages because just like if we start sending mixed messages to our team and they're gonna get confused, the exact same thing is gonna happen with, uh, with Copilot.

  384. 51:02

    Yeah.

  385. 51:03

    Okay, just one other quick question. Sorry. On, on the MCP, uh, uh, diagram you had, you mentioned that you can't go outside

  386. 51:11

    Uh, I can open up holes in a firewall.

  387. 51:14

    So that specifically is part of the onboarding of an MCP server, you have to open up the firewall, uh, as part of that integration?

  388. 51:20

    So, um, if I'm using MCP locally from inside VS Code, good to go. If, um, I'm getting Coding Agent to do that, then, um, when I add in the MCP server, I also need to open up the firewall.

  389. 51:31

    All of it's actually really well documented, um, um, uh, to, to highlight all of that, but yes. The straight answer is yes.

  390. 51:39

    Many of these MCP servers will give you half protocols, so adding that configuration becomes a little difficult. But it says a lot of places uses username, password basis usually, but then otherwise it's really complex.

  391. 51:51

    Yeah. So, um, so when you go in and, and configure that, you can, um, do that at the repo level. I believe you can do that at the org level as well.

  392. 52:00

    And then what you do is you then set variables, um, and you can do that again at the repo level, or you can do that at the organization level.

  393. 52:08

    So you can centralize all of that.

  394. 52:11

    Can you review the code that it's, it's not... and does it start a whole new session versus, like, limited, like, just review this file and make changes to this file?

  395. 52:21

    Um, so I'm gonna... I, I, I'm going to inject my own question into that first, and then I'm gonna come back and answer that question. So the first question is, can you review the code?

  396. 52:32

    And I, and I wanna make sure that I, I mention this because it's so incredibly important. Um, AI does not change

  397. 52:41

    the DevOps flow. That if I think about how I wrote code before AI, um, I would write code off my own memory. I would be, um, writing code based on code that I'm seeing elsewhere.

  398. 52:52

    I would write code by copying and pasting from Stack Overflow, making a couple of changes, and then just crossing my fingers and hoping and praying that it works. Or maybe that's just me. [laughs]

  399. 53:01

    Or maybe I'm just the only one willing to admit it. Um, so in, in that situation, what do I have? I have a DevOps flow where I'm gonna get John to come along and, and review it.

  400. 53:13

    I'm going to have linters that are gonna come in and check to make sure that I'm following all my standards. I'm gonna have security scans that are gonna look for any potential vulnerabilities.

  401. 53:21

    Then I'm... And I have all of these different things, all of these, these, these safeguards to help ensure that the code that gets into my code base is secure and is written the exact way that we want it to be written.

  402. 53:30

    When I'm using AI, all of that still stands. So, um, I want my manual code reviews. I want my security checks. I want my linters. I want my unit tests.

  403. 53:39

    I want all of that to go in and run. Now, to get specific to, um, the, the second half of your question there, which is, hey, it's just this one file that I want you to look at.

  404. 53:49

    Um, when I'm working with Coding Agent, um, or really Copilot in general, there's always a non-zero chance that it's not going to follow what you want it to do exactly.

  405. 54:00

    So if I say, "Hey, go in and update this file," it, it might work specifically on that file and really in pa- in particular when I'm working about, with, with agent mode, it might work with that one file, but it also might do a couple of other things as well, and there's not necessarily a way to guarantee

  406. 54:16

    that it's only going to do just that. If you want it to only ever do just, like, that one particular file, this is where, like, edit mode comes into play.

  407. 54:25

    This is where ask mode comes into play inside my IDE because in those situations, I'm steering rather than letting, um, um, uh, than, uh, than, than letting Copilot steer.

  408. 54:37

    Sorry. I just... So when you review the code, it's gonna start a whole session, and then you might get a different code if your comment's not fully taken?

  409. 54:47

    I, so there's always a chance that, um, when... A- again, Copilot is probabilistic, so there's always a chance it's not gonna give me the code exactly the way that I want it to.

  410. 54:58

    But remember that at the end of the day, what this has done is this has created...

  411. 55:06

    Just open this up inside of a brand-new tab. This has created a brand-new branch. And so I could go in and add in a comment and tell Copilot, "Hey, I want you to fix this."

  412. 55:16

    But this is also a branch, so I could then just go in and say, "Hey, let me create a brand-new branch on that space," or I could go in and, um, uh, and then just clone that and then just check out that branch and then go in and manually make the changes as well.

  413. 55:32

    And so, like in the situation that you're describing where, hey, maybe everything looks good, but it's just this one file that I need to modify. Honestly, in that situation, I think what I would do is I would just go ahead and, um, I would just do this, is um,

  414. 55:50

    get checkout. Yes. [inaudible]

  415. 55:56

    that it's like we need to go and remember every last detail of every command.

  416. 56:00

    And Copilot's great at generating get commands.

  417. 56:02

    It is. [laughs] Um, so, uh, yeah, so I could just go in and do that. [laughs] Now I can just modify it manually. Or, like I could just work with Copilot here then on whatever it was that I, uh, that I was wanting to do.

  418. 56:15

    Yeah.

  419. 56:16

    Yeah. So can you go back to the diagram of the MCP?

  420. 56:19

    Sure.

  421. 56:20

    That has the big connect your computer section to that. So if you're using one of these remote agents and it's connecting to MCP, how... can it do that, number one, with the remote session?

  422. 56:33

    Yes.

  423. 56:33

    How long does that session look like on your behalf?

  424. 56:35

    So, um, so the... I, I'm gonna kind of up-level all of this. So the question is, is can it go to a remote server? Um, how long does that session last?

  425. 56:44

    Um, et cetera. And the, the short answer to can it access the remote server? Yes. Can it act on your behalf? Yes. How long is that gonna last? That depends.

  426. 56:54

    Um, that, um, when you go to set up that connection to that remote server-

  427. 56:58

    Right

  428. 56:59

    ... you're going to provide a credential-

  429. 57:00

    Yeah

  430. 57:00

    ... um, for that. So in the case of, say, like the GitHub, um, um, MCP server, then I can go in and I can provide a token for that, but then I can set an expiration on that token.

  431. 57:11

    Yeah, for sure.

  432. 57:12

    Yeah. So it's... The... All that's really going to depend. There isn't anything in Copilot that's, um, going to, um, automatically, like sign you out or anything like that.

  433. 57:24

    And so this MCP server, it can't basically kick off... You know, this is something that the actual, the agent that's running remotely has to decide to pull from. It can't basically kick off, um, the agent itself.

  434. 57:38

    Correct. Yeah. So the, I... It's, uh, the MCP server's not just automatically gonna be able to do something on my behalf. I'm going to have to indicate, "Hey, I want to do this."

  435. 57:47

    And then on top of that, um... And I don't think I've got it set up, um, on here, and it would just take me a couple of minutes to do it.

  436. 57:52

    Um, but if I go in and I make a request that's gonna kick off an MCP server, I actually have a button that says, "Hey, do you wanna do this?"

  437. 58:00

    Which actually leads me right into my next point, which is, um, that my... I, I wanna make sure that I'm vetting my MCP servers just like I would anything else that's going to access external information, just like anything else that's gonna be able to act on my behalf.

  438. 58:16

    Yeah, this is really important. Can, can I ask one follow-up?

  439. 58:18

    Sure.

  440. 58:20

    Is it possible to create a GitHub issue on behalf of another company and then have that be assigned to their internal Copilot?

  441. 58:27

    We're getting into a lot of specifics. Let's talk afterwards.

  442. 58:30

    Okay.

  443. 58:30

    All right. Yeah.

  444. 58:31

    Um, do you have visibility as to what model the coding agent uses, or visibility as to how it's making its decisions so we can further prompt it in the future to help

  445. 58:40

    So for coding agent, and again, I'm, I'm... Just to, to make sure that we're clear, this is where I'm on github.com, right now we're not exposing out the model that's being used internally.

  446. 58:52

    Um, and there's a reason for that, um, because th- we have a very specific type of workload, a very specific set of scenarios that need to, um, to be accomplished here.

  447. 59:04

    And so the model that we're choosing is the model that specifically... Like that, that we've determined is best for doing this. There might come a time where that starts to get exposed out and maybe that, that allows for change, but as of right now, it's, it's specifically because it works with this.

  448. 59:19

    Yes, you still have your hand raised.

  449. 59:21

    One more quest- quick question.

  450. 59:22

    Yeah.

  451. 59:23

    Really good session. Is it possible to have more than one coding agent?

  452. 59:27

    Um, yeah. I mean-

  453. 59:29

    Like a pair of them. Like, can you make... Assign them to two people? Like, I guess it would cost more, but-

  454. 59:34

    Yeah. Like I, I, I could create 100 issues and assign all 100 of them to, uh, to, to, to coding agent.

  455. 59:41

    Oh.

  456. 59:41

    Yeah.

  457. 59:41

    So you could just do them... You would spawn up an environment-

  458. 59:43

    Yeah. So remember that each time that you assign an issue to a coding agent, it's gonna create an environment specifically for that issue.

  459. 59:51

    So each issue will get its own environment.

  460. 59:53

    Exactly.

  461. 59:54

    Oh, fascinating.

  462. 59:56

    Yep. Yeah.

  463. 59:59

    Those instructions, right, in that apply to section-

  464. 1:00:02

    Yep

  465. 1:00:02

    ... it seems like it's gonna grow so huge. Can I do it just as opposite to, like in that folder to have my own instructions instead?

  466. 1:00:09

    Override. Yeah.

  467. 1:00:11

    Yeah, kind of like a chain and hierarchy. Yeah. Instead of like having one gigantic file.

  468. 1:00:15

    Um, so, um, what you can do, and I actually have an example of that right here.

  469. 1:00:26

    Like a multiple teams and then-

  470. 1:00:26

    Yeah. So you'll notice that right here, um, I'm actually, um... Inside this .instructions file, I'm actually referencing out to another .instructions file.

  471. 1:00:38

    Folder inside?

  472. 1:00:39

    Yep. And then on the apply to, you could go in and start setting folders as well. So however it is that you want that to be set up.

  473. 1:00:46

    Okay. That's good, thank you.

  474. 1:00:47

    Yep. Yeah. Yeah Sure.

  475. 1:00:58

    So, uh, is that possible for the 13 Copilot to access some, uh, server that MCP servers with all these functions, like, uh, I'm working a big enterprise that where, where I need to get a pattern or put, uh, put patterns for everyone else?

  476. 1:01:17

    Yeah, so if you're working with Coding Agent, you can configure your list of MCP servers at the organization level or on individual repos. For, um, um, for anything that's gonna be inside of, uh, VS Code, and I'm not sure how others would, um, would necessarily be s- um, have that set up, um, you can actually just set

  477. 1:01:36

    up inside of a repository, or inside your repository, your mcp.json file, um, which is what I've got right here. And then I can just list them all here. That now becomes part of the, uh, the repository.

  478. 1:01:49

    Um, the user will then still need to set up their own credentials because, again, it's going to act on, on that user's behalf.

  479. 1:01:54

    But, but this guarantee not only for two, right? I can access resources and-

  480. 1:01:59

    Correct.

  481. 1:02:00

    Okay.

  482. 1:02:00

    Correct. Yep. Yeah. Mr. Harold?

  483. 1:02:04

    So Coding Agent only supports tool right now? Uh, resources just landed into the scope.

  484. 1:02:10

    Oh, okay. Thank you.

  485. 1:02:12

    And, uh, for, for my talk tomorrow.

  486. 1:02:14

    What time is your talk?

  487. 1:02:16

    Oh, it's, uh, yeah, it's usually like 1:00 PM.

  488. 1:02:18

    Okay. [laughs] [laughs] Yeah.

  489. 1:02:21

    Do we have to worry about namespace collisions at all? Like MCP 207 the same connection and agent getting confused with that?

  490. 1:02:29

    So, you know, I'm actually going to, to kinda up-level this. Um, one of the things about using MCP servers all up with agent mode is that Copilot does need to figure out which MCP server to call, um, and when to call it.

  491. 1:02:45

    And generally speaking, it's gonna be able to do that on its own. But again... And, and, and let this maybe be the number one lesson that we pick up from, from today.

  492. 1:02:55

    That if I ever see Copilot not doing something the way that I expect it to do, what am I gonna do?

  493. 1:03:00

    Write some instructions.

  494. 1:03:01

    There we go. I'm gonna... Well, or, or even, even more generically, I, I... You know, back... I used to be a tech trainer.

  495. 1:03:08

    Um, um, so I would, like, literally just, like, go around different companies, teach classes. And one of the things that I would do is I would have little, um, um, little bits of candy, um, and just, like, toss them out, so, like, the little baby Reese's, um, and toss those out, and I wish I had one.

  496. 1:03:19

    Um, but, uh, but yeah, exactly. Like, update your instructions file or, again, like, improve your context. And so, like, one of the things that you could do is if you know for this specific type of scenario, this is the MCP server I want you to talk to, put it inside your instructions file.

  497. 1:03:32

    And in fact, Azure, um, their MCP server, when you register it, VS Code will actually prompt you and go, "Hey, do you wanna add that into your, um..." [laughs]

  498. 1:03:42

    Here, there, there you go. [laughs] Um, but, um, uh, but if you install the Azure MCP server, it will actually say, "Hey, you should add this to your instructions file."

  499. 1:03:57

    Okay. That was a lot of questions. [outro music]