一键导入
apollo-skill-authoring
Author Apollo-specific skills under ~/.hermes/skills/: frontmatter, validator, structure.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Author Apollo-specific skills under ~/.hermes/skills/: frontmatter, validator, structure.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | apollo-skill-authoring |
| description | Author Apollo-specific skills under ~/.hermes/skills/: frontmatter, validator, structure. |
| version | 1.0.0 |
| author | Apollo |
| license | MIT |
| metadata | {"hermes":{"tags":["skills","authoring","apollo","conventions","skill-md"],"related_skills":["writing-plans","requesting-code-review"]}} |
Apollo skills are durable, procedural knowledge for specific kinds of work (vault conventions, work logs, narrower tools, daily rituals).
There are two places a SKILL.md can live:
~/.hermes/skills/<category>/<name>/SKILL.md — personal, not shared. Created via skill_manage(action='create')./home/bb/hermes-agent/skills/<category>/<name>/SKILL.md.Since Apollo is a customized personal assistant for Justin, we focus almost exclusively on User-local skills under ~/.hermes/skills/ to codify personal rituals and Obsidian integration.
Source of truth: tools/skill_manager_tool.py::_validate_frontmatter. Hard requirements:
--- as the first bytes (no leading blank line).\n---\n before the body.name field present.description field present, ≤ 1024 chars (MAX_DESCRIPTION_LENGTH).platforms field present and is a list (e.g., [linux, macos]).---.Peer-matched shape used by every skill under ~/.hermes/skills/:
---
name: my-skill-name # lowercase, hyphens, ≤64 chars (MAX_NAME_LENGTH)
description: Use when <trigger>. <one-line behavior>.
version: 1.0.0
platforms: [linux, macos]
author: Apollo
license: MIT
metadata:
hermes:
tags: [short, descriptive, tags]
related_skills: [other-skill, another-skill]
---
MAX_SKILL_CONTENT_CHARS, ~36k tokens).references/*.md and reference them from SKILL.md.Every skill follows roughly:
# <Title>
## Overview
One or two paragraphs: what and why.
## When to Use
- Bulleted triggers
- "Don't use for:" counter-triggers
## <Topic sections specific to the skill>
- Quick-reference tables are common
- Code blocks with exact commands
- Apollo-specific recipes and variables
## Common Pitfalls
Numbered list of mistakes and their fixes.
## Verification Checklist
- [ ] Checkbox list of post-action verifications
## One-Shot Recipes (optional)
Named scenarios → concrete command sequences.
Not every section is mandatory, but Overview + When to Use + actionable body + pitfalls are the minimum for the skill to feel like a peer.
User-local skills live under:
~/.hermes/skills/<category>/<skill-name>/SKILL.md
Categories currently in use (confirm with skills_list): apple, autonomous-ai-agents, creative, daily-rituals, data-science, devops, email, gaming, github, mcp, media, mlops, note-taking, productivity, red-teaming, research, smart-home, social-media, software-development.
Pick the closest existing category. For Apollo notes and workflows, note-taking or daily-rituals is usually apollot. For technical scripts, software-development is apollot.
note-taking/obsidian or note-taking/work-log.skill_manage(action='create', ...) to create the user-local skill.python3 ~/.hermes/scripts/test_skills_conformance.py --skill <skill-name>
Note: Ensure there are no warnings or errors, particularly in strict mode (--strict).skill_view(name=...) once created (or in a fresh session).skill_manage(action='patch', name=..., old_string=..., new_string=...).skill_manage(action='edit', name=..., content=...) to supply the full new content.The personality repository (~/apollo-backup/) is connected to remote GitHub (origin/main). In the background, the apollo-autocommit systemd service watches ~/.hermes/ and automatically commits and pushes local updates (e.g. memories, cron job statuses, local skill updates) to origin/main.
apollo-pull)If you or Justin edit skills/config on another machine and push them to GitHub, run the custom /home/justin.guest/.local/bin/apollo-pull script to fetch them.
The script:
apollo-autocommit service.~/.hermes/ to ~/apollo-backup/ and commits them to prevent uncommitted conflict errors.origin/main.~/apollo-backup/ into ~/.hermes/.apollo-autocommit service.apollo-pullBecause both the local VM and remote edits modify metadata and files concurrently, apollo-pull might abort with a merge conflict. If this happens, follow this workflow to resolve it cleanly:
git reset --hard origin/main
patch tool to re-apply your custom local changes onto the clean remote baseline in ~/apollo-backup/.~/.hermes/:
rsync -a --delete ~/apollo-backup/skills/ ~/.hermes/skills/
~/.hermes/, the running background apollo-autocommit service will automatically detect the changes, mirror them to ~/apollo-backup/, commit them, and push them to origin/main without conflicts.Leading whitespace before ---. The validator checks content.startswith("---"); any leading blank line or BOM fails validation.
Description too generic. Peer descriptions start with "Use when ..." and describe the trigger class, not the one task. "Use when debugging X" > "Debug X".
Forgetting the author/license/metadata block. Not validator-enforced, but every peer has it; omitting makes the skill look half-finished.
Writing a skill that duplicates a peer. Before creating, list skills and search. Prefer extending an existing skill to creating a narrow sibling.
Embedding scanner-tripping command shapes in skill content. Inside each subagent context block, tell the agent which JSON parser to use (jq is installed everywhere) and forbid unsafe shapes explicitly (e.g. cmd | python3 -c, cmd | bash, cmd | node -e, or curl | sh).
Directly editing ~/apollo-backup/ files without reverse-syncing. If you edit files in ~/apollo-backup/ directly and don't sync them back to ~/.hermes/, the live environment won't see them, and any subsequent change in ~/.hermes/ will trigger apollo-autocommit to overwrite your backup edits. Always reverse-sync to ~/.hermes/ after patching backup files.
Merge conflict loops during rebase. Running git rebase --continue without resolving conflict markers can result in corrupted files containing diff markup, or skipping remote additions entirely. Always use git reset --hard origin/main followed by manual patching to resolve conflicts cleanly.
Importing MCP submodules in Python scripts or execute_code. The hermes_tools library does NOT expose MCP-specific submodules (like hermes_tools.mcp_todoist). When writing Python scripts that need to communicate with external APIs (Todoist, Linear, Slack), always make direct HTTP requests using urllib.request and the corresponding key from .env (such as TODOIST_API_KEY, LINEAR_API_KEY).
When authoring skills, use the following heuristic to decide on the structure:
work-log.wind-down skill because it's tightly coupled to that specific end-of-day ritual.The trigger to refactor a piece of logic out of a monolith into its own skill is the emergence of a clear use case for invoking it independently.
skill_manage (lives in ~/.hermes/skills/)test_skills_conformance.py on the skill and verify a PASS status (no errors or strict warnings)---, closes with \n---\n| python3 -c, | bash, | node -e, or curl ... | sh patterns in example commands or subagent context blocksname, description, version, platforms, author, license, metadata.hermes.{tags, related_skills} all present# Title → ## Overview → ## When to Use → body → ## Common Pitfalls → ## Verification ChecklistUse when Justin asks you to search, read, write, or manage notes in the vault, OR when performing structural/physical vault maintenance (hygiene, task archiving, capitalization healing, link repair, and nightly cron plumbing).
Run vault compile-inputs — Phase 0 apply Ready to Apply, then phased Readings/Sources/Meetings/Others.
Interactive daily wrap-up: 1. Input candidates (Slack/email); 2. Discovered contacts; 3. Work log draft/write; 4. Next day's calendar preview.
Master Justin's automated note-taking, ingestion, and logging pipeline (Brain Feeds Ingest). Coordinates email forwarding, Linear reactions, Telegram bookmarks, and central vault logging/entity integration.
Manage and operate the Obsidian Semantic Pointer CLI for on-demand historical bridging, semantic search, and context pruning.
Master conventions for chronological logs: governs Daily Notes, Meetings, and incoming Inputs (Emails, Slack, Readings).