hermes - 💡(How to fix) Fix feat: per-job enabled_toolsets for cron scheduler

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Code Example

*Before*
disabled_toolsets=["cronjob", "messaging", "clarify"],

*After*
enabled_toolsets=job.get("enabled_toolsets") or None,
disabled_toolsets=(None if job.get("enabled_toolsets") else ["cronjob", "messaging", "clarify"]),
RAW_BUFFERClick to expand / collapse

Feature Description

Allow individual cron jobs to restrict which toolsets are available during their run, via an enabled_toolsets field in the job definition.

Motivation

Cron jobs are often purpose-built workflows that only need a small subset of tools. The inbox assistant job I run daily only needs terminal, file, code_execution, skills, memory, todo, messaging — but currently it receives the full 34-tool schema (~35KB, ~8,900 tokens) on every API call.

Two concrete benefits:

  1. Cost — stripping ~14,700 bytes of unneeded tool schemas saves ~3,700 input tokens per API call. Over a 20-call cron session that's ~74,000 tokens saved per run.
  2. Focus — giving a focused job a focused toolset reduces the chance of the agent using an unexpected tool.

Proposed Solution

Add an optional enabled_toolsets list to the job schema, and pass it to AIAgent in the scheduler. When set, it takes precedence over the hardcoded disabled_toolsets list.

The change is small (~15 lines across two files):

cron/jobs.py — add enabled_toolsets parameter to create_job(), normalize it, and include it in the job dict.

cron/scheduler.py — read job.get("enabled_toolsets") and pass to AIAgent:

*Before*
disabled_toolsets=["cronjob", "messaging", "clarify"],

*After*
enabled_toolsets=job.get("enabled_toolsets") or None,
disabled_toolsets=(None if job.get("enabled_toolsets") else ["cronjob", "messaging", "clarify"]),

The cronjob tool's update action would also need to expose enabled_toolsets as a parameter so users can set it without editing jobs.json directly.

Alternatives Considered

  • Global toolset restriction via config.yaml — affects all jobs and interactive sessions, not just the targeted cron job
  • Using disabled_toolsets per-job — same idea but you'd need to enumerate everything you don't want rather than what you do want

Notes

I've prototyped this locally and it works. Happy to submit a PR if that's useful.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING