Install a Skill somebody else wrote, then write your own
Part 9 explained what a Skill is. This one is the doing half: install a published Skill without writing code, learn the naming rule that trips up almost everybody, then write your own — a refrigerator-inventory Skill in a single file. It ends with the failures you are most likely to hit.
Start with somebody else's, even if you plan to write your own
Three reasons to install one first. No programming is required — a Skill is a folder containing a SKILL.md instruction file; the author packaged it, you supply the source and select Install. You can try one before committing time — about three minutes, against an hour of studying examples. And you get a working example: open the installed SKILL.md and read how somebody else writes one.
A Skill does not make the model smarter. It gives the model the rules for your house. A competent cleaner already knows how to clean — what they do not know is that your wooden floor must not get wet. A Skill is that note on the counter.
Skills are central to how Pi Agent is meant to be used. With the same model — GLM-4.6, say — a Skill can change the result substantially. With home-assistant-best-practices installed, the model may tell you a helper beats a template sensor for a particular automation. Without it, it falls back on its own, possibly outdated, habits. The familiar comparison is HACS: the built-ins work, and the community sometimes offers something better suited to what you do.
Open Settings and select the Skills tab — third of the five along the top, between Models and Sub-agents.
- No skills found fills the left column. That column is the installed list, so an empty one is the correct first state.
- + Add skill sits at the foot of that column — the only control on this screen, and where every install starts.
- Select a skill is the placeholder in the right-hand pane, which fills with a Skill's detail or with the Add skill form.
Four ways to name a package, and one that gets rejected
Search finds what somebody listed in the catalog. Everything else — an unlisted repository, an npm package, a folder already on your host — installs by package specification, the argument of the command the panel fronts: pi install <package-spec>. Pi Agent is built on @earendil-works/pi-coding-agent, whose command-line interface is pi. A specification has a defined syntax; a repository name you recognize is not one. Four source types are valid.
| Source type | Example | What it runs | Where the files land |
|---|---|---|---|
| npm package | npm:@scope/[email protected]npm:my-pi-skill | npm install | ~/.pi/agent/npm/ |
Git, with the git: prefix | git:github.com/user/repo@v1git:[email protected]:user/repo | git clone, shorthand allowed | ~/.pi/agent/git/<host>/<path> |
| Git, full protocol URL | https://github.com/user/repossh://[email protected]/user/repo | git clone | Same as above |
| Local path | /absolute/path./relative/path | Records the path in settings | Nowhere — the source stays where it is and is read in place |
owner/repo. It looks right, because gh repo clone accepts it. Pi Agent does not. GitHub shorthand must carry the prefix — git:github.com/owner/repo. Without a prefix, only URLs beginning with https://, http://, ssh:// or git:// are accepted.Writing mattpocock/skills is like handing a courier a note that says “the Chen family.” Perfectly clear to you. The courier does not know which town. Pi refuses to guess whether foo/bar means npm or GitHub, so it asks you to put the town on the envelope.
One more rule, easy to miss: references stay pinned. @v1 keeps meaning v1; an update refreshes that checkout rather than moving you to v2. Changing refs is a fresh install, covered below.
Nothing here assumes GitHub. Replace the host — git:gitlab.com/user/repo, git:codeberg.org/user/repo, or your own server at git:git.your-domain.tw/user/repo.
GIT_TERMINAL_PROMPT=0 and GIT_SSH_COMMAND="ssh -o BatchMode=yes" so a missing credential fails immediately instead of hanging on a prompt nobody will answer.All four forms end at the same discovery step. Pi scans three directories for folders containing a SKILL.md: ~/.pi/agent/npm/, ~/.pi/agent/git/, and ~/.pi/agent/skills/. That last is a symlink to /data/pi-agent/skills/, where hand-written Skills go — do not look for an installed Git package there. Because $HOME is pinned into the add-on's data volume, panel and command line see the same Skills, and a Home Assistant snapshot brings the collection back with it: skills/, npm/, git/, and the enabled state in ~/.pi/agent/settings.json.
Whether a source works then depends mostly on authentication.
| Source | Works? | Why | What to do |
|---|---|---|---|
| Public GitHub over HTTPS | Yes, immediately | A public repository needs no authentication for git clone https://… | Use it directly. This covers about 90% of cases |
| Public npm package | Yes, through npm install | The author packaged and published it to the npm registry | Pin with @version. The npm route is young; most Skills travel by Git |
| Private GitHub over HTTPS | No, not through the panel alone | The panel has no field for a personal access token, and a non-interactive clone cannot prompt for a password | A public fork; SSH as below; or attach a terminal and set git config --global credential.helper store to cache credentials |
| Private GitHub over SSH | Yes, officially supported | openssh-client ships in the add-on image and reads ~/.ssh/config; SSH URLs use your configured keys automatically | Generate a key on the host, add the public half under GitHub Settings → SSH Keys, store it in /data/pi-agent/home/.ssh/, and run ssh -T [email protected] once to record the host key |
| Another Git host | Yes | Pi's Git shorthand does not assume a host | Enter git:host/user/repo or the full https://… URL, exactly as for GitHub |
| Local path | Yes | Pi records the absolute path in settings.json and scans it at startup instead of copying files | Put the folder under /data/pi-agent/ with scp or Samba first, then enter the path |
known_hosts and store the key under /data/pi-agent/home/.ssh/ — not under /root/.ssh/, because HOME is pinned to the data volume. Budget around 30 minutes the first time; it is reusable after that. If you do not already manage Git over SSH, a public fork is usually simpler at home: about five minutes, license and permissions permitting.Install a real Skill, then prove the agent can see it
Press + Add skill and the right-hand pane fills in.
- The field wants a keyword, not an address. Its placeholder reads
e.g. react, testing, deploy, and the blue Search button queries the skills.sh catalog. - global / project decides which settings file records the install. Global writes to
~/.pi/agent/settings.json, project to.pi/settings.jsonbeside your working directory. The arrow names the selected scope's path,~/.pi/agent/skills/. Leave it on global unless you need a per-project Skill. - skills.sh is the link on the last line — the community-curated directory, and the closest thing to an official Skill store.
npm:@scope/package. The build above gives a search field only. If your panel has no specification field, use the command line for anything the catalog does not list — both share the same state, so the result appears in the panel either way.-
Step 1
Search for it, or install it by specification
Select + Add skill, type
mattpocockand select Search. This walkthrough usesmattpocock/skills: not useful at home, but it installs reliably. The panel calls/api/skills/search; matching cards come back with their own Install button. If the catalog does not list what you want, open a terminal attached to the add-on and run one of these:pi install git:github.com/mattpocock/skillspi install https://github.com/mattpocock/skillspi install git:github.com/mattpocock/skills@mainThe third form pins a tag or commit. Do not enter bare
mattpocock/skills. -
Step 2
Select Install and leave it alone
The button reads Installing… while it works. Behind it the panel posts to
/api/skills/installwith{cwd, package, scope}and the backend runspi install. Usually 5-30 seconds, depending on repository size and your connection. Do not cancel or refresh the page. It ends with a Package installed. toast. -
Step 3
Check the entry that appears
The new Skill appears in the left column. Select it: the pane carries an enable/disable switch, Check Updates, Remove, and Installed Path — under
~/.pi/agent/npm/for an npm package,~/.pi/agent/git/<host>/<path>/for a Git one. -
Step 4
Reload the session, not the page
Reload Session usually sits at the upper right; select it and you should see Session reloaded. A new session works too. F5 does not — the system prompt is assembled when a session starts and is not reread part-way through, the most common reason a new Skill seems to have vanished.
-
Step 5
Find it in the system prompt, then use it once
Open the read-only System Prompt panel and scroll to the
<available_skills>block; your Skill's name should be inside it. That proves Pi found it — not that the agent will use it well. So name it in a test request too: “Please use Skill name to help me do XX.” If the reply engages and the right tools appear, it works. -
Step 6
Read its SKILL.md before you rely on it
SKILL.mdis the file Pi reads, notREADME.md: it holds thename,descriptionandallowed-toolsfrontmatter fields, and should say what triggers it, which tools it needs and which environment variables it expects. Follow Installed Path to it —/data/pi-agent/home/.pi/agent/git/<host>/<user>/<repo>/SKILL.mdfor a Git package, the matching…/npm/…path for an npm one. Five minutes of reading beats half an hour of guessing.
enableSkillCommands is on, each Skill is also registered as a slash command, /skill:name. Type /skill: in the conversation field to list what is available.Every installed Skill is stapled to the front of every conversation, relevant or not, so remove the ones you do not use. Two ways, for two situations.
From the panel, right in about 99% of cases: select the Skill, select Remove, confirm. The backend runs pi remove <spec>, drops the registration from settings.json, deletes the folder under ~/.pi/agent/git/… or ~/.pi/agent/npm/…, and shows a Package removed. toast. It cannot leave stale settings or delete the wrong path.
From a terminal attached to the add-on, when the panel is unavailable, the package is too damaged to list, or you are clearing several at once. Confirm the deployment-specific container name before using any host-level exec command, then:
pi listpi remove npm:@foo/barpi remove git:github.com/user/reporm -rf removes the files but leaves the registration in ~/.pi/agent/settings.json. At its next start Pi may try to reinstall the missing package, or simply report an error. Always prefer pi remove; if manual cleanup is unavoidable, edit settings.json to match. Either way, reload the session afterwards. Existing sessions are unaffected — their Skill text was fixed into the system prompt when they began./api/skills/check to compare the local and upstream versionHash; if there is a newer one, an Update button appears and calls /api/skills/update. From the command line, pi update --extensions checks everything, pi update npm:@foo/bar checks one. A pinned reference stays pinned — to move, run pi install git:host/user/repo@new-ref.One folder, one file, no programming
Published Skills address general needs — managing files, building websites. They know nothing about your household. Your own Skill is how you hand off the repetitive, specific work: photograph the refrigerator and get an inventory back, or answer a dishwasher error code from a manual you dropped in the folder.
The whole structure is one folder, one file:
fridge-check/└── SKILL.mdThree elements go into it, and only two are required.
| Element | What it is | What it does | Required? |
|---|---|---|---|
| YAML frontmatter | Key-value pairs between two --- lines at the very top, including name and description | Tells Pi what the Skill is called and when it applies | Yes |
| Main instructions | The Markdown below the frontmatter, usually a few ## sections | Tells the agent what to do, what to ask, and what the output should look like | Yes |
| Supporting files | Anything else in the folder — sample images, templates, PDF manuals | Material the agent can consult, such as a format to follow | No, but useful |
The filename is exact: SKILL uppercase, .md lowercase. Get the capitalization wrong and Pi will not find it. Markdown is the plain-text format you have seen on GitHub and in Obsidian — # makes a heading, - a list item — and if it is new to you, the agent still understands ordinary paragraphs.
Two notes on the frontmatter. name is the identifier: lowercase letters and hyphens, such as fridge-check, preferably matching the folder name. A non-ASCII name may work, but ASCII avoids path-encoding problems across operating systems. description matters most — the agent reads it to decide whether the Skill applies at all.
Here is the complete file. Copy it into SKILL.md:
---name: fridge-checkdescription: Use when the user shares a refrigerator photo or asks what to cook. Inventory visible food, identify items that may expire soon, and suggest dinner ideas.---# Fridge Check SkillHelp the user inventory a refrigerator, assess visible freshness cues, and plan meals without inventing details.## When to use thisUse this Skill when the user:- Shares a refrigerator or freezer photo- Asks what is in the refrigerator or what to cook- Mentions ingredients, pantry items, leftovers, or food nearing expiration## Steps1. **Describe visible items first** — Use location, item, and approximate quantity. Say when a label or package is unclear; do not guess.2. **Identify items to check soon** — Note visible signs such as yellowing leaves, damaged packaging, leaks, or discoloration. Explain that a photo cannot establish food safety.3. **Suggest one or two dinner ideas** — Prefer ingredients that appear usable and should be consumed soon. Avoid requiring many extra purchases.4. **Create a short use-next list** — Summarize which items the user should inspect or use first.## Safety- **Do not invent items that are not visible.**- **Do not diagnose poisoning risk or provide medical advice.** If an item appears spoiled, advise the user to inspect it and discard it when in doubt.- **Ask about available appliances and dietary requirements** before assuming a cooking method.- **Use approximate quantities** when objects are partly obscured.- **Reply in English** unless the user explicitly requests another language.## Example output[Refrigerator inventory]- Upper shelf: one carton of milk, about four eggs, one bowl of leftovers- Middle shelf: half a cabbage, two carrots, one package of tofu- Produce drawer: one bunch of spinach; some leaves appear yellow[Dinner ideas]1. Spinach and egg stir-fry — uses the spinach and two eggs2. Tofu with cabbage — uses the tofu and part of the cabbage[Check or use next]- Check the date and storage instructions on the milk- Inspect and use the leftovers promptly if they have been stored safelyTreat the Example output block as a template you refill for the next one: name, description, when to use, steps, safety, output shape.
--- lines must be exactly three hyphens on a line of their own, and the first must be the very first thing in the file — no blank line above it, no byte order mark. name: and description: must be spelled correctly with a space after each colon. Save as UTF-8 without a BOM; malformed frontmatter can stop the whole Skill loading.Now get the folder onto the host. The fast route — about two minutes — is scp, or an SFTP client such as FileZilla or Cyberduck, into /data/pi-agent/skills/. Replace the host address with yours:
scp -r ~/Desktop/fridge-check [email protected]:/data/pi-agent/skills/The slower route is GitHub, which buys version history and the ability to share it:
cd ~/Desktop/fridge-checkgit initgit add SKILL.mdgit commit -m "Initial fridge check skill"# Create a public repo called fridge-check on GitHubgit remote add origin https://github.com/your-account/fridge-check.gitgit branch -M maingit push -u origin mainThen bring it back in: in the panel select Add from URL, paste the repository URL, select Install — or by specification, pi install https://github.com/your-account/fridge-check. Both routes end with the folder under /data/pi-agent/skills/. Iterate locally with scp while the Skill is rough, then push to GitHub once it has settled.
Finish by opening a new session, checking <available_skills> for fridge-check, then attaching a photo of your refrigerator — look it over for anything private first. The reply should describe what is visible, flag what to inspect, suggest dinner and list what to check next, in that order and without unsupported safety claims.
Three things that decide whether the agent uses it at all
Once a few are installed, writing quality decides almost everything. Three principles do most of that work.
| Principle | Weak version | Better version |
|---|---|---|
| Make the description specific, with real triggers | description: Help the user with household tasks |
description: Trigger when the user shares a refrigerator photo or mentions ingredients, pantry items, leftovers, or asks "What should I cook today?" |
| Number the steps so the order is not a guess | “Look at what is in the refrigerator and offer some advice.” | “1. Describe what is visible. 2. Flag items to inspect. 3. Suggest dinner. 4. List what to check next.” |
| State prohibitions outright | (No prohibitions are stated.) | “Do not invent ingredients, diagnose food poisoning, claim that food is safe from a photo, or recommend an unfamiliar dish that takes more than 30 minutes.” |
Prohibitions are the part people leave out, and they matter because these systems are eager to help. Leave the boundary unstated and an inventory drifts into an invented nutrition report, or into claims about bacteria and illness. Blunt instructions — “do not diagnose,” “do not infer safety from an image” — keep the output useful and appropriately limited. Do not overcorrect either: a wall of “must” and “absolutely never” makes replies sound scripted, so use “prefer,” “usually” or “avoid” where judgment is genuinely appropriate, and keep the real prohibitions firm.
flowchart TD
A["The agent ignored my Skill"] --> B{"Is it listed in the
available_skills block?"}
B -->|"no"| C["Pi never loaded it.
Check the folder location
and the frontmatter"]
B -->|"yes"| D{"Does the description name
the words you actually used?"}
D -->|"no"| E["Rewrite the description
with concrete triggers"]
D -->|"yes"| F["Try a model with stronger
instruction-following, and read
its tool calls, not just the reply"]
One more habit: keep each Skill to one job. A single-purpose description is easier to match, conflicts are easier to diagnose, and a change has a smaller blast radius — refrigerator inventory, dinner suggestions and grocery planning work better as three Skills than one, even when they refer to each other.
The same template, seven times over
Every entry below fills in the same blanks: repetitive work to delegate, rules the agent must follow, and approved reference material beside SKILL.md. Seven ideas, including the one you have built.
| Skill | When it applies | What it should do | Supporting files |
|---|---|---|---|
fridge-check | A refrigerator photo, or “what should I cook today?” | Inventory what is visible, flag what to inspect, suggest dishes | (None) |
chore-rotation | “Who takes the rubbish out this week?” | Work out whose turn it is from the household list and the rotation period | family.md |
dinner-suggest | “What shall we eat tonight?” or “I have no idea what to cook” | Offer three options weighed against preferences, time, budget and leftovers | preferences.md |
grocery-list | Any mention of the weekly shop or a menu | Derive the ingredients needed from the menu dinner-suggest produced | staples.md |
appliance-manual | An error code or an operating question about an appliance | Answer from the PDF manuals in the folder, preserving the documented warnings | washer.pdf, ac.pdf, dryer.pdf |
ha-automation | “Write me a Home Assistant automation and explain it” | Produce YAML in Home Assistant's trigger / condition / action structure | entity_map.md |
video-script | A request for a video script or a YouTube Short | Produce a 30- or 60-second script, a storyboard and captions | voice.md |
If one of yours is safe and useful outside your own house, publish it to a public GitHub repository so other people can read it before they install it. Four things to do first.
-
Step 1
Confirm the repository really is public
Open the repository on GitHub, go to Settings and scroll to the Danger Zone to check its visibility. A private repository cannot be fetched without authentication, so nobody else's install will work.
-
Step 2
Strip anything private before the first push
Credentials, personal information, internal hostnames, entity names, paths, household details. Once pushed to a public repository it is in the history, so do this before the push, not after.
-
Step 3
Share a specification people can actually paste
Do not tell anybody to enter
your-account/fridge-check— Pi rejects bare shorthand. Give them thegit:form or the completehttps://github.com/…URL. -
Step 4
Add a README.md for the humans
Explain what the Skill does, how to use it and what a sample conversation looks like, so somebody can decide whether it fits before installing.
SKILL.mdis written for the agent;README.mdfor people.
#pi-agent and #homeassistant tags on social platforms. In particular, do not treat “submit it to skills.sh” as official Pi Agent guidance — it is not.The failures you are most likely to hit
Start with the mechanical ones.
| Symptom | What to do |
|---|---|
| The clone appears stuck around halfway | Usually the network, or a large repository — a few carry tens of megabytes of assets. Wait 3-5 minutes. If it still has not finished, cancel and run pi install git:github.com/xxx/yyy in a terminal on the add-on: it shows each step far more clearly than the progress bar, and the panel recognizes the result, since both share the same Skills path. |
| A failed install left a broken directory that blocks retries | Fixed in version 0.83.0, which stopped failed Git installs leaving partial directories behind. On anything older, remove that directory with rm -rf before retrying. |
| The Skill directory is enormous | A typical Skill is a few hundred kilobytes to a few megabytes. If du -sh /data/pi-agent/git/github.com/<user>/<repo> reports hundreds of megabytes, the repository probably ships sample videos or pretrained models; check its README. To keep the Skill without the bulk, copy SKILL.md and the minimum files it needs into /data/pi-agent/skills/<name>/, remove the Git package, then reinstall from that local path. |
| The new Skill has the same name as an existing one | Pi keys Skills on the name frontmatter field, not the folder name, and does not require the two to match. Duplicates are deduplicated — one survives per scope, and project scope wins over global. Renaming the folder does not help. Remove one package from the packages array in ~/.pi/agent/settings.json, or disable the conflicting Skill in the panel. |
| It fires sometimes and not others | The description does not cover enough triggers. “Use when the user uploads a refrigerator photo” will not match a text-only question about dinner. Write in the requests people actually make, with the surrounding words — fridge, pantry, leftovers, ingredients. |
| Replies have turned stiff and scripted | Too many hard commands. Soften the ones that are really judgment calls to “prefer,” “usually” or “avoid,” and keep firm only what must stay firm: do not invent facts, do not expose private data, do not take destructive action without approval, do not give unsupported medical advice. |
You cannot use git push at all |
Two ways round it. Drag the folder into /data/pi-agent/skills/ with an SFTP client such as FileZilla. Or attach your SKILL.md and ask the agent to prepare the commands — “explain and prepare the commands to push this Skill to my GitHub fridge-check repository. Do not run them without my approval.” If it reaches for the bash tool, read every command and destination on the tool card before you approve it. |
git clone straight into ~/.pi/agent/git/. The files arrive, but nothing registers them in settings.json, so the panel will not see the package and neither will the next session. Install through the panel or through pi install, always.I gave it a source and nothing happened
owner/repo, which Pi rejects — use git:github.com/owner/repo. A typo in the address, often a missing https:// or a misspelled owner; open it in a new tab to check. The repository is private or deleted — open it in a private browsing window to confirm it is genuinely public. Or you did not wait: look for the Installing… state and let it finish.It fails with "fatal: 401" or "Authentication failed"
The clone finished but the Skill is not in the panel
/api/skills?cwd=… request in the Network tab. It should return 200; a 4xx or 5xx points at the backend. Pay particular attention to 403: the current working directory is neither a trusted project nor a default pi-cwd-YYYYMMDD/ directory.It is installed, but the agent seems to ignore it
<available_skills>. If it does, the problem is usually trigger specificity — the description is too vague for the agent to recognize when it applies. As a stopgap, ask outright: “Please use Skill name to help me.” As a fix, read the Skill's README for the trigger phrases its author intended, or rewrite the description with concrete ones. If the description is already specific, the model may be the limit: a lighter model such as GLM-4-Flash may handle complex instructions differently, so compare a current reasoning-capable model such as GLM-4.6, Claude Sonnet 4, or DeepSeek-R1 when available. Do not infer instruction-following quality from a model-family label alone — test the exact model with the same prompt, and read its tool calls, not just its reply.Nothing shows in the System prompt panel at all
--- delimiters are exactly three hyphens on lines of their own, with no blank line before the first; name: and description: are spelled correctly with a space after each colon; the filename is exactly SKILL.md, uppercase SKILL, lowercase .md. Open it in a text editor such as VS Code or Notepad++ and confirm the encoding is UTF-8 without a BOM.Two Skills seem to fight each other
Something else entirely went wrong
The rest of it
How do I find Skills worth installing? Is there a catalog?
topic:claude-skill or topic:pi-agent-skill; and the r/ClaudeAI and r/homeassistant communities, or the #skills topic on X. Favor Home Assistant, smart home and household Skills — a general coding or Markdown-formatting Skill is worth much less in a house than in an office.Will installing Skills make conversations better in general?
home-assistant-best-practices may help a great deal while you write an automation and nothing at all when you ask whether it will rain, where a large collection only makes the choice harder. A good kitchen knife does not make you a better cook.How many can I install? Is there a limit?
Is the extra API cost worth it?
Where do the files live, and can I edit them?
/data/pi-agent/home/.pi/agent/npm/<pkg>/, Git packages under /data/pi-agent/home/.pi/agent/git/<host>/<user>/<repo>/, hand-written Skills under /data/pi-agent/skills/<name>/. That last path is symlinked to $HOME/.pi/agent/skills/, so both names mean the same files, and the panel's Installed Path shows the exact one. You may edit them — but pi update resets local changes to a Git package, so to make a change last, fork the repository and install your fork.Can I copy my Skills to another Pi Agent?
skills/. Archive the whole /data/pi-agent/ directory from host A, including skills/, home/.pi/agent/npm/, home/.pi/agent/git/ and home/.pi/agent/settings.json, extract it to the same path on host B, and reload the session. settings.json is the essential piece: it records which npm and Git packages are installed, their pinned refs and their scopes. Without it, none of them are registered. For ordinary backups a Home Assistant snapshot is simpler, since it takes /data/pi-agent/ in full.Does a Skill have to be written in English?
name field and the folder name in lowercase ASCII regardless, so the paths stay portable. If the people using it may write in more than one language, put triggers for each of those languages in the description.What is YAML, exactly?
alias: Sunset lights on. The frontmatter here needs only name: and description:, each with a space after the colon. Nothing more advanced is required for this example.Can a Skill tell the agent to use tools?
SKILL.md can tell the agent to read /config/automations.yaml or to reach for bash, but whether bash, read_file and write_file are available varies by deployment — and a Skill grants no permissions by itself. Controlling Home Assistant needs a separately configured MCP server such as ha-mcp, exposing tools like ha_get_state and ha_call_service. Review every tool card before approving it.Can a badly written Skill damage Pi Agent?
SKILL.md can still ask for destructive actions, ask for data to be disclosed, or ask you to weaken your approval controls. Test third-party Skills locally with approvals enabled, watch the logs and the tool requests, and publish or recommend nothing you have not reviewed.Can a Skill read my files without my approval?
SKILL.md, read it for the five things worth stopping over: broad file reads, network transfers, deletion requests, credential access, and any attempt to weaken approvals.Does a Skill stay available in a new session?
SKILL.md; one-off exceptions belong in the conversation.Can I version a Skill and roll a change back?
SKILL.md, then use git log to find the revision you want and git checkout — or whichever restore command your Git workflow uses — to return to it. Keep anything you rely on under version control. A verified Home Assistant backup is the second layer, since it covers /data/pi-agent/skills/ as well.Where to go from here
You can teach it a craft. Part 11 gives it a production line.
The next article builds a video workflow — the first job in this guide where the agent runs a sequence of real tools on your host rather than answering a question.
Open the full guidePart 10 of the Pi Agent Onboarding Guide series, published by WoowTech.
Based on the Woow HA Pi Agent Onboarding Guide, produced by WoowTech and released under CC BY 4.0.
The Smart Space Solution · 智慧空間解決方案 · © 2026 WOOW Technology Co., Ltd.