Skip to content

fix(cron): preserve skill env passthrough in worker thread - #10459

Merged
kshitijk4poor merged 1 commit into
mainfrom
salvage-7527
Apr 15, 2026
Merged

fix(cron): preserve skill env passthrough in worker thread#10459
kshitijk4poor merged 1 commit into
mainfrom
salvage-7527

Conversation

@kshitijk4poor

Copy link
Copy Markdown
Collaborator

Summary

Cherry-picked from #7527 by @helix4u onto current main.

When a cron job loads a skill that declares required_environment_variables (e.g. NOTION_API_KEY), those vars get registered in a ContextVar-based allowlist for sandbox passthrough. But the cron agent runs inside a ThreadPoolExecutor worker thread, and Python's ThreadPoolExecutor.submit() does not propagate ContextVar state. The skill's env vars are registered in the scheduler thread's context but invisible in the worker thread where the agent executes.

Fix: contextvars.copy_context() before submitting, then ctx.run(agent.run_conversation, prompt) in the worker thread. This is the standard Python pattern for ContextVar propagation into thread pools.

Bonus: This also propagates credential_files.py's _registered_files_var ContextVar — skills declaring required_credential_files now correctly pass those through in cron jobs too.

Changes

  • cron/scheduler.py: 4-line fix — contextvars.copy_context() + ctx.run() wrapper
  • tests/cron/test_scheduler.py: regression test verifying env passthrough propagates into the worker thread

Test plan

  • Cron test suite: 62/62 passed
  • E2E validated: confirmed ThreadPoolExecutor.submit() loses ContextVars without the fix, and copy_context().run() preserves them
  • E2E also confirmed credential_files ContextVar propagates correctly

@kshitijk4poor
kshitijk4poor merged commit aa398ad into main Apr 15, 2026
4 of 5 checks passed
@kshitijk4poor
kshitijk4poor deleted the salvage-7527 branch April 15, 2026 18:03
kshitijk4poor added a commit that referenced this pull request Apr 15, 2026
…gation

Follow-up to #10459 (salvage of #7527). The copy_context() fix propagates
ALL ContextVars into the cron worker thread, including credential_files.
This test verifies that skill-declared required_credential_files are
visible inside the worker thread, matching the existing env_passthrough
regression test.
kshitijk4poor added a commit that referenced this pull request Apr 15, 2026
…gation (#10462)

Follow-up to #10459 (salvage of #7527). The copy_context() fix propagates
ALL ContextVars into the cron worker thread, including credential_files.
This test verifies that skill-declared required_credential_files are
visible inside the worker thread, matching the existing env_passthrough
regression test.
kagura-agent pushed a commit to kagura-agent/hermes-agent that referenced this pull request Apr 16, 2026
…gation (NousResearch#10462)

Follow-up to NousResearch#10459 (salvage of NousResearch#7527). The copy_context() fix propagates
ALL ContextVars into the cron worker thread, including credential_files.
This test verifies that skill-declared required_credential_files are
visible inside the worker thread, matching the existing env_passthrough
regression test.
aj-nt pushed a commit to aj-nt/hermes-agent that referenced this pull request May 1, 2026
…gation (NousResearch#10462)

Follow-up to NousResearch#10459 (salvage of NousResearch#7527). The copy_context() fix propagates
ALL ContextVars into the cron worker thread, including credential_files.
This test verifies that skill-declared required_credential_files are
visible inside the worker thread, matching the existing env_passthrough
regression test.
02356abc pushed a commit to 02356abc/hermes-agent that referenced this pull request May 14, 2026
…gation (NousResearch#10462)

Follow-up to NousResearch#10459 (salvage of NousResearch#7527). The copy_context() fix propagates
ALL ContextVars into the cron worker thread, including credential_files.
This test verifies that skill-declared required_credential_files are
visible inside the worker thread, matching the existing env_passthrough
regression test.
gweeteve pushed a commit to gweeteve/hermes-agent that referenced this pull request Jun 2, 2026
…gation (NousResearch#10462)

Follow-up to NousResearch#10459 (salvage of NousResearch#7527). The copy_context() fix propagates
ALL ContextVars into the cron worker thread, including credential_files.
This test verifies that skill-declared required_credential_files are
visible inside the worker thread, matching the existing env_passthrough
regression test.
waefrebeorn pushed a commit to waefrebeorn/slermes that referenced this pull request Jul 2, 2026
…gation (NousResearch#10462)

Follow-up to NousResearch#10459 (salvage of NousResearch#7527). The copy_context() fix propagates
ALL ContextVars into the cron worker thread, including credential_files.
This test verifies that skill-declared required_credential_files are
visible inside the worker thread, matching the existing env_passthrough
regression test.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants