Skills
A skill is a named, executable capability of an agent. Skills are the primary unit of work in aide.sh.
Script-based skills
The most common type. A skill backed by a shell script:
[skills.hello]
script = "skills/hello.sh"
description = "Greet someone"
usage = "hello [name]"
The script receives positional arguments via $1, $2, etc:
#!/usr/bin/env bash
# skills/hello.sh
NAME="${1:-world}"
echo "Hello, $NAME!"
$ aide.sh exec bot hello Alice
Hello, Alice!
Prompt-based skills
A skill backed by a markdown prompt file, interpreted by an LLM at runtime:
[skills.summarize]
prompt = "skills/summarize.md"
description = "Summarize text using an LLM"
usage = "summarize <text>"
<!-- skills/summarize.md -->
Summarize the following text in 3 bullet points:
{{input}}
Prompt skills always require an LLM. They are skipped if no LLM is configured.
Execution model
When aide.sh exec <instance> <skill> [args] runs:
- The instance working directory is set to the instance root (
~/.aide/instances/<name>/) - Environment variables are injected in order: vault -> agent env -> skill env
- The script runs as a subprocess with the scoped environment
- stdout/stderr are captured and returned to the caller
- Exit code is preserved (0 = success)
Adding description and usage
The description and usage fields appear when listing skills:
$ aide.sh exec bot
Available skills:
cool NTU COOL LMS scanning (courses, assignments, grades)
Usage: cool [courses|assignments|grades|todos|summary|scan]
email Email triage (POP3/SMTP)
Usage: email [check|unread|read N|search Q|send TO SUBJ BODY]
chrome Chrome browser automation
Usage: chrome [open|screenshot|scrape URL]
Example: skill with argument parsing
#!/usr/bin/env bash
# skills/cool.sh
set -euo pipefail
CMD="${1:-help}"
case "$CMD" in
courses)
curl -s -H "Authorization: Bearer $NTU_COOL_TOKEN" \
"https://cool.ntu.edu.tw/api/v1/courses" | jq '.[].name'
;;
assignments)
curl -s -H "Authorization: Bearer $NTU_COOL_TOKEN" \
"https://cool.ntu.edu.tw/api/v1/courses/${2}/assignments" | jq '.[]'
;;
*)
echo "Usage: cool [courses|assignments COURSE_ID|grades|todos|summary|scan]"
exit 1
;;
esac
Scheduled skills
Add a schedule field with a cron expression to run a skill periodically:
[skills.cool]
script = "skills/cool.sh"
schedule = "0 8 * * *" # daily at 8 AM
Scheduled skills require the daemon (aide.sh up). See Cron & Scheduling.