mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-12 06:06:37 +03:00
Impeccable now ships a Hermes-compatible bundle under dist/hermes/.hermes/skills/. Hermes reads the Agent Skills spec as-is, so the bundle uses the four spec frontmatter fields (name, description, version, license) plus metadata/compatibility and drops the Claude/Codex-specific extensions Hermes would silently ignore. The .hermes/skills/ tracked root and the regenerated pin.mjs mirrors will be produced by .github/workflows/sync-generated-output.yml after this lands; per AGENTS.md, generated harness churn stays out of feature PRs. What a Hermes user gets: - npx impeccable install --providers=hermes --scope=project writes .hermes/skills/impeccable/ into the cwd. - npx impeccable install --providers=hermes --scope=user honors $HERMES_HOME, so a profile-scoped install (HERMES_HOME=~/.hermes/profiles/forge) lands in the active profile's skills dir, not the default ~/.hermes/. Cross-home HERMES_HOME inheritance is ignored so test isolation holds. - /impeccable registers as a Hermes slash command and routes sub-commands via the Commands table in the skill body, since user-invocable / argument-hint are not honored by Hermes' skill loader. What a Hermes user does NOT get, and why: - No hook surface. Impeccable's PostToolUse/Stop anti-pattern detector on Claude/Codex/Cursor/Grok/GitHub does not translate to Hermes, which has no equivalent tool event lifecycle. The skill body still ships. - No writeOpenAIMetadata, agentFormat, or emitHooks. Hermes has no per-skill tool ACL, no subagent on-disk format, and no hooks.json equivalent. Verified end-to-end with hermes-agent v0.18.2: /impeccable polish and /impeccable critique both load reference/<command>.md and return the documented first step. parse_frontmatter accepts the generated SKILL.md, scan_skill_commands registers /impeccable, and the full default test suite passes (267/267 in the critical files; 0 fail across all suites).
35 lines
1000 B
JavaScript
35 lines
1000 B
JavaScript
// Nothing in this repo imports this module. Its consumers are the Cloudflare
|
|
// Pages Functions in the private impeccable-site repo (functions/api/download/
|
|
// bundle/[provider].js and [type]/[provider]/[id].js), which share cli/lib/.
|
|
// Do not remove it as dead code; keep the provider list in sync with the
|
|
// harness dirs the build emits.
|
|
export const FILE_DOWNLOAD_PROVIDER_CONFIG_DIRS = Object.freeze({
|
|
cursor: '.cursor',
|
|
'claude-code': '.claude',
|
|
gemini: '.gemini',
|
|
codex: '.codex',
|
|
agents: '.agents',
|
|
antigravity: '.agent',
|
|
github: '.github',
|
|
grok: '.grok',
|
|
hermes: '.hermes',
|
|
kiro: '.kiro',
|
|
opencode: '.opencode',
|
|
pi: '.pi',
|
|
qoder: '.qoder',
|
|
vibe: '.vibe',
|
|
});
|
|
|
|
export const FILE_DOWNLOAD_PROVIDERS = Object.freeze(
|
|
Object.keys(FILE_DOWNLOAD_PROVIDER_CONFIG_DIRS)
|
|
);
|
|
|
|
export const BUNDLE_DOWNLOAD_PROVIDERS = Object.freeze([
|
|
'universal',
|
|
]);
|
|
|
|
export const DOWNLOAD_PROVIDERS = Object.freeze([
|
|
...FILE_DOWNLOAD_PROVIDERS,
|
|
...BUNDLE_DOWNLOAD_PROVIDERS,
|
|
]);
|