Use this skill as an interactive deployment operator, not as a static checklist. Keep the conversation moving one missing input or one manual task at a time.
Core Contract
- Source of truth:
hermes.yaml. - Generated output:
<agent-name>/with TrueFoundry YAML files andslack-app-manifest.json. - Architecture: one Slack app per agent, plus
secrets,state,controller,executor, andsnapshotter. - Slack transport: HTTP Events API and Interactivity only. Do not use Socket Mode, WebSockets, slash commands, Slack user groups, or Slack OAuth.
- Secrets: never ask the user to paste raw Slack tokens, signing secrets, or TrueFoundry API keys into chat. Have them fill the TrueFoundry SecretGroup or local environment directly.
- Deployment gate: do not deploy until local validation passes and either live validation passes or the user explicitly accepts a known limitation.
Load References
- Read
references/deployment-example.mdwhen creating or reviewinghermes.yaml, generated manifests, Slack app setup, SecretGroup setup, validation, deployment, or failure handling. - Read
references/session-smoke-test.mdbefore declaring a deployment healthy or when debugging runtime behavior.
Workflow
Track this sequence and resume from the first incomplete step:
- Collect missing manifest fields:
name,workspace_fqn, optionalhost,description,instructions,model,skills,mcp_servers,secrets, optionalslack, optionalsnapshot. - Write or update
hermes.yaml. - Run local validation:
npx @truefoundry/tfy-hermes-agent validate hermes.yaml --skip-live-checks - Compile generated files:
npx @truefoundry/tfy-hermes-agent compile hermes.yaml - Stop for Slack app creation from
<agent-name>/slack-app-manifest.json. - Stop for SecretGroup filling with
SLACK-BOT-TOKEN,SLACK-SIGNING-SECRET,HARNESS-INTERNAL-TOKEN, andTFY_API_KEY. - Run live validation when credentials are available:
npx @truefoundry/tfy-hermes-agent validate hermes.yaml - Deploy only after validation:
npx @truefoundry/tfy-hermes-agent deploy hermes.yaml - Verify health, backend sessions, snapshotter, Slack URL verification, and one real Slack mention.
Input Rules
name: lowercase Slack-safe handle, for exampledevrel-assistant.workspace_fqn: TrueFoundry workspace FQN, for exampletfy-ea-dev-eo-az:sai-ws.host: optional; inferred fromTFY_HOSTorTFY_SECRET_TENANTwhen set. If neither is set, ask the user forhost.skills: full FQNs only, for exampleagent-skill:tfy-eo/sai-mlrepo/humanizer:1.mcp_servers: TrueFoundry MCP Gateway URLs only.secrets: default to<name>-hermes-secretsif unspecified.slack.channels: optional Slack channel/group/DM ID allowlist. Empty means unrestricted.slack.users: optional Slack user ID allowlist. Empty means unrestricted.snapshot: optional; when present, requiresml_repoandartifact_name.
If the user gives names instead of FQNs, URLs, or Slack IDs, pause and ask for exact values or offer to look them up when tooling is available.
Manual Stops
Only stop for external work:
- Slack app creation and installation.
- SecretGroup value entry.
- Missing local TrueFoundry credentials.
- Slack URL verification in Slack settings.
- First real Slack message result.
When stopping, give exactly one concrete task and the file/path/name the user needs.
Completion Criteria
The flow is complete only when:
hermes.yamlexists and local/live validation pass.- Generated files are compiled under
<agent-name>/. - Slack app is installed and backed by the per-agent SecretGroup.
- TrueFoundry
state,controller,executor, andsnapshotterare deployed. /api/health,/slack/health, and/v1/modelsrespond.- Backend session smoke tests pass.
- Snapshotter writes a local snapshot, and writes an artifact version when
snapshotis configured. - Slack Events and Interactivity URLs are verified.
- A real Slack mention receives a final Hermes response.