feat: Profile-scoped cron with parallel execution (#334) #494
Closed
Rockachopa
wants to merge 251 commits from
feat/334-profile-scoped-cron into main
pull from: feat/334-profile-scoped-cron
merge into: Timmy_Foundation:main
Timmy_Foundation:main
Timmy_Foundation:fix/664
Timmy_Foundation:fix/665
Timmy_Foundation:feat/43-context-rag-decision-framework
Timmy_Foundation:fix/667
Timmy_Foundation:fix/672
Timmy_Foundation:fix/742
Timmy_Foundation:claude/issue-695
Timmy_Foundation:fix/666
Timmy_Foundation:fix/744-gateway-cron-notification-drop
Timmy_Foundation:fix/663
Timmy_Foundation:fix/670
Timmy_Foundation:fix/740
Timmy_Foundation:fix/741
Timmy_Foundation:fix/752
Timmy_Foundation:fix/753
Timmy_Foundation:fix/755
Timmy_Foundation:fix/754
Timmy_Foundation:fix/222
Timmy_Foundation:fix/746
Timmy_Foundation:fix/cron-delivery-retry-744
Timmy_Foundation:fix/743
Timmy_Foundation:fix/756
Timmy_Foundation:fix/747
Timmy_Foundation:fix/744
Timmy_Foundation:fix/705
Timmy_Foundation:fix/745
Timmy_Foundation:fix/668-api
Timmy_Foundation:fix/748
Timmy_Foundation:fix/749
Timmy_Foundation:fix/695
Timmy_Foundation:fix/725
Timmy_Foundation:fix/712
Timmy_Foundation:fix/669
Timmy_Foundation:fix/issue-734
Timmy_Foundation:fix/734
Timmy_Foundation:burn/714-1776218235
Timmy_Foundation:burn/713-1776218256
Timmy_Foundation:burn/714-1776218190
Timmy_Foundation:fix/693-crisis-notification-integration
Timmy_Foundation:fix/issue-642-1
Timmy_Foundation:fix/issue-702-7
Timmy_Foundation:fix/issue-701-8
Timmy_Foundation:fix/issue-692-3
Timmy_Foundation:fix/issue-706-6
Timmy_Foundation:fix/issue-694-1
Timmy_Foundation:fix/issue-645-6
Timmy_Foundation:fix/issue-707-5
Timmy_Foundation:fix/issue-708-4
Timmy_Foundation:fix/issue-643-8
Timmy_Foundation:fix/issue-711-3
Timmy_Foundation:fix/issue-714-1
Timmy_Foundation:fix/issue-713-2
Timmy_Foundation:fix/issue-644-7
Timmy_Foundation:fix/cron-schedule-parse-error
Timmy_Foundation:burn-681-1776207280
Timmy_Foundation:burn-677-1776207278
Timmy_Foundation:burn-679-1776207283
Timmy_Foundation:feat/670-approval-tiers
Timmy_Foundation:feat/679-crisis-wiring
Timmy_Foundation:feat/674-atlas-inference-engine
Timmy_Foundation:burn-677-1776207287
Timmy_Foundation:feat/atlas-provider
Timmy_Foundation:feat/671-hybrid-search
Timmy_Foundation:fix/677-crisis-hook
Timmy_Foundation:feat/673-988-crisis-escalation
Timmy_Foundation:feat/672-soul-crisis-protocol
Timmy_Foundation:burn-679-1776207276
Timmy_Foundation:fix/673-crisis-hook-integration
Timmy_Foundation:burn-681-1776207273
Timmy_Foundation:fix/677-crisis-hook-integration
Timmy_Foundation:fix/672-crisis-protocol
Timmy_Foundation:feat/681-path-aware-risk
Timmy_Foundation:feat/671-hybrid-search-router
Timmy_Foundation:feat/667-context-faithful-prompting
Timmy_Foundation:fix/670-approval-tiers
Timmy_Foundation:feat/672-crisis-protocol
Timmy_Foundation:feat/673-988-lifeline
Timmy_Foundation:burn/validate-action-pokayoke
Timmy_Foundation:fix/693-test-branch
Timmy_Foundation:perf/lazy-session-creation
Timmy_Foundation:fix/624-error-context
Timmy_Foundation:fix/626-validate-feedback
Timmy_Foundation:fix/614-multilingual-shield
Timmy_Foundation:claude/issue-628
Timmy_Foundation:claude/issue-613
Timmy_Foundation:dispatch/350-1776180746
Timmy_Foundation:dispatch/295-1776180746
Timmy_Foundation:dispatch/329-1776180746
Timmy_Foundation:dispatch/372-1776180746
Timmy_Foundation:dispatch/327-1776180746
Timmy_Foundation:dispatch/326-1776180746
Timmy_Foundation:dispatch/296-1776180746
Timmy_Foundation:dispatch/375-1776180746
Timmy_Foundation:dispatch/321-1776180746
Timmy_Foundation:dispatch/324-1776180746
Timmy_Foundation:claude/issue-592
Timmy_Foundation:fix/582-shield-tool-args
Timmy_Foundation:claude/issue-579
Timmy_Foundation:am/350-1776166469
Timmy_Foundation:am/326-1776166469
Timmy_Foundation:am/329-1776166469
Timmy_Foundation:am/295-1776166469
Timmy_Foundation:am/322-1776166469
Timmy_Foundation:am/327-1776166469
Timmy_Foundation:am/378-1776166469
Timmy_Foundation:am/372-1776166469
Timmy_Foundation:am/288-1776166469
Timmy_Foundation:am/296-1776166469
Timmy_Foundation:am/321-1776166469
Timmy_Foundation:am/324-1776166469
Timmy_Foundation:am/375-1776166469
Timmy_Foundation:claude/issue-565
Timmy_Foundation:dawn/295-1776130053
Timmy_Foundation:triage/295-1776129677
Timmy_Foundation:claude/issue-556
Timmy_Foundation:q/295-1776129480
Timmy_Foundation:dawn/326-1776130053
Timmy_Foundation:fix/538-context-pressure-threshold
Timmy_Foundation:fix/561-ssh-dispatch
Timmy_Foundation:dawn/322-1776130053
Timmy_Foundation:dawn/372-1776130053
Timmy_Foundation:triage/326-1776129677
Timmy_Foundation:dawn/350-1776130053
Timmy_Foundation:dawn/378-1776130053
Timmy_Foundation:dawn/329-1776130053
Timmy_Foundation:triage/322-1776129677
Timmy_Foundation:triage/372-1776129677
Timmy_Foundation:dawn/327-1776130053
Timmy_Foundation:feat/505-session-templates
Timmy_Foundation:triage/378-1776129677
Timmy_Foundation:triage/350-1776129677
Timmy_Foundation:q/372-1776129480
Timmy_Foundation:triage/329-1776129677
Timmy_Foundation:triage/327-1776129677
Timmy_Foundation:q/322-1776129480
Timmy_Foundation:q/378-1776129480
Timmy_Foundation:dawn/296-1776130053
Timmy_Foundation:fix/500-cloud-context-warning
Timmy_Foundation:queue/372-1776129201
Timmy_Foundation:dawn/324-1776130053
Timmy_Foundation:q/327-1776129480
Timmy_Foundation:q/329-1776129480
Timmy_Foundation:queue/378-1776129201
Timmy_Foundation:dawn/288-1776130053
Timmy_Foundation:q/350-1776129480
Timmy_Foundation:triage/296-1776129677
Timmy_Foundation:triage/324-1776129677
Timmy_Foundation:fix/499-hardcoded-paths
Timmy_Foundation:q/324-1776129480
Timmy_Foundation:q/296-1776129480
Timmy_Foundation:queue/322-1776129201
Timmy_Foundation:queue/327-1776129201
Timmy_Foundation:queue/324-1776129201
Timmy_Foundation:q/326-1776129480
Timmy_Foundation:queue/296-1776129201
Timmy_Foundation:queue/350-1776129201
Timmy_Foundation:fix/478-tilde-expand
Timmy_Foundation:fix/478-tilde-expansion
Timmy_Foundation:queue/329-1776129201
Timmy_Foundation:fix/478-hermes-home-tilde-expand
Timmy_Foundation:fix/468-cron-cloud-context
Timmy_Foundation:fix/479-optional-skills-hardcoded-paths
Timmy_Foundation:fix/479-hardcoded-paths
Timmy_Foundation:q/316-1776129677
Timmy_Foundation:q/288-1776129480
Timmy_Foundation:whip/326-1776128804
Timmy_Foundation:dawn/375-1776130053
Timmy_Foundation:fix/375-deploy-crons-model-provider-comparison
Timmy_Foundation:whip/324-1776128804
Timmy_Foundation:burn/456-1776129600
Timmy_Foundation:triage/375-1776129677
Timmy_Foundation:fix/468-1776128804
Timmy_Foundation:q/375-1776129480
Timmy_Foundation:whip/372-1776128804
Timmy_Foundation:queue/375-1776129201
Timmy_Foundation:queue/288-1776129201
Timmy_Foundation:fix/457-ssh-dispatch-validation
Timmy_Foundation:whip/350-1776128804
Timmy_Foundation:whip/251-1776128804
Timmy_Foundation:fix/456-cloud-context-warning
Timmy_Foundation:queue/321-1776129201
Timmy_Foundation:whip/378-1776128804
Timmy_Foundation:whip/322-1776128804
Timmy_Foundation:whip/327-1776128804
Timmy_Foundation:whip/329-1776128804
Timmy_Foundation:whip/288-1776128804
Timmy_Foundation:whip/327-1776127281
Timmy_Foundation:whip/375-1776128804
Timmy_Foundation:whip/321-1776128804
Timmy_Foundation:dispatch/288-1776180746
Timmy_Foundation:triage/288-1776129677
Timmy_Foundation:whip/296-1776128804
Timmy_Foundation:whip/293-1776127532
Timmy_Foundation:whip/350-1776127532
Timmy_Foundation:whip/372-1776127532
Timmy_Foundation:whip/378-1776127532
Timmy_Foundation:whip/329-1776127532
Timmy_Foundation:whip/322-1776127532
Timmy_Foundation:whip/316-1776127532
Timmy_Foundation:whip/321-1776127532
Timmy_Foundation:whip/326-1776127532
Timmy_Foundation:whip/327-1776127532
Timmy_Foundation:whip/314-1776127532
Timmy_Foundation:whip/288-1776127532
Timmy_Foundation:whip/375-1776127532
Timmy_Foundation:burn/274-1776126523
Timmy_Foundation:burn/275-1776126523
Timmy_Foundation:burn/293-1776126523
Timmy_Foundation:burn/273-1776126523
Timmy_Foundation:burn/299-1776126523
Timmy_Foundation:burn/272-1776126523
Timmy_Foundation:burn/350-1776125702
Timmy_Foundation:burn/372-1776125702
Timmy_Foundation:burn/329-1776125702
Timmy_Foundation:burn/328-1776125702
Timmy_Foundation:burn/379-1776125702
Timmy_Foundation:burn/327-1776125702
Timmy_Foundation:burn/317-1776125702
Timmy_Foundation:burn/373-1776125702
Timmy_Foundation:burn/349-1776125702
Timmy_Foundation:burn/326-1776125702
Timmy_Foundation:burn/322-1776125702
Timmy_Foundation:queue/326-1776129201
Timmy_Foundation:burn/350-1776120221
Timmy_Foundation:burn/372-1776120221
Timmy_Foundation:burn/324-1776120221
Timmy_Foundation:burn/328-1776120221
Timmy_Foundation:burn/373-1776120221
Timmy_Foundation:burn/329-1776120221
Timmy_Foundation:burn/349-1776120221
Timmy_Foundation:burn/323-1776120221
Timmy_Foundation:burn/322-1776120221
Timmy_Foundation:burn/326-1776120221
Timmy_Foundation:burn/327-1776120221
Timmy_Foundation:burn/317-1776120221
Timmy_Foundation:burn/320-1776120221
Timmy_Foundation:burn/251-1776117799
Timmy_Foundation:burn/378-1776117791
Timmy_Foundation:burn/375-1776117778
Timmy_Foundation:burn/379-1776117790
Timmy_Foundation:burn/376-1776117777
Timmy_Foundation:burn/349-1776117786
Timmy_Foundation:burn/254-1776117794
Timmy_Foundation:burn/350-1776117787
Timmy_Foundation:burn/252-1776117800
Timmy_Foundation:burn/262-1776117798
Timmy_Foundation:burn/372-1776117789
Timmy_Foundation:burn/282-1776117784
Timmy_Foundation:burn/284-1776117781
Timmy_Foundation:burn/373-1776117779
Timmy_Foundation:burn/285-1776117782
Timmy_Foundation:burn/377-1776117775
Timmy_Foundation:burn/280-1776117796
Timmy_Foundation:burn/acp-272-1776117838
Timmy_Foundation:burn/255-1776117795
Timmy_Foundation:burn/286-1776117783
Timmy_Foundation:burn/web-console-325
Timmy_Foundation:burn/253-1776117793
Timmy_Foundation:burn/321-1776120221
Timmy_Foundation:burn/321-1776125702
Timmy_Foundation:burn/profile-cron-334
Timmy_Foundation:burn/prompt-injection-324
Timmy_Foundation:burn/skill-revert-295
Timmy_Foundation:burn/context-overflow-296
Timmy_Foundation:burn/honcho-eval-322
Timmy_Foundation:burn/privacy-filter-283
Timmy_Foundation:burn/model-benchmark-287
Timmy_Foundation:burn/20260413-1705-fix-token-tracking
Timmy_Foundation:feat/marathon-session-limits-326
Timmy_Foundation:fix/poka-yoke-hardcoded-paths
Timmy_Foundation:feat/315-session-gc
Timmy_Foundation:feature/time-aware-model-routing-317
Timmy_Foundation:fix/gateway-config-debt-328
Timmy_Foundation:feat/lazy-session-creation
Timmy_Foundation:burn/378-1776120221
Timmy_Foundation:fix/weak-credential-guard
Timmy_Foundation:fix/tool-return-type-validation
Timmy_Foundation:fix/memory-no-match-not-error
Timmy_Foundation:feat/temporal-decay-holographic-memory
Timmy_Foundation:fix/syntax-preflight-execute-code
Timmy_Foundation:fix/cron-script-failure-detection
Timmy_Foundation:fix/empty-model-preflight
Timmy_Foundation:fix/cron-sync-guard-v2
Timmy_Foundation:fix/cron-interpreter-shutdown-352
Timmy_Foundation:feat/error-circuit-breaker
Timmy_Foundation:fix/circuit-breaker-error-cascade
Timmy_Foundation:feat/cron-run-now
Timmy_Foundation:ci/fix-mempalace-syntax
Timmy_Foundation:claude/issue-351
Timmy_Foundation:fix/cron-tick-backlog
Timmy_Foundation:feat/deploy-sync-guard
Timmy_Foundation:feat/20260413-cron-agent-kwargs
Timmy_Foundation:feat/profile-scoped-cron
Timmy_Foundation:fix/cron-ticker-startup
Timmy_Foundation:fix/empirical-audit-hardening
Timmy_Foundation:feat/skills-index-workflow
Timmy_Foundation:fix/credential-guard
Timmy_Foundation:feat/research-paper-scaffolder
Timmy_Foundation:feat/cron-tool-choice-propagation
Timmy_Foundation:perplexity/provider-allowlist
Timmy_Foundation:fix/json-repair-for-tool-calls
Timmy_Foundation:feat/context-rag-decision-framework
Timmy_Foundation:census/feature-inventory
Timmy_Foundation:fix/ci-stability
Timmy_Foundation:burn/20260410-1649-277-memory-remove-bridge
Timmy_Foundation:keymaxx/mimoomni/243
Timmy_Foundation:burn/20260410-0744-matrix-wire
Timmy_Foundation:burn/20260410-0707-browser-integration
Timmy_Foundation:feature/improve-sovereignty-justification
Timmy_Foundation:burn/20260409-2111-memory-budget
Timmy_Foundation:burn/20260409-2105-memory-sovereignty
Timmy_Foundation:burn/20260409-2051-263-memory-architecture-guide
Timmy_Foundation:burn/20260409-1242-memory-docs
Timmy_Foundation:claude/issue-1135
Timmy_Foundation:feat/mempalace-portal-1775695506634
Timmy_Foundation:feat/ci-no-duplicate-models
Timmy_Foundation:feat/mempalace-tool-1775642243437
Timmy_Foundation:bezalel/ci-provider-duplicate-check
Timmy_Foundation:bezalel/self-awareness-epic-203
Timmy_Foundation:fix/kimi-fallback-model
Timmy_Foundation:bezalel/pr-215-rescue
Timmy_Foundation:perplexity/mempalace-tests
Timmy_Foundation:upstream-sync
Timmy_Foundation:bezalel/fix-gitea-ci-runner-host-mode
Timmy_Foundation:claude/issue-192
Timmy_Foundation:claude/issue-190
Timmy_Foundation:bezalel/fix-indentation-error
Timmy_Foundation:bezalel/gitea-workflow-skill
Timmy_Foundation:rescue/ollama-provider
Timmy_Foundation:rescue/v011-obfuscation-fix
Timmy_Foundation:claw-code/issue-151
Timmy_Foundation:claw-code/issue-126
Timmy_Foundation:groq/issue-168
Timmy_Foundation:timmy/issue-169-ollama-provider
Timmy_Foundation:gemini/issue-24
Timmy_Foundation:bezalel/syntax-guard-ci
Timmy_Foundation:claude/issue-128
Timmy_Foundation:claude/issue-142
Timmy_Foundation:claude/issue-133
Timmy_Foundation:claude/issue-143
Timmy_Foundation:claude/issue-146
Timmy_Foundation:claude/issue-155
Timmy_Foundation:claude/issue-147
Timmy_Foundation:claude/issue-148
Timmy_Foundation:bezalel/notebook-workflow-demo
Timmy_Foundation:claude/issue-149
Timmy_Foundation:bezalel/forge-health-check
Timmy_Foundation:epic-999-phase-ii-forge
Timmy_Foundation:allegro/m1-stop-protocol
Timmy_Foundation:timmy/issue-123-process-resilience
Timmy_Foundation:timmy/issue-116-config-validation
Timmy_Foundation:epic-999-phase-i
Timmy_Foundation:security/v-011-skills-guard-bypass
Timmy_Foundation:gemini/security-hardening
Timmy_Foundation:gemini/sovereign-gitea-client
Timmy_Foundation:timmy-custom
Timmy_Foundation:security/fix-oauth-session-fixation
Timmy_Foundation:security/fix-skills-path-traversal
Timmy_Foundation:security/fix-file-toctou
Timmy_Foundation:security/fix-error-disclosure
Timmy_Foundation:security/add-rate-limiting
Timmy_Foundation:security/fix-browser-cdp
Timmy_Foundation:security/fix-docker-privilege
Timmy_Foundation:security/fix-auth-bypass
Timmy_Foundation:fix/sqlite-contention
Timmy_Foundation:tests/security-coverage
Timmy_Foundation:security/fix-race-condition
Timmy_Foundation:security/fix-ssrf
Timmy_Foundation:security/fix-secret-leakage
Timmy_Foundation:feat/gen-ai-evolution-phases-19-21
Timmy_Foundation:feat/gen-ai-evolution-phases-16-18
Timmy_Foundation:feat/gen-ai-evolution-phases-13-15
Timmy_Foundation:security/fix-path-traversal
Timmy_Foundation:security/fix-command-injection
Timmy_Foundation:feat/gen-ai-evolution-phases-10-12
Timmy_Foundation:feat/gen-ai-evolution-phases-7-9
Timmy_Foundation:feat/gen-ai-evolution-phases-4-6
Timmy_Foundation:feat/gen-ai-evolution-phases-1-3
Timmy_Foundation:feat/sovereign-evolution-redistribution
Timmy_Foundation:feat/apparatus-verification
Timmy_Foundation:feat/sovereign-intersymbolic-ai
Timmy_Foundation:feat/sovereign-learning-system
Timmy_Foundation:feat/sovereign-reasoning-engine
Labels
Clear labels
CI
QA
assigned-claw-code
assigned-kimi
audit-finding
batch-pipeline
blocked
bug
claw-code-done
claw-code-in-progress
critical
duplicate
epic
epic:memory
gaming
infra
kimi-done
kimi-in-progress
mcp
morrowind
needs-review
ops
p0-critical
p1-important
phase:1-activate
phase:2-operational
phase:3-episodic
phase:4-hygiene
phase:5-integration
poka-yoke
research
security
shared-infra
stale
throughput-10x
token-masterplan
tool-evaluation
velocity-engine
wont-fix
Continuous integration, runners, workflow issues
Quality assurance, testing, production audit
Queued for Code Claw (qwen/openrouter)
Task assigned to KimiClaw for processing
batch-pipeline label
Blocked by external dependency or merge conflict
Code Claw completed this task
Code Claw is actively working
Duplicate of another issue
Epic - large feature with multiple sub-tasks
Unified Memory Architecture epic
Gaming agent capabilities
Infrastructure, VPS, DNS, deployment
KimiClaw has completed this task
KimiClaw is actively working on this
MCP (Model Context Protocol) tools & servers
Morrowind Agent gameplay & MCP integration
PR or issue requires reviewer sign-off before merge/close
Phase 1: Activate existing systems
Phase 2: Operational memory bridge
Phase 3: Proactive episodic recall
Phase 4: Memory hygiene and quality
Phase 5: Integration and testing
Security hardening, vulnerability fixes
Shared infrastructure across projects (Playground + LPM)
No activity, pending triage or closure
throughput-10x label
token-masterplan label
Auto-generated by velocity engine
Closed as intentionally not fixing — explicit descope
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Assignees
Rockachopa
Timmy
allegro
antigravity
bezalel
claude
claw-code
codex-agent
ezra
gemini
google
grok
hermes
kimi
manus
perplexity
sonnet
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Timmy_Foundation/hermes-agent#494
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "feat/334-profile-scoped-cron"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #334
What
Profile isolation for cron jobs: each job resolves its profile, loads that profile's config.yaml + .env, sets HERMES_ACTIVE_PROFILE. Parallel execution within profiles.
Why
Currently all cron jobs share one profile context. Profile isolation enables:
Implementation
1. Job Structure (
cron/jobs.py)profileparameter tocreate_job()profilefield to job dict2. Scheduler (
cron/scheduler.py)HERMES_ACTIVE_PROFILEenvironment variable.envfrom~/.hermes/profiles/PROFILE/.envconfig.yamlfrom~/.hermes/profiles/PROFILE/config.yaml3. CLI (
tools/cronjob_tools.py)profileparameter tocronjob()functioncreate_job()_format_job()output4. CLI Commands (
hermes_cli/main.py,hermes_cli/cron.py)--profile/-pargument tocron createandcron editcron_create()andcron_edit()to pass profile to APIcron_list()to display profile name when setUsage
Profile Directory Structure
Environment Variables
HERMES_ACTIVE_PROFILE: Set to profile name when job runs with profileprofiles/PROFILE/.envParallel Execution
Jobs with different profiles can run in parallel without cross-contamination:
Files Changed
cron/jobs.py: Added profile parameter and fieldcron/scheduler.py: Added profile-specific config loadingtools/cronjob_tools.py: Added profile parameter to cronjob toolhermes_cli/main.py: Added --profile argument to cron create/edithermes_cli/cron.py: Added profile handling and displayTesting
Profile-scoped cron execution is a useful feature. The implementation touches the right places (jobs.py, scheduler.py, CLI, and cronjob_tools.py). Some concerns:
override=Truewhich means it will overwrite env vars from the global .env — this is probably intentional but should be documented clearly.profilevariable is re-read viajob.get("profile")twice in run_job() — once early for env setup and again for config loading. Should be read once and stored.Overall the approach is sound. Consider failing the job if the profile directory does not exist rather than silently falling through.
Archived after upstream sync to NousResearch/hermes-agent.
Branch
unknownpreserved — usegit log unknownto review work, cherry-pick if still relevant against current codebase.Pull request closed