[{"data":1,"prerenderedAt":487},["ShallowReactive",2],{"navigation_docs":3,"-skills-overview":139,"-skills-overview-surround":482},[4,8,12,16,20,24,28,32,59,63,117,121,135],{"title":5,"path":6,"stem":7},"Introduction","\u002Fintroduction","1.introduction",{"title":9,"path":10,"stem":11},"Memory","\u002Fmemory","10.memory",{"title":13,"path":14,"stem":15},"Customization","\u002Fcustomization","11.customization",{"title":17,"path":18,"stem":19},"Deployment","\u002Fdeployment","12.deployment",{"title":21,"path":22,"stem":23},"Reference","\u002Freference","13.reference",{"title":25,"path":26,"stem":27},"Quickstart","\u002Fquickstart","2.quickstart",{"title":29,"path":30,"stem":31},"Installation","\u002Finstallation","3.installation",{"title":33,"icon":34,"path":35,"stem":36,"children":37,"page":58},"Connectors","i-lucide-cable","\u002Fconnectors","4.connectors",[38,42,46,50,54],{"title":39,"path":40,"stem":41},"Telegram","\u002Fconnectors\u002Ftelegram","4.connectors\u002F1.telegram",{"title":43,"path":44,"stem":45},"Slack","\u002Fconnectors\u002Fslack","4.connectors\u002F2.slack",{"title":47,"path":48,"stem":49},"Email","\u002Fconnectors\u002Femail","4.connectors\u002F3.email",{"title":51,"path":52,"stem":53},"API","\u002Fconnectors\u002Fapi","4.connectors\u002F4.api",{"title":55,"path":56,"stem":57},"Terminal","\u002Fconnectors\u002Fterminal","4.connectors\u002F5.terminal",false,{"title":60,"path":61,"stem":62},"Attachments","\u002Fattachments","5.attachments",{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":58},"Tools","i-lucide-wrench","\u002Ftools","6.tools",[69,73,77,81,85,89,93,97,101,105,109,113],{"title":70,"path":71,"stem":72},"File Manager","\u002Ftools\u002Ffile-manager","6.tools\u002F1.file-manager",{"title":74,"path":75,"stem":76},"Text-to-Speech","\u002Ftools\u002Ftext-to-speech","6.tools\u002F10.text-to-speech",{"title":78,"path":79,"stem":80},"Confirmations","\u002Ftools\u002Fconfirmations","6.tools\u002F11.confirmations",{"title":82,"path":83,"stem":84},"Adding Custom Tools","\u002Ftools\u002Fadding-custom-tools","6.tools\u002F12.adding-custom-tools",{"title":86,"path":87,"stem":88},"Image Manager","\u002Ftools\u002Fimage-manager","6.tools\u002F2.image-manager",{"title":90,"path":91,"stem":92},"Web Request","\u002Ftools\u002Fweb-request","6.tools\u002F3.web-request",{"title":94,"path":95,"stem":96},"Reminders","\u002Ftools\u002Freminders","6.tools\u002F4.reminders",{"title":98,"path":99,"stem":100},"Heartbeats","\u002Ftools\u002Fheartbeats","6.tools\u002F5.heartbeats",{"title":102,"path":103,"stem":104},"Email Manager","\u002Ftools\u002Femail-manager","6.tools\u002F6.email-manager",{"title":106,"path":107,"stem":108},"Calendar","\u002Ftools\u002Fcalendar","6.tools\u002F7.calendar",{"title":110,"path":111,"stem":112},"Read Database","\u002Ftools\u002Fread-database","6.tools\u002F8.read-database",{"title":114,"path":115,"stem":116},"Headless Browser","\u002Ftools\u002Fbrowser","6.tools\u002F9.browser",{"title":118,"path":119,"stem":120},"Tinker","\u002Ftinker","7.tinker",{"title":122,"icon":123,"path":124,"stem":125,"children":126,"page":58},"Skills","i-lucide-sparkles","\u002Fskills","8.skills",[127,131],{"title":128,"path":129,"stem":130},"Overview","\u002Fskills\u002Foverview","8.skills\u002F1.overview",{"title":132,"path":133,"stem":134},"Adding Custom Skills","\u002Fskills\u002Fadding-custom-skills","8.skills\u002F2.adding-custom-skills",{"title":136,"path":137,"stem":138},"Personas","\u002Fpersonas","9.personas",{"id":140,"title":128,"body":141,"description":476,"extension":477,"links":478,"meta":479,"navigation":270,"path":129,"seo":480,"stem":130,"__hash__":481},"docs\u002F8.skills\u002F1.overview.md",{"type":142,"value":143,"toc":467},"minimark",[144,148,156,159,172,175,191,194,198,209,215,225,235,239,296,299,327,330,334,337,343,364,370,374,388,395,402,411,415,424,427,432,439,443,460,463],[145,146,5],"h2",{"id":147},"introduction",[149,150,151,152],"p",{},"You ask the agent to summarize a meeting note. It does it... in a slightly different format than last time. You ask again next week. Different format again. ",[153,154,155],"em",{},"\"Why won't you just stick to one shape?\"",[149,157,158],{},"The answer is: because nothing told it to. Without explicit guidance, the model picks a reasonable structure each time, but \"reasonable\" varies turn to turn.",[149,160,161,162,166,167,171],{},"That's where ",[163,164,165],"strong",{},"skills"," come in. A skill is a reusable instruction set the agent can pull in on demand. Each skill is a folder holding a ",[168,169,170],"code",{},"SKILL.md"," file: the folder name is the skill's name, the frontmatter describes when to use it, and the body is the prompt the agent follows when the skill is invoked.",[149,173,174],{},"Use skills for any task you want the agent to perform consistently:",[176,177,178,182,185,188],"ul",{},[179,180,181],"li",{},"Summarizing meeting notes in a specific layout",[179,183,184],{},"Drafting an email reply in your voice",[179,186,187],{},"Generating release notes from a list of commits",[179,189,190],{},"Reviewing code with a fixed checklist",[149,192,193],{},"Write the prompt once, let the agent pick it up. Let's see how.",[145,195,197],{"id":196},"where-skills-live","Where Skills Live",[149,199,200,201,204,205,208],{},"Skills are stored on disk under the path configured by ",[168,202,203],{},"LARACLAW_SKILLS_PATH",", which defaults to ",[168,206,207],{},"laraclaw\u002Fskills\u002F"," at the root of your Laravel project.",[149,210,211,212,214],{},"Each skill lives in its own directory, with a single ",[168,213,170],{}," file inside:",[216,217,222],"pre",{"className":218,"code":220,"language":221},[219],"language-text","laraclaw\u002F\n  skills\u002F\n    greeting\u002F\n      SKILL.md\n    summarize\u002F\n      SKILL.md\n    release-notes\u002F\n      SKILL.md\n      reference.md\n      scripts\u002Fbuild.sh\n","text",[168,223,220],{"__ignoreMap":224},"",[149,226,227,230,231,234],{},[163,228,229],{},"The directory name is the skill name."," Rename the folder to rename the skill. A ",[168,232,233],{},"name"," key in the frontmatter is ignored, so the name you see in the tree is always the name the agent calls.",[145,236,238],{"id":237},"skill-file-format","Skill File Format",[216,240,244],{"className":241,"code":242,"language":243,"meta":224,"style":224},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\ndescription: Condense a long passage into 3 bullet points.\n---\n\nYou are a text summarizer. When called, take the provided text and produce\nexactly 3 concise bullet points. Each bullet should be a complete sentence and\nshould not start with the same word as another bullet. Do not include any\nother commentary.\n","markdown",[168,245,246,254,260,265,272,278,284,290],{"__ignoreMap":224},[247,248,251],"span",{"class":249,"line":250},"line",1,[247,252,253],{},"---\n",[247,255,257],{"class":249,"line":256},2,[247,258,259],{},"description: Condense a long passage into 3 bullet points.\n",[247,261,263],{"class":249,"line":262},3,[247,264,253],{},[247,266,268],{"class":249,"line":267},4,[247,269,271],{"emptyLinePlaceholder":270},true,"\n",[247,273,275],{"class":249,"line":274},5,[247,276,277],{},"You are a text summarizer. When called, take the provided text and produce\n",[247,279,281],{"class":249,"line":280},6,[247,282,283],{},"exactly 3 concise bullet points. Each bullet should be a complete sentence and\n",[247,285,287],{"class":249,"line":286},7,[247,288,289],{},"should not start with the same word as another bullet. Do not include any\n",[247,291,293],{"class":249,"line":292},8,[247,294,295],{},"other commentary.\n",[149,297,298],{},"Two parts matter:",[176,300,301,321],{},[179,302,303,308,309,312,313,316,317,320],{},[163,304,305],{},[168,306,307],{},"description"," — what the agent reads when deciding ",[153,310,311],{},"whether"," the skill is relevant. This is a routing hint, not a label. Describe the job that should trigger the skill, not what the file is. ",[168,314,315],{},"Generate release notes from a list of git commits"," gets picked up; ",[168,318,319],{},"Release notes skill"," does not.",[179,322,323,326],{},[163,324,325],{},"The body"," — the actual instructions the agent follows when it invokes the skill.",[149,328,329],{},"Leave the description out and Laraclaw falls back to the first line of the body and logs a warning. The skill still loads; it is just advertised badly.",[145,331,333],{"id":332},"companion-files","Companion Files",[149,335,336],{},"Anything else in the skill folder rides along. Reference material, SQL, templates, shell scripts:",[216,338,341],{"className":339,"code":340,"language":221},[219],"laraclaw\u002Fskills\u002Frelease-notes\u002F\n  SKILL.md\n  reference.md\n  scripts\u002Fbuild.sh\n",[168,342,340],{"__ignoreMap":224},[149,344,345,346,348,349,356,357,363],{},"When the agent loads a skill it is told the folder's absolute path and what is in it, so ",[168,347,170],{}," can say ",[153,350,351,352,355],{},"\"run ",[168,353,354],{},"scripts\u002Fbuild.sh","\""," or ",[153,358,359,360,355],{},"\"the column definitions are in ",[168,361,362],{},"reference.md"," and the agent can actually go and get them.",[149,365,366,367,369],{},"Keeping the long reference material in a separate file is usually the right move: only ",[168,368,170],{}," is pulled into context when the skill loads, so the extras cost nothing until something actually reads them.",[145,371,373],{"id":372},"how-the-agent-discovers-skills","How the Agent Discovers Skills",[149,375,376,377,380,381,383,384,387],{},"The ",[168,378,379],{},"SkillRegistry"," is a singleton. The first time it's resolved in a process, it scans the skills directory and indexes every ",[168,382,170],{}," it finds. The ",[168,385,386],{},"UseSkill"," tool's description includes the name and description of each available skill, so the agent sees the full catalog without any manual registration.",[149,389,390,391,394],{},"In other words: drop a folder in, and it just shows up. No ",[168,392,393],{},"vendor:publish",", no migration, no provider edits.",[149,396,397,398,401],{},"Publishing ships a small ",[168,399,400],{},"greeting"," skill so there is a working example on disk from day one. Delete it whenever you like.",[403,404,405],"blockquote",{},[149,406,407,410],{},[247,408,409],{},"!TIP","\nDropping a new file into the skills directory adds it the next time a fresh process picks it up. In production, that means restarting the queue worker after editing the skills directory. The terminal connector boots fresh per invocation, so it sees edits immediately.",[145,412,414],{"id":413},"invoking-a-skill","Invoking a Skill",[149,416,417,418,420,421,423],{},"When the agent decides a skill applies, it calls the ",[168,419,386],{}," tool with the skill name. The tool returns the body of the ",[168,422,170],{}," file, which the agent follows as additional instructions for its current turn.",[149,425,426],{},"You can also nudge the agent in chat:",[403,428,429],{},[149,430,431],{},"\"Use the summarize skill on this article: ...\"",[149,433,434,435,438],{},"The agent will read the ",[168,436,437],{},"summarize"," skill's body and follow it.",[145,440,442],{"id":441},"whats-next","What's Next",[176,444,445,451],{},[179,446,447,450],{},[448,449,132],"a",{"href":133}," — the workflow for writing a skill that the agent will actually pick up reliably.",[179,452,453,455,456,459],{},[448,454,136],{"href":137}," vs Skills — both are Markdown files, but they do very different things. Personas change ",[153,457,458],{},"how"," the agent talks across a whole thread; skills are reusable procedures the agent calls when needed.",[149,461,462],{},"Until next time!",[464,465,466],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":224,"searchDepth":256,"depth":256,"links":468},[469,470,471,472,473,474,475],{"id":147,"depth":256,"text":5},{"id":196,"depth":256,"text":197},{"id":237,"depth":256,"text":238},{"id":332,"depth":256,"text":333},{"id":372,"depth":256,"text":373},{"id":413,"depth":256,"text":414},{"id":441,"depth":256,"text":442},"What skills are, how they're stored, and how the agent uses them.","md",null,{},{"title":128,"description":476},"53zgVI5ivPCfaaT3NG77k7rc4ZKDqxcBLREN-eM9w0A",[483,485],{"title":118,"path":119,"stem":120,"description":484,"children":-1},"Let the agent evaluate PHP in the context of your running Laravel app.",{"title":132,"path":133,"stem":134,"description":486,"children":-1},"Create your own skills by dropping Markdown files into the skills directory.",1786661906119]