Repository navigation
disable scheduler by default for acp - #10781
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5c2148c2f1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if !self.config.enable_scheduler { | ||
| return Ok(None); |
There was a problem hiding this comment.
Preserve scheduling for documented remote Desktop launches
When Desktop connects to an external backend started with the documented command goose serve --platform desktop ... (documentation/docs/guides/remote-goose-server.md:28-35 and documentation/docs/guides/environment-variables.md:478-482), Clap leaves the new boolean flag false, so this branch removes the scheduler and schedule requests return method_not_found (crates/goose/src/acp/server/schedule.rs:126-132). The bundled local backend is protected because ui/desktop/src/gooseServe.ts passes --enable-scheduler, but external Desktop servers are not; after upgrading, their Scheduler page fails when it calls acpListSchedules. Either preserve scheduling for --platform desktop or update every supported external launch path to opt in.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
updated the document
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f9f3247ae4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| session_manager, | ||
| PermissionManager::instance(), | ||
| Some(scheduler), | ||
| None, |
There was a problem hiding this comment.
Preserve scheduling for gateway agents
When goose gateway start runs, crates/goose-cli/src/commands/gateway.rs obtains this global AgentManager, and GatewayHandler::relay_to_session creates every gateway chat agent from it. Passing None here makes Agent::list_tools omit the manage_schedule platform tool and prevents the gateway process from loading and running existing scheduled jobs, even though this change is intended to alter ACP defaults. Preserve a scheduler for the gateway context or make scheduler initialization caller-specific.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Gateway originally gets a scheduler only because it uses the global AgentManager. This change removes that implicit ownership. If gateway needs scheduled jobs in the future we can enable the scheduler explicitly.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 73dcf5c11b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| #[arg(long, help = "Enable scheduled recipe execution")] | ||
| enable_scheduler: bool, |
There was a problem hiding this comment.
Add the scheduler opt-in to the self-test recipe
This adds a new ACP/serve flag and changes the default scheduler behavior, but the commit does not update goose-self-test.yaml, leaving the required end-to-end recipe unable to validate either the disabled default or scheduler-enabled path. Add a self-test scenario for this behavior before relying only on the new unit tests.
AGENTS.md reference: AGENTS.md:L71-L71
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
I don’t think goose-self-test.yaml is the right place for this. This recipe validates behavior from inside a running Goose session, while this change is about how ACP/serve is started and configured.
This feature has been covered by targeted ACP/scheduler tests
| ```bash | ||
| GOOSE_SERVER__SECRET_KEY='YOUR_SECRET' \ | ||
| goose serve --platform desktop --host 0.0.0.0 --port 3000 --tls | ||
| goose serve --platform desktop --enable-scheduler --host 0.0.0.0 --port 3000 --tls |
There was a problem hiding this comment.
Enable scheduling in the launchd example
When a Desktop user follows this guide's background-service section, its copyable ProgramArguments at lines 125–136 still omits --enable-scheduler; after the service starts, the visible Scheduler page calls acpListSchedules and receives method_not_found. Fresh evidence beyond the existing comment is that the current edit fixes this one-shot command while leaving the launchd launch path in the same guide unchanged, so add the flag there as well.
Useful? React with 👍 / 👎.
|
Documentation preview deployed: https://pr-10781.goose-pr-previews-poc.pages.dev |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 94811d9867
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| #[arg(long, help = "Enable scheduled recipe execution")] | ||
| enable_scheduler: bool, |
There was a problem hiding this comment.
Enable scheduling in repository Desktop launchers
When contributors start the external Desktop backend through the repository-supported just run-server command (Justfile:145-148) or the debugging command copied from CONTRIBUTING.md:188-205, neither launch path passes this opt-in, so opening the Desktop Scheduler page makes acpListSchedules receive method_not_found. Fresh evidence beyond the prior remote-launch comment is that a repo-wide search for serve --platform desktop shows these two launch paths remain unupdated even though the remote guide and Desktop README were fixed; add --enable-scheduler to both commands.
Useful? React with 👍 / 👎.
A headless `goose serve` builds its scheduler lazily, on the first create_agent call, so nothing runs scheduled jobs until a client connects. Nobody notices in Desktop because opening the app connects, but a server left running on its own just never fires anything. The lazy OnceCell looks like migration residue rather than a decision: the old REST goosed started its scheduler at boot, and stdio `goose acp` still creates its agent immediately at startup. Start it in handle_serve_command and warn instead of failing if it does not come up, since create_agent will retry on the first connection anyway. With aaif-goose#10781 this is a no-op unless --enable-scheduler is passed.
…3576) ## Summary [#3144](#3144) injected `GOOSE_ACP_SCHEDULER_DISABLED=true` into every `AcpClient::spawn` call as a forward-compatible no-op, intended to suppress the cron scheduler in goose ACP children once the matching reader landed in goose. That reader only ever existed in [aaif-goose/goose#10738](aaif-goose/goose#10738), which was closed unmerged. [goose#10781](aaif-goose/goose#10781) (Lifei Zhou, merged 2026-07-29) disables the ACP scheduler by default at the source: `goose acp` now requires `--enable-scheduler` to start a scheduler. Buzz-spawned children therefore get no scheduler with zero configuration — making the `GOOSE_ACP_SCHEDULER_DISABLED` injection permanently dead code. ## What changes Removes from `crates/buzz-acp/src/acp.rs`: - `GOOSE_SCHEDULER_DISABLED_ENV` constant - `cmd.env(GOOSE_SCHEDULER_DISABLED_ENV, "true")` injection in `AcpClient::spawn` - `spawn_injects_scheduler_disabled_env_by_default` test - `spawn_scheduler_disabled_env_overrides_conflicting_extra_env` test - `spawn_and_read_child_env` helper (unreferenced once the two tests above are gone) No other files are affected. ## Why now Leaving dead code that references an env var no reader will ever consume misleads future maintainers about the actual scheduler-isolation mechanism. The isolation is now an upstream default, not a Buzz injection. Reverts: [#3144](#3144) Related: [aaif-goose/goose#10781](aaif-goose/goose#10781) Signed-off-by: Will Pfleger <[email protected]>
…lock#3576) ## Summary [block#3144](block#3144) injected `GOOSE_ACP_SCHEDULER_DISABLED=true` into every `AcpClient::spawn` call as a forward-compatible no-op, intended to suppress the cron scheduler in goose ACP children once the matching reader landed in goose. That reader only ever existed in [aaif-goose/goose#10738](aaif-goose/goose#10738), which was closed unmerged. [goose#10781](aaif-goose/goose#10781) (Lifei Zhou, merged 2026-07-29) disables the ACP scheduler by default at the source: `goose acp` now requires `--enable-scheduler` to start a scheduler. Buzz-spawned children therefore get no scheduler with zero configuration — making the `GOOSE_ACP_SCHEDULER_DISABLED` injection permanently dead code. ## What changes Removes from `crates/buzz-acp/src/acp.rs`: - `GOOSE_SCHEDULER_DISABLED_ENV` constant - `cmd.env(GOOSE_SCHEDULER_DISABLED_ENV, "true")` injection in `AcpClient::spawn` - `spawn_injects_scheduler_disabled_env_by_default` test - `spawn_scheduler_disabled_env_overrides_conflicting_extra_env` test - `spawn_and_read_child_env` helper (unreferenced once the two tests above are gone) No other files are affected. ## Why now Leaving dead code that references an env var no reader will ever consume misleads future maintainers about the actual scheduler-isolation mechanism. The isolation is now an upstream default, not a Buzz injection. Reverts: [block#3144](block#3144) Related: [aaif-goose/goose#10781](aaif-goose/goose#10781) Signed-off-by: Will Pfleger <[email protected]>
…lock#3576) ## Summary [block#3144](block#3144) injected `GOOSE_ACP_SCHEDULER_DISABLED=true` into every `AcpClient::spawn` call as a forward-compatible no-op, intended to suppress the cron scheduler in goose ACP children once the matching reader landed in goose. That reader only ever existed in [aaif-goose/goose#10738](aaif-goose/goose#10738), which was closed unmerged. [goose#10781](aaif-goose/goose#10781) (Lifei Zhou, merged 2026-07-29) disables the ACP scheduler by default at the source: `goose acp` now requires `--enable-scheduler` to start a scheduler. Buzz-spawned children therefore get no scheduler with zero configuration — making the `GOOSE_ACP_SCHEDULER_DISABLED` injection permanently dead code. ## What changes Removes from `crates/buzz-acp/src/acp.rs`: - `GOOSE_SCHEDULER_DISABLED_ENV` constant - `cmd.env(GOOSE_SCHEDULER_DISABLED_ENV, "true")` injection in `AcpClient::spawn` - `spawn_injects_scheduler_disabled_env_by_default` test - `spawn_scheduler_disabled_env_overrides_conflicting_extra_env` test - `spawn_and_read_child_env` helper (unreferenced once the two tests above are gone) No other files are affected. ## Why now Leaving dead code that references an env var no reader will ever consume misleads future maintainers about the actual scheduler-isolation mechanism. The isolation is now an upstream default, not a Buzz injection. Reverts: [block#3144](block#3144) Related: [aaif-goose/goose#10781](aaif-goose/goose#10781) Signed-off-by: Will Pfleger <[email protected]>
Summary
ACP servers now start without a scheduler by default. Callers that need scheduled recipe execution can pass
--enable-scheduler.Goose Desktop enables it explicitly, while callers such as orchestrator and gateway avoid starting an unused scheduler. I will also update the other clients (Berd) to enable it.
Testing
Unit and Manual
Context
block/buzz#3144. It was planned to use an environment to disable scheduler. This help us understand most of the acp client may not need scheduler by default. for example using goose acp in Zed. So it is good to disable it by default.