hermes-agent/website/docs/user-guide/features
Ben 4b4349eb9a feat(cron/slack): flat in-channel continuable cron delivery surface
Add a per-platform `cron_continuable_surface` extra key
(`thread` default | `in_channel`) so a continuable cron job can deliver
FLAT into a Slack channel — no dedicated thread — and still be
replied-to. In `in_channel` mode the scheduler skips the thread-open
branch (leaves `thread_id=None`); the shipped origin-mirror then seeds
the `(slack, chat_id, None)` shared-channel session — the same bucket
`reply_in_thread: false` routes inbound channel replies to — so a plain
channel reply continues the job in context.

Design: specs/cron-inchannel-continuable (D1–D7, F5). Model B
(shared-channel session), NOT anchoring to the delivery `ts` — on Slack
replying to a specific message IS threading, so a `ts` anchor would only
relocate the thread, never deliver true threadless continuable.

- gateway/platforms/base.py: `supports_inchannel_continuable` capability
  flag (default False → unsupported platforms fail SAFE to `thread`).
- plugins/platforms/slack/adapter.py: flag=True; `_cron_continuable_surface()`
  resolver (coerces to the two-value enum); `_warn_if_inchannel_without_flat_reply`
  connect-time warning (D5: warn, not hard-require — the misconfig fails safe).
- gateway/config.py: shared-key bridge line (top-level OR nested config).
- cron/scheduler.py: read the key generically from platform config, gate
  the `in_channel` branch on the adapter capability flag, skip thread-open.
  No new seed function (reuses the existing mirror — G6).

Pairing (docs): `in_channel` + `reply_in_thread: false` +
`require_mention: false` (or a free-response channel). Missing
`reply_in_thread: false` fails safe to a threaded continuation.

Gateway-side config flag — `/restart` to apply; NO Slack app reinstall.

Tests (from inside the worktree, PYTHONPATH=$PWD):
- +6 cron scheduler tests (in_channel skips thread-open; seeds flat
  channel session with thread_id=None; thread-mode regression;
  fail-safe on unsupported platform; value coercion). Prove-fail:
  removing the `and not in_channel_surface` guard turns the two
  load-bearing tests RED; restore → GREEN.
- +10 slack resolver/capability/warning tests; +2 config-bridge tests.
- tests/manual/cron_inchannel_e2e.py: offline E2E driving BOTH real
  legs (delivery seed + inbound reply keying) → both converge on
  (slack, C, None).
- No regressions: test_slack.py 216 passed alone; broader sweep green
  (4 pre-existing cross-file-ordering failures reproduce identically on
  pristine origin/main).

Docs: cron.md + slack.md + zh-Hans mirrors of both.
2026-07-01 03:16:13 -07:00
..
_category_.json
acp.md docs: comprehensive 2-week sweep of feature/PR coverage gaps (#28497) 2026-05-18 23:55:25 -07:00
api-server.md docs: deep audit — registry drift, stale claims, 2-week PR coverage, dashboard screenshot (#40952) 2026-06-07 01:39:06 -07:00
batch-processing.md fix(website): cross-locale doc links + drop empty ko locale (#31895) 2026-05-24 23:16:20 -07:00
browser.md docs: fix BROWSERBASE_SESSION_TIMEOUT unit (ms → seconds) 2026-05-29 12:06:22 -07:00
built-in-plugins.md docs: deep audit — registry drift, stale claims, 2-week PR coverage, dashboard screenshot (#40952) 2026-06-07 01:39:06 -07:00
code-execution.md fix: drain thread no longer crashes on fd-less stdout streams (#34789) 2026-05-29 12:16:57 -07:00
codex-app-server-runtime.md docs: deep audit — registry drift, stale claims, 2-week PR coverage, dashboard screenshot (#40952) 2026-06-07 01:39:06 -07:00
computer-use.md docs(computer-use): document Windows UIPI elevated-window limitation (#51121) 2026-06-23 08:41:33 -07:00
context-files.md feat(prompt): make context-file truncation limit configurable 2026-06-16 11:28:35 -07:00
context-references.md
credential-pools.md docs(credential-pools): document immediate rotation on usage-limit 429 (#34580) 2026-05-29 04:50:14 -07:00
cron.md feat(cron/slack): flat in-channel continuable cron delivery surface 2026-07-01 03:16:13 -07:00
curator.md feat(curator): make skill consolidation opt-in (prune stays default-on) (#47840) 2026-06-17 05:20:32 -07:00
delegation.md docs: reconcile docs with code across last 3 releases (#54254) 2026-06-28 12:47:50 -07:00
deliverable-mode.md docs: 30-day overhaul — correctness audit, PR coverage, Nous Portal weave, sidebar reorg (#33782) 2026-05-28 02:41:36 -07:00
extending-the-dashboard.md revert(plugins): restore user dashboard plugin backend API auto-import (#43719) (#51950) 2026-06-24 07:46:54 -07:00
fallback-providers.md feat(providers): remove google-gemini-cli + google-antigravity OAuth providers (#50492) 2026-06-21 19:53:27 -07:00
goals.md feat(goals): completion contracts for /goal — evidence-based judging (#50501) 2026-06-22 12:20:09 -07:00
honcho.md docs(honcho): clarify pinUserPeer pins only non-agent users 2026-06-15 21:34:09 +00:00
hooks.md feat(agent): add pre_verify hook and verify-on-stop coding guidance 2026-06-30 00:59:29 -05:00
image-generation.md feat(image-gen): add image-to-image / editing to image_generate (#48705) 2026-06-18 22:13:07 -07:00
kanban-tutorial.md docs(kanban): clarify decomposer profile roles 2026-06-06 19:29:00 -07:00
kanban-worker-lanes.md refactor(kanban): fold worker/orchestrator skills into injected guidance (#50473) 2026-06-21 17:06:48 -07:00
kanban.md feat(kanban): typed block reasons + unblock-loop breaker (#52848) 2026-06-25 21:46:58 -07:00
lsp.md feat(lsp): add PowerShellEditorServices language server (#55930) 2026-06-30 16:22:18 -07:00
mcp.md docs: reconcile docs with code across last 3 releases (#54254) 2026-06-28 12:47:50 -07:00
memory-providers.md feat(memory): add Supermemory setup connection summary 2026-06-27 15:07:34 +05:30
memory.md feat(background-review): aux-model selector for the self-improvement review (#49252) 2026-06-22 14:54:53 -07:00
mixture-of-agents.md feat(moa): make /moa one-shot only; route preset switching through the model picker 2026-06-27 03:09:09 -07:00
overview.md docs: 30-day overhaul — correctness audit, PR coverage, Nous Portal weave, sidebar reorg (#33782) 2026-05-28 02:41:36 -07:00
personality.md fix(website): cross-locale doc links + drop empty ko locale (#31895) 2026-05-24 23:16:20 -07:00
pets.md docs: reconcile docs with code across last 3 releases (#54254) 2026-06-28 12:47:50 -07:00
plugins.md Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
provider-routing.md docs: 30-day overhaul — correctness audit, PR coverage, Nous Portal weave, sidebar reorg (#33782) 2026-05-28 02:41:36 -07:00
skills.md feat(skills): /learn — distill a reusable skill from anything you describe (#51506) 2026-06-23 13:51:28 -07:00
skins.md fix(website): cross-locale doc links + drop empty ko locale (#31895) 2026-05-24 23:16:20 -07:00
spotify.md docs(spotify): document 6-month re-auth cycle and add client-level invalid_grant test 2026-06-20 23:23:47 -07:00
subscription-proxy.md feat(cli): make hermes portal the human-readable Portal onboarding alias 2026-06-04 01:19:28 +05:30
tool-gateway.md docs: deep audit — registry drift, stale claims, 2-week PR coverage, dashboard screenshot (#40952) 2026-06-07 01:39:06 -07:00
tool-search.md docs: reconcile docs with code across last 3 releases (#54254) 2026-06-28 12:47:50 -07:00
tools.md docs: reconcile docs with code across last 3 releases (#54254) 2026-06-28 12:47:50 -07:00
tts.md docs: stop recommending pip install; curl installer is the only supported path (#51743) 2026-06-24 00:14:32 -07:00
vision.md docs: 30-day overhaul — correctness audit, PR coverage, Nous Portal weave, sidebar reorg (#33782) 2026-05-28 02:41:36 -07:00
voice-mode.md docs: stop recommending pip install; curl installer is the only supported path (#51743) 2026-06-24 00:14:32 -07:00
web-dashboard.md docs: reconcile docs with code across last 3 releases (#54254) 2026-06-28 12:47:50 -07:00
web-search.md docs: fix incorrect web search instructions 2026-06-28 02:54:27 -07:00
x-search.md docs: 30-day overhaul — correctness audit, PR coverage, Nous Portal weave, sidebar reorg (#33782) 2026-05-28 02:41:36 -07:00