mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-12 06:06:37 +03:00
Add Hermes Agent as a supported provider
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).
This commit is contained in:
@@ -491,6 +491,7 @@ This folder contains skills for all supported tools:
|
||||
.agent/ -> Antigravity
|
||||
.github/ -> GitHub Copilot
|
||||
.grok/ -> Grok Build
|
||||
.hermes/ -> Hermes Agent
|
||||
.kiro/ -> Kiro
|
||||
.opencode/ -> OpenCode
|
||||
.pi/ -> Pi
|
||||
|
||||
@@ -18,5 +18,6 @@ export const transformRovoDev = createTransformer(PROVIDERS['rovo-dev']);
|
||||
export const transformVibe = createTransformer(PROVIDERS.vibe);
|
||||
export const transformGrok = createTransformer(PROVIDERS.grok);
|
||||
export const transformAntigravity = createTransformer(PROVIDERS.antigravity);
|
||||
export const transformHermes = createTransformer(PROVIDERS.hermes);
|
||||
|
||||
export { createTransformer, PROVIDERS };
|
||||
|
||||
@@ -162,4 +162,18 @@ export const PROVIDERS = {
|
||||
displayName: 'Antigravity',
|
||||
frontmatterFields: ['license', 'compatibility', 'metadata', 'allowed-tools'],
|
||||
},
|
||||
hermes: {
|
||||
provider: 'hermes',
|
||||
providerTags: ['hermes'],
|
||||
configDir: '.hermes',
|
||||
displayName: 'Hermes Agent',
|
||||
// Hermes ships the Agent Skills spec as-is. The optional fields below
|
||||
// (license, compatibility, metadata) are spec-defined; harness-specific
|
||||
// extensions (user-invocable, argument-hint, allowed-tools) are NOT
|
||||
// recognized by the Hermes skill loader and would be silently ignored.
|
||||
// Hermes also has no hook surface, no equivalent of Claude's slash
|
||||
// commands, and no per-skill tool ACL -- so no emitHooks, no agentFormat,
|
||||
// no writeOpenAIMetadata. See hermes-agent/SKILL.md "Skills" section.
|
||||
frontmatterFields: ['license', 'compatibility', 'metadata'],
|
||||
},
|
||||
};
|
||||
|
||||
@@ -539,6 +539,15 @@ export const PROVIDER_PLACEHOLDERS = {
|
||||
config_file: 'AGENTS.md',
|
||||
ask_instruction: 'ask the user directly to clarify what you cannot infer.',
|
||||
command_prefix: '/'
|
||||
},
|
||||
'hermes': {
|
||||
// Hermes is provider-agnostic and reads AGENTS.md / CLAUDE.md / .cursorrules
|
||||
// for project context. "the model" matches the pi/opencode phrasing used
|
||||
// for harnesses without a vendor-fixed assistant name.
|
||||
model: 'the model',
|
||||
config_file: 'AGENTS.md',
|
||||
ask_instruction: 'ask the user directly to clarify what you cannot infer.',
|
||||
command_prefix: '/'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -552,6 +561,7 @@ export const PROVIDER_BLOCK_TAGS = new Set([
|
||||
'gemini',
|
||||
'github',
|
||||
'grok',
|
||||
'hermes',
|
||||
'kiro',
|
||||
'opencode',
|
||||
'pi',
|
||||
|
||||
Reference in New Issue
Block a user