bastion/agentskills-install
Skill8 starsChanged 4 months agoMITView on GitHub
Installs a skill from agentskills.io (or any GitHub / direct URL) by fetching SKILL.md, validating the name for path safety, confirming with the user, and writing to skills/.
In this repository17 other files it gives its agents.
- bastion/agentskills-publishSkill
- bastion/calendarSkill
- bastion-pet-packSkill
- bastion/channel-scaffoldSkill
- bastion/crisis-modeSkill
- bastion/life-logSkill
- mcporterSkill
- bastion/mesh-connectSkill
- bastion/mobile-connectSkill
- bastion/onboardingSkill
- bastion/output-validatorSkill
- bastion/persona-engineSkill
- bastion/proactive-engineSkill
- bastion/self-improvingSkill
- bastion/skill-writerSkill
- bastion/weekly-reviewSkill
- bastion/weight-systemSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 4 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 48
If resolution fails or the file is not found, inform the user and ask them to check the name or URL.
- Very specific: line 65
If the name contains a bastion/ prefix, strip it to get the bare slug before constructing the path.
- Distinctive: line 66
After stripping, re-validate the bare slug.
- Very specific: line 78
If metadata.privacy_tier == "cloud-only" is present in the fetched skill, warn the user:
- Distinctive: line 91
Before writing any file, always show:
- Distinctive: line 95
If the user says no, abort silently.
- Very specific: line 107
Skill already installed: ask the user whether to overwrite, skip, or rename (e.g., <slug>-v2).
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
bastion/agentskills-install
Lets the user install any agentskills.io-compatible skill by conversation — no manual file copy needed. Handles URL resolution, security validation, and confirmation before writing to disk.
Objective
Fetch a remote SKILL.md, validate it for path traversal and privacy risks, confirm with the user,
and write it to skills/<name>/SKILL.md so Bastion activates it immediately.
Flow
| Step | Action |
| 1 | Ask: "Which skill do you want to install? (bare name, GitHub URL, or direct URL)" |
| 2 | Resolve the URL using the URL Resolution table below |
| 3 | Fetch SKILL.md from the resolved URL |
| 4 | Read the name field from the fetched frontmatter |
| 5 | Validate the name for path traversal (see Security section) |
| 6 | Show the skill description and confirm: "I'll save this skill to skills/<name>/SKILL.md. Confirm? (yes/no)" |
| 7 | If confirmed: write the file to skills/<name>/SKILL.md |
| 8 | Confirm activation: "Skill <name> is now active. Try it with: <first trigger>" |
URL Resolution
| Input format | Resolution strategy |
Bare name (e.g., reminder) | Fetch https://agentskills.io/.well-known/agent-skills/index.json, find entry by name == "reminder", follow url field |
GitHub URL (e.g., github.com/user/repo/blob/main/skills/reminder/SKILL.md) | Transform to raw content URL: raw.githubusercontent.com/user/repo/main/skills/reminder/SKILL.md |
Direct URL (ends in SKILL.md) | Fetch verbatim |
If resolution fails or the file is not found, inform the user and ask them to check the name or URL.
Security
Path traversal prevention (T-06-04-01 — mandatory check):
The name field from the fetched frontmatter is used to construct the local path
skills/<name>/SKILL.md. A malicious skill could set name: ../../etc/passwd to write
outside the skills/ directory.
Reject the install if name contains any of:
..(directory traversal)/(path separator — only allowed as thebastion/prefix, which is stripped)\(Windows path separator)
If the name contains a bastion/ prefix, strip it to get the bare slug before constructing the path.
After stripping, re-validate the bare slug.
Validation pseudocode:
slug = name.removePrefix("bastion/")
if ".." in slug or "/" in slug or "\" in slug:
REJECT — "Skill name contains unsafe characters. Install aborted."
path = "skills/" + slug + "/SKILL.md"Privacy tier warning:
If metadata.privacy_tier == "cloud-only" is present in the fetched skill, warn the user:
"This skill is marked
cloud-only. It may send data to external services. Install anyway? (yes/no)"
No code execution:
SKILL.md is a definition file — Bastion reads and interprets it as instructions but never
executes code blocks embedded in the file. This skill does NOT eval or execute any content
from the fetched SKILL.md.
Confirmation Pattern
Before writing any file, always show:
"I'll save the skill to
skills/<name>/SKILL.md. Confirm? (yes/no)"
If the user says no, abort silently. If a file already exists at that path:
"A skill already exists at
skills/<name>/SKILL.md. Overwrite? (yes/no/rename)"
Edge Cases
- Name not found on agentskills.io index: inform the user; suggest searching with a different name or providing a direct URL.
- Fetch fails (network error): inform the user; ask them to check connectivity and try again.
- Frontmatter missing or malformed: reject the install — "SKILL.md frontmatter is invalid. Cannot install."
- name field missing from frontmatter: reject — "Skill has no
namefield. Cannot determine install path." - Skill already installed: ask the user whether to overwrite, skip, or rename (e.g.,
<slug>-v2). - Privacy tier cloud-only with user running LocalOnly persona: warn that the skill's intent conflicts with the active persona's privacy stance.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

