Transcript#
This transcript was generated automatically and may contain errors.
I am so excited to introduce our lab manager for today, Garrick Aden-Buie. Garrick, would you introduce yourself for us?
Yeah, hello. Hi, my name is Garrick. I work at Posit on the Shiny team. I've been on the Shiny team for a little while, for probably three and a half years now, I think.
Raise your hand if you love and appreciate Shiny. I do. I wore the wrong shirt today. I was wearing my Shiny shirt just yesterday, and I could have shown everybody. I have a Shiny shirt too. I know, we have bad timing.
Well, today, Garrick is going to be talking to us about agent skills, and maybe their difference between skills and tools, which is something that I have not understood completely.
We will be going over things like, what is a skill? What does it look like? If other people have made skills that are useful, where can I find them? How do I know if it's a good one? When do I need a skill? What does creating a skill from scratch look like?
Okay, Garrick, I say it is time. Go ahead and share your screen, and let's take it away.
We already have a question from Noor. Noor says, are skills solely for Cloud Code, or are they applicable in all contexts? I think we are going to get there, but Garrick is going to be using Cloud today.
What are agent skills?
Yeah, I'll actually do a little bit of a couple different things, I think, to set this up. But first, let me just make sure. So, I'm going to be using Positron, and I'm going to tell it to... So, I'm going to use Positron, and, yeah, first, let's see if everyone can see the screen okay.
Noor, to answer your question, skills are not solely for Cloud, I believe, right? That is right. In fact, they're actually technically called agent skills. So, more broadly, they can be used with basically any coding assistant that supports the idea of skills, the spec for skills. So, at this point, most coding assistants will support skills in some form or another, which includes Cloud Code or Posit Assistant or Codex or, yeah, or Copilot. They all end up supporting skills.
So, I thought I would start with a pretty basic example to kind of just explore where skills fit into, like, the general space of how you talk with a model.
And so, to do this, I was thinking I could use something pretty low level, where we don't have any coding assistant in the way. We don't have any... Sometimes the coding assistant, we also call that, like, an agent harness, which is really just, like, the software or the sort of programming that we set up around interacting with a large language model. And so, I thought maybe it would be interesting to just kind of, like, take all of that away and just do, like, the most basic things that you can do when you're interacting with large language models. And then we'll build up until we kind of see what a skill looks like, right?
So, to do this, I'm going to use ellmer, which is the R package for interacting with the APIs for large language models. And if you've ever used ellmer before or haven't seen it before, it basically gives you these nice little functions, like chat clod or chat anthropic, where you can connect directly to an AI provider, right? So, I'm going to use Anthropic's clod SONNET 4.6 model. And basically, to start a chat, I just run this chat clod function. You can actually just, like, you don't even need to give it a model. ellmer has pretty decent defaults, but here I wanted the latest clod SONNET model, right? And then what is really neat about this is that you can run this live console function, and you can actually have, like, a little conversation in your chat.
And maybe I can, like, ask, you know, what are agent skills? So, this message is going to go, this is me as a user sending a prompt to the model. And then we're going to see the answer coming back from the model. And it writes out a bunch of text. I'll skim really quickly. It tells me that agent skills are capabilities or tools that an AI agent can use to perform tasks, right?
Okay. So, this was, like, you know, a question that I was asking. Sometimes the things that you're going to give to the model can be more, like, in the form of instructions. Like, this text that it gave me, this is too many words. And it doesn't fit in my screen. I want something a little bit more concise. So, I'm going to tell it, respond to terse like smart caveman, all technical substance no fluff, tell me what are agent skills.
And we're going to get a very different answer this time. This one fits on the whole screen. You can see, also, there are no emojis anymore. So, we just get agent skills equals agent tools. Skills let agent do things, not just talk. So, part of what I have said here is instructions to the model that the model is going to follow in this conversation.
System prompts and dynamic instructions
And I said, you know, I put these kind of magic words in here. And then I got, you know, an answer that is a bit more, you know, that follows my instructions. It's terse. And it contains no filler. And I could ask, you know, follow up questions. How do I make a skill? Something like this. It can ask a follow up question. It's going to keep kind of following my instructions, right?
So, it gets a little annoying to type these things out, especially instructions like this, where I'm like, just, you know, for this chat, I don't want to like I want to be able to open up a chat and have it just start with, like, it knows that in these conversations, it should respond terse like a smart caveman, right?
And this introduces the idea of a system prompt. So, you know, I can pick the model that I want with ellmer. But I can also give it the I can give it these instructions to respond like a caveman.
So, I can give it those instructions. And if I look at this object, you'll see now I have what's called a system prompt. So, the system prompt is basically like a user message or actually people tend to call it the developer message, which makes a lot of sense. It's a message from the developer, the kind of person, like, behind the chat bot. And it's kind of like strong instructions about how the model should behave inside this conversation.
And it's sort of like baseline rules for how the conversation should go. So, if I've moved that instruction into the system prompt, you know, now I can kind of do the same thing. I can have my conversation. I can ask, like, I don't need to, like, remind it to be a caveman anymore. I can just say what are agent skills. And it will now answer me in this short terse form. Right?
So, these kind of like you have as a user, you don't often have that much access to the system prompt. But if you're programming a chat bot, you have the chance to introduce these instructions in your system prompt. And for a while, these were kind of like the two main ways that you could that you would give instructions to a model. Right? But there are definitely problems with putting something like this, you know, instructions like this into the system prompt. In particular, like, maybe not every conversation needs to be in caveman voice. Right? Maybe I want to, you know, have moments where I have a normal conversation. And then at some point, I want to, like, turn on caveman mode. And I kind of want that to happen sort of dynamically. Right?
So, this is that's kind of the problem that skills are trying to solve is how do we get these sorts of instructions to the model in a way that can be dynamic. It doesn't have to be, like, pre-programmed into the conversation. But when you're ready for it, it's there for you to use.
So, this is that's kind of the problem that skills are trying to solve is how do we get these sorts of instructions to the model in a way that can be dynamic. It doesn't have to be, like, pre-programmed into the conversation. But when you're ready for it, it's there for you to use.
Anatomy of a skill file
So, how it actually works, it kind of builds well, actually, let's go let's go look at what a skill looks like. And this caveman idea comes from an actual skill called the caveman skill.
And so, there's this repo. Julius Brussey caveman. Right? And in there, there's a skills folder. And under the skills folder, it turns out there's actually, like, in this repo, there's a couple skills. But we'll look at the caveman skill first. So, this is generally how people organize skills. There's usually a folder called skills. Then the name of the folder is the name of the skill. And then inside of the folder, there's a skill.md file. And it's basically just a markdown file that contains instructions for the model that can be loaded dynamically when the model is ready to bring in the prompt.
So, a couple key pieces of this skill, right? Here's this, you know, sentence that I was using. You can see that this is, like, now part of the skill. And then there's, like, a whole section. Actually, we'll look at it as code so you can see what the markdown itself looks like. So, this is what the file would look like, right? Note skills caveman was the name of the skill. And then there's this YAML block at the top of the markdown file. If you've used, you know, Quarto or R markdown, it's similar to that where there's a YAML block of metadata at the top of the file. And one sort of quirk of skills is that this name has to match the directory. So, that's one thing you have to set up to begin with. But you give your skill a name. And then you also give it a description. And the description is, it turns out, is a pretty important part of the skill. Because it is not here just to remind you what your skill is about. It's actually here as instructions it's, like, a short snippet of instructions that the model will see that tell it what is inside this skill.
So, the model will, like, the way that skills generally work is, like, the coding assistant will let the model know that it has some skills. It'll let it know what the names of the skills are. And it'll show it, like, these couple of lines of text to say, like, give it a hint about whether when or how it should be using this skill.
And in the course of the conversation, you know, you'll end up saying something that sort of matches, you know, the user will say something that matches what is in this description. And then the model will go, hey, actually, you know what? I've got a skill for this. And it'll load that skill directly. So, you can see this description does a really good job of explaining exactly when the model should use this skill. So, it says explicitly use when the user says caveman mode or talk like a caveman or use caveman. In which case it should, the model is being told essentially you should bring in this skill and follow the rest of the instructions.
Yes. I was just going to say, can I interrupt you? Okay. We have two questions. One, I'm not sure if we have the answer to. I don't know the answer. Nathan Jeffrey had asked, if I have access to Positron Assistant using GitHub Copilot, does that mean that I can use ellmer, like, without an API key? I don't know the answer to this.
With without an API key, I don't know either. You probably need an API key. That is Yeah, when you're using ellmer, there's an API key behind all of these somewhere. But you can definitely, like, chat GitHub. There is a chat GitHub. And I think that this works just because it knows what, like, it knows I have a GitHub token, you know, in my environment that I use for interacting with GitHub's APIs or installing packages. At one point, I set up a GitHub token, and it'll pick it up and give you access to GitHub's models, which may or may not overlap with GitHub Copilot or the specific subscription service that you have. It's all very difficult to figure out exactly. But there's a good chance that yes is the answer.
Okay, great. And then we had one from Alexandra that says, can the instructions be more than just strings? Are there other types of sources like JSON or CSV that can be used to learn other skills?
Yes-ish, right? So, we'll get into, like, a little bit more of the structure of the sort of detail. Like, you can have more than just one skill markdown file. And there's a concept in skills of progressive disclosure, which is actually something that we've seen already in talking about this description. So, skills are designed to be, like, designed to be set up so that you're kind of, you're not, like, throwing everything at the model all at once, right? So, the system prompt idea is, like, we're going to fill the system prompt with everything that the model is going to need to know for this entire conversation. And often what happens is it turns out that the model, like, you'll put instructions into the system prompt that are completely irrelevant to actual conversations that users are having. And it creates problems because sometimes those instructions may distract the model from paying attention to what the user is saying or may cause the model to go off and do something that the user doesn't want them to do.
But you've had instructions in the system prompt that kind of, you know, we're telling the model to do something that happens to be at odds with what the user was actually wanting to do, right? And so, skills are set up to have this progressive disclosure property where, you know, we start by showing the model just this little bit. This is supposed to be, like, 100 tokens. Like, say, like, 100 words, two sentences, one paragraph, roughly, right? And the model will see just this. And if it decides that this skill is relevant and loads the rest of the skill, it will load just the rest of the file. And the file usually has, you know, basic instructions and some things that are relevant to, you know, here there's a, you know, here there's, like, really limited this is a pretty small skill in the sense that, you know, mostly just says, like, you know, stop using filler words and pleasantries and just and also articles, you know, and it gives it a quick pattern for how to reply.
But it also includes, you know, some other follow-ups, like, drop the caveman act if you're about to do something destructive. Go ahead and explain it clearly to the user instead of pretending to be a caveman. That's a good idea, right? So, there's some instructions here. But also, then, this skill file can then point to other files that are sort of adjacent to the skill. And the model will, you know, be able to load those as needed as you yeah, load those as needed as it sort of tries to tackle the task at hand.
Real-world skill examples
All right. So, if we want our agent to talk like a caveman, this is great. What are the examples in which you use skills?
Right. So, I use skills in lots of different ways.
I mean, okay. Yeah. I mean, I use skills in lots of ways. So, I guess we can show you this, which is a collection of skills that are probably a lot more useful to you than the caveman skill. But this is a little repo that I started putting together when skills came out and have been encouraging people to contribute to inside of Posit. And it's a place where I basically store skills that I've created that I find useful in, you know, more or less everyday work. And I have organized we've organized it by, like, subfolders. So, there's whole groups of things.
And I'll go into the let's go into the shiny skill because I know that there are some interesting skills in here. So, there's a grouping of shiny skills, right? And then there's this shiny bslib skill. And if I open up this skill, the idea with this skill, if I show you the code, right, is it's a shiny bslib is the name of the skill. And then the goal is to help you build modern shiny dashboards and applications using bslib. So, if I go back to the preview, you can see basically when you're the idea is that this skill should kick in whenever you're building new shiny apps or you're trying to modernize a legacy shiny app or you're working with some new features of bslib, like page layouts or grid systems or cards or, you know, those kinds of things.
So, if you're if you're having a conversation if you have this skill available to your coding assistant and you're also having a conversation about building shiny dashboards and things, then this skill should kick in and it would basically, you know, help you help your coding agent forget about some of the things that it knows about writing shiny apps that only use the shiny library and will bring in the extra stuff that the model needs to know or be reinforced about acting on to write shiny apps with bslib instead.
And then inside of this shiny bslib folder, you can see I have a references section. I'm going to see if I can just open that directly. So, I have another subfolder next to that called references. And inside of references, there are a whole bunch of different areas, right? So, there's things like there's a section on accordions and cards and grid layouts. And so, you can think of like if you're building a shiny app with shiny and bslib, maybe so, the skill itself is like here's the most relevant information for anybody who is doing this thing. Anybody who is using shiny and bslib together. And then the references folder is full of smaller sort of standalone pieces that are then relevant that the model might go read if it needs to, you know, like you're working with filling layouts, right? Filling layouts are notoriously tricky. And maybe you're working with a filling layout in your shiny app. And so, then this file is basically going to explain how filling layouts work to the model. So, basically it's going to just like load, you know, can load this information on the fly and all of a sudden just know everything that there is to know about shiny bslib and filling layouts.
So, this is in contrast to just freewheeling an LLM and being like, hey, I'm building a shiny app. I want to have this filling layout. And then expecting it to go read the documentation, hope that it reads the right stuff, hope that it figures it out and do it right, right? And then often that doesn't work, spoiler, right? Like it'll come back and it'll do something janky and you're really frustrated. You're like having to do this again. Using a skill is like putting a skill pack into a robot, right? Where you're like, hey, learn how to make this for me real quick. And I'm not going to have to explain any of it to you and then go do it and have a way higher likelihood of doing it correctly, right?
Yes. Yes, exactly. Yeah. And I think, and it reminded us of the I Know Kung Fu scene from, what is the name of this movie? I forgot. The Matrix. Yeah. Right. So it's a little bit like that. Like you just plug your model in and say like, hey, you know Kung Fu now. Or it's also like, there's the general advice about writing functions where people will say, you know, if you've written the same code three times, or, you know, you copy and paste it the same code two times and you go to do it a third time, you know, maybe that is the time to make a function. And I think a really similar thing applies to skills where if you find yourself saying the same thing to a model repeatedly, like you're having a conversation with Claude, for example, and you are like, you find yourself like typing out the same phrase repeatedly. Or like telling it like, I want you to do it this way. And then you have to like, you know, maybe give like a whole paragraph. And you know, if you notice yourself doing that, then that is a great moment to stop and make a skill.
If you find yourself saying the same thing to a model repeatedly, like you're having a conversation with Claude, for example, and you are like, you find yourself like typing out the same phrase repeatedly. Or like telling it like, I want you to do it this way. if you notice yourself doing that, then that is a great moment to stop and make a skill.
Finding and installing skills
Fantastic. Okay, we have some questions. If you're open for a little break, we're at the 30 minute mark. So I think this is a good stop, because we've got about four questions that we could get through. One is from Russ that says, hey, GitHub has the like top 10 repos and trending repositories. Is there anything like that with agents skills so that we can look up the top trending or used skills so that we know what's already out there?
Yeah, that's a great question. And I'm really excited to share this website with you. It's skills.sh. This is by this is by the company Vercel. They also have a little command line utility. If you have NPM installed, you can use NPX skills to add, add any of these skills to your coding agents. I really like the utility. But then also what happens is that they sort of, you know, keep track of who's using which skills. And then you have a big they have this big sort of, I mean, this is this is actually like, exactly what that person was asking about where this is like the these are the top skills used of all time.
So you can from here, you can look through things. And like, I can probably find the caveman skill. There's actually a bunch of caveman things. For example, or we were just looking at shiny, you can find our skills here.
So if you're ever in a position where you're like, you know, I wonder if a skill exists for this thing already, you can come here and search for it. Let me show you. I'll go to the shiny. Yes, limb one. Because once Okay, there we go. So once you open it, you can actually, you know, read through the skill here in the website. At the very top, they'll give you the command that you can paste into a terminal to run to add the skill to your coding agent. Or and then there's also like a direct link to the repo. They added this recently to the security audits, which I think are useful to look at.
And it's worth mentioning that when you are that it is worth auditing a skill before you bring it in to your Yeah, tell me in the discord literally just asked, should we really trust these random skills? Somebody had also said like, Hey, I'd actually don't recommend installing that fine dash skills one because it comes with a bunch of telemetry. So do your research still right? Like verify that what you are adding to your computer is good.
Thank you, Russ for that question. And then we had one from Santiago asked in the zoom q&a Santiago discord, we miss you. What tool do you use to download slash manage or sync skills from various sources? He says that he is using impact skills from Brazil. But curious to hear what everybody else is using. Is impacts what you use, Garrick? Yeah, so I use NPX. Mostly. One of the things I like about NPX is, let's actually like, let's try it.
So I'll make this bigger, we'll hide the console CD into demo. And so you do NPX skills, add, and then you give the repo. And when you run this, it will tell you which skills are in that repo. And then you can pick them. I could say like, you know, I want this skill. And maybe I want to, you know, yes, I want it in cloud code. And you pick a couple options, like I'm going to put it here in this project. And I just say yes to everything else. Also, like this will show you the security risk assessment as well. So it's, you'll actually see that in the, in the output. And what it has done is it has if I can find this folder, it has added the skill source to dot agents slash skills.
In it wasn't clear in here, but in when I for this question, which agents you want to install to, I have picked cloud and pi before. So it remembered that and it installed sim links to cloud skills and to pi skills. And so that they would be available for those coding agents. And then the last thing it does is it adds this file, hide the console, adds this file, which keeps track of where I got this skill from, which this is pretty useful in general.
So the other way that I like to install skills is using a package that I work on called btw. So if you load btw, there is also a function btw skill, and you can install skills from GitHub, or you can install skills from packages. So if you are developing our packages, and my recommendation is to store, let's see if this is actually in here. So to store the to store skills in the inst skills directory. And then the btw package will, like has, will basically like see that and you can install the skill from the package directly, which means then make it available to other coding agents outside of ellmer and btw. Or there's also a way that btw can give you an ellmer client that can see skills and use skills. And, and it will automatically detect skills and you're attached to our packages. So like, if you've loaded a package that also has a skill, then the btw client will will automatically load that for you.
Awesome. Okay, let's see. We can slide in a few more questions here. James had said that caveman skill had a boundaries section in it. Is that standard for the skills.md file? And what practical implications does that have?
The funnest part about skills is that inside of the markdown file, anything goes. Like, right at anything. This is just a thing that they added here. I think it makes sense. This is relevant to, like, if you're using this skill, that's pretty relevant. Like, don't... The idea here is, like, it's telling the model, like, there's certain cases where you don't want to be extremely terse. And it is better to actually make sure everyone knows what you're talking about.
Yes. I think caveman talk would get pretty annoying in certain situations.
Morgana asked, are skills almost a way to give agents info about topics in a lesser version of having a vector store or a document repo for the model to refer to? So it's like a master class version of the info? Maybe a more succinct version?
Yeah. I think... Okay. So, when would you use RAG? Which is what they're talking about. RAG is Retrieval Augmented Generation. And it's the idea that, like... So, this is very similar in the sense that both... In both cases, retrieval augmented generation and skills are both, like, we're going to need to get some useful information in front of the model. We're going to load it dynamically because we don't know when exactly it's supposed to be used. But RAG is more about having a giant pile of documents that may or may not be relevant. And you don't at any given point know which one is going to be relevant to any conversation. Skills are a lot better when you enter an area where there's a very clear reason that you would want to have the skill be loaded in the first place.
So, you know, if we go back to the Shiny example, the skill here is, like, when you're building Shiny apps that use bslib, then we know, like, once we know that, we now know everything in here is more or less relevant. And this is, like, we'd want this to come in. Right? Or the other way that this is really useful is when you have a specific workflow that you want to go through. When you want to guide the model through doing something very specific.
So, PRCreate. So, this is a skill that I made at one point for that kind of, like, follows how I like pull requests. So, if I'm working with a coding assistant and I've made some changes and I'm at the point where I'm like, okay, this is ready to be made into a pull request, this then covers more or less the workflow that I would use. And specifically with Cloud Code. So, this, you know, you can... Skills can be used with lots of different coding assistants. But in this case, I've mentioned specific tools that I know Cloud Code has that other coding agents don't necessarily have. So, I designed this skill around guiding Cloud through a very specific workflow. And you can see that inside of these instructions, it's very prescriptive. It's like, here's what you're going to do. Here's the process. Step one, you're going to look at the current state and you're going to figure out, like, you know, where our base branch is.
And then getting through specifically, like, this is how I want you to draft the PR title and body, right? So, this is much more prescriptive. It's very, like, you're entering an area of, like, we're going to do this task together. And I, you know, by the time you've, like, scanned this whole thing, you're like, I would not want to guide the model through all of these pieces, you know, step by step. I really, like, I know how I want this process to go from the outside and I just want the model to pick up the pattern that I have established and follow it for me.
And so, that's how I ended up using this this skill a lot. It just sort of, you know, now Claude and I follow a repeatable pattern when I'm submitting a PR. And it's really nice. I liked Notabeko in Discord saying it's like making sentient functions. It is exactly like that. That is such a good analogy. I really, really like that. That's a perfect description.
Building a skill from scratch
Okay. So, there are more questions, but we have 20 minutes left. And you were going to help us see what building a skill from scratch looks like. And so, if we're going to fit that in, I say we go for it. We will need to do that now. Yeah. Let's do it.
So, I have, this should be everything. So, I have this report that I was working on using this week's tidyverse Tuesday data. And actually, so, I actually worked on this together with Opus and Posit Assistant. And we went through a bunch of stuff. I made this whole report looking at the data. I'm just going to scroll down. You're going to see there's some plots. There's another plot. But my favorite plot is the last one, which, this one, which explores the tariffs that we apply, that the U.S. government applies to cheeses. And apparently, we apply higher tariffs to cheese that we think is fancier. So, my favorite part was Swiss with holes. Swiss cheese with holes gets a higher tariff than Swiss cheese without holes, which is higher than cheddar cheese, for example.
Okay. So, we made this whole thing. If I can find the code somewhere in here, it'll be something like here's our official cheese ranking, right? If I opened this up and looked at it in a browser, I would realize that this plot does not have alt text. So, alt text is basically a description for people who, like, either can't see the plot because of their system or a visual disability. And the idea is that it describes, you know, what is happening in this image. So, it would be nice to have something. And the way that you can do it is here to do, like, fig. So, in Quarto, you do the fig alt. And you can see now that, actually, Copilot is going to give me a pattern here. Bar chart showing U.S. tariff rates for different types of cheese with annotations. This is probably this is, like, a very literal, like, what happened is the completion model read this code and was, like, I think I get what's going on and just gave me a basic answer, right? But there are some really good processes to follow.
In particular, this there's an article on Medium, I forget the author's name at the moment, but it's in this in the readme for this repo, who kind of went through, like, here's a really good pattern that you can follow. So, you know, chart type of type data where reason for including chart. And make sure you include a link to the data source somewhere in the text. So, I have already kind of gone through and picked out I need to see this. So, I picked out some good resources on creating alt text. Amy Sasal is the author of that Medium article, by the way.
And what I'm going to do is I'm basically going to open up a terminal. And I'm going to actually move this over so we have it side by side. This is my favorite part of Positron, by the way, that you can just, like, grab things and move them around and put them next to each other.
And I'm going to launch Claude. We're going to use Sonnet 4.6. And I'm going to invoke a skill. So, this is the other way that you can invoke skills is with the slash command. You can see here's my PR create skill. Because Claude knows that I like this skill and use it a lot. So, in Claude code, skills show up as slash commands. You just type slash and then you can type the name of the skill. Or the other way that skills kind of get loaded is when you, like, when you say words that sort of match what was in the description. And then it'll show up. Either one can work. But I like the slash command because then I know when I'm getting the skill that I want.
So, I'm going to actually use the skill creator skill to create a skill. And you can invoke the skill. The other cool part is you just, like, you can say more words, too. So, like, let's create a skill for writing alt text for data visualizations.
Yeah. Okay. So, I said, yeah, make me a skill. And I gave it these websites and asked it to distill the references into concrete advice. And I this is a pattern that I like to follow when I'm making a skill is basically, like, go open a bunch of tabs, go browse around, find good resources. Like, either that could be, you know, package documentation, things that you have written already, things that other people have written, people whose advice you, you know, admire and appreciate. Things like that. Like, if you do a little bit of work in advance to sort of bring in some, like, good resources and materials for the skill, it generally goes a whole lot better. Right?
So, so, Claude went out and read those websites and said, now I have everything I need. Let's write this skill. And I'm going to say, yeah, it wants to it wants to make the dot Claude skill and is going to call it alt text database. And I'm going to say, yeah, go ahead, you can have access to skills. Feel free. And so, now it's probably going to do a bit more reading. Basically, the skill creator skill is just going to walk it through all the things that it needs to do from here. Often, if you have done the hard work of putting together some good context, you're, that's kind of the extent of what you need to do. For now, at least.
Okay. So, while Claude is incubating, maybe we can get another question in.
Because Connor asked a great one. I love this. How do LLMs deal with conflicts between skills, like the D player select and mass select conflict, but with LLM skills?
I mean, so, that's the nice part about it being, like, sentient functions is that they, you know, the model figures it out to a certain extent. Also, like, you likely won't have two skills loaded at the same time. So, usually with this, with the skill, it'll be, like, like I said, the model has a general sense of what each skill is. But then it actually has to go to, like, actually, like, get the contents of the skill and bring it in. It has to, like, it has to take an action to do that. It has to go read the file. And that doesn't happen automatically. So, it's very rare that you end up in a situation where, like, you have competing skills active at the same time. In fact, the hardest part about a skill is that they don't always turn on when you want them to turn on.
I was going to say, Noor had asked a sort of, like, question that goes along with that, which was, like, well, are you stuck using all skills for each session? Or can you, like, subset which skills you're using for that session? Part of the answer to that, I think, is that that's why we give them descriptions, right? So that it's not initially just reading every skill that you have. It's only reading that description part.
Right. Yeah, exactly. So, you, with skills, there is no real way for you to, like, go in and toggle. Usually, there isn't any way for you to, like, toggle skills on or off. Your only real choice is whether or not you install it for globally on your computer. So, like, for any session with Claude, or if you install it just for the project that you're working on. And beyond that, you know, there's not a lot of, there aren't a lot of levers to pull about when, you know, which skill is attached or not, or, like, available.
Okay. I think that answers Nathan's question. Yes. Which was, is the default to download them on a per project level?
Yeah, I think it's a little bit of both. I usually opt for doing skills locally first. And then if I realize that I use them so much that I need them, that they're, like, useful to be global, then I move them and start using them globally.
Okay. What is the difference between that, those two options? Like, could you demonstrate that for us really quickly? Sure. So this, so Claude just made me a skill, and it put it in dot Claude skills, right? And so I'm in this project. And if I go in here to dot inside of my project, I have dot Claude skills. And here's my alt text data viz skill, right? Which we can come back to, but it made me a skill. We have a skill now. This is awesome.
Yeah, you did the skill. So the other option is to install it into my home directory there in my home directory, there is also dot Claude slash skills. And, and there, you know that those, those skills are then available everywhere, right? So, you know, I was talking about the PR create skill, which is not here in my project, but it is available to me because it's a skill that I have installed globally. So any coding session that I do will have PR create, any coding session with Claude code will have PR create. And meanwhile, like this alt text data viz thing will only be here in this project.
So I have, I have my alt text data viz skill now. And, you know, I, from here, I would, I mean, okay, here's what's nice is it actually did, you know, see that it found this from the, from the picture, right? That was the pattern that we were wanting it to have.
I, we're not going to read this and like go through it in great detail or anything like that. But I would recommend if you were making your own skill, don't just take the output from Claude at this point. I mean, I can say that this skill is definitely better because I give it three really good articles than it would be if I just asked Claude to make up a skill without any references. Right. So we're already starting off on a good foot, but but if you're making your own skill, this is the point where I would stop read this. Like actually I would read it, but line by line.
So I've invoked the skill. I invoked it directly rather than I could have just said, write some alt text for me, and it probably would have also turned on. But this also will work for me as well. And it's, you can see it's going through and adding these, the appropriate chunk options to include useful alt text.
And again, I would not recommend just taking this, but it is a really good starting point for you to make it easier to, you know, to like write these and have them be, you know, part of your reports. I agree. They're great, a great starting place. Look at them, look at the plot, verify it, but then they often cut down on time and make it way more likely that you actually add alt text, which is very important for accessibility. Exactly.
Wrapping up: questions and tips
Okay. We have three more minutes. Can we like rapid fire, get in some questions and answers? Okay. We had from Zoom a question that said, I use the Posit skills and I install it from cloud code plugin marketplace and provide the Posit skills, get URL. Is this the same thing with installing with NPX? Does it do the same thing? It's very similar. Cloud has its own plugin system. What they're talking about is, and it's mentioned in the repo of the Posit skills repo, but you do like something like plugin install or add or something. And you said, like, I have it set up so that in the skills repo, there are like groups of skills and you can install them as cloud code plugins, which makes it easier to manage if you're just using cloud code. I move around a little bit between coding assistants. So I prefer installing individual skills and I also really like having a lock file. So I don't, I'm not a huge fan of cloud codes plugin system, but, but they both work. We tried to make it easy so that you could get like some skills, but not all the skills at once.
All right. I also wanted to point out, David Onder had said in the chat that he actually keeps his skills in folders that are named by group names and tells the AI to use skills by group, which I think is pretty useful if you're thinking about organizing. We also had Nathan Jeffrey ask a question along those lines, which is what distinguishes the .cloud folder from a .agents folder? It's just convention. For different agents, we'll use different folders. .agents is the most sort of coding assistant agnostic one. And then cloud uses, cloud code uses .cloud and there are a bunch of different ones. Like some, some coding agents will follow the .agents and some will not, or some use their own conventions. Yeah. It's the wild west out here.
All right. And then I think our last one is from Zoom and it says, is it the community practice to let an LLM write the skill with resources fed as opposed to writing it by hand? Yes and no. I think it depends a bit on what you want to do. Like, and it depends on, you know, your task and everything. I think that it is, I think that the vast majority of skills that you will find online have been written by cloud code or, you know, by a coding agent in the first place. I think so too. I see that a lot.
Yeah. And on the other hand, like things that are, you know, you can still do it by hand and have bespoke skills that are very important to you. And it's a useful experience, but, but overall I do recommend, I think the most important part is to think about what sources you're putting in front of the model. And you also like, I did not do this, but usually I spend quite a bit of time guiding the model in terms of how to structure the information. So I don't usually just take what it gives me in terms of what it thinks it should be. You know, I work on structuring the information in a way that will likely be better organized in the end as a result of my participation. And then you read it and then you make it, you know, fix it up until it's what you want it to be.
All right, Garrick, this is so great. We are at the top of the hour, but if it's really quick, get it in there. We'll get it in the YouTube recording. It is super quick, which is also, if you see someone else's skill that you think is like, this is great, but it's not quite what I want, remix the skill. Bring it in, change it up, remix it, make it your own.
