Skip to content

disable scheduler by default for acp - #10781

Merged
lifeizhou-ap merged 6 commits into
mainfrom
lifei/capability-to-disable-scheduler
Jul 29, 2026
Merged

lifeizhou-ap merged 6 commits into
mainfrom
lifei/capability-to-disable-scheduler

Conversation

@lifeizhou-ap

@lifeizhou-ap lifeizhou-ap commented Jul 29, 2026 •

Copy link
Copy Markdown
Collaborator

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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +34 to +35
if !self.config.enable_scheduler {
return Ok(None);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated the document

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +891 to +892
#[arg(long, help = "Enable scheduled recipe execution")]
enable_scheduler: bool,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@github-actions

Copy link
Copy Markdown
Contributor

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +891 to +892
#[arg(long, help = "Enable scheduled recipe execution")]
enable_scheduler: bool,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@lifeizhou-ap
lifeizhou-ap enabled auto-merge July 29, 2026 09:49
@lifeizhou-ap
lifeizhou-ap added this pull request to the merge queue Jul 29, 2026
Merged via the queue into main with commit 0b234bd Jul 29, 2026
25 of 26 checks passed
@lifeizhou-ap
lifeizhou-ap deleted the lifei/capability-to-disable-scheduler branch July 29, 2026 10:01
ccgauvin94 added a commit to ccgauvin94/goose that referenced this pull request Jul 29, 2026
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.
wpfleger96 added a commit to block/buzz that referenced this pull request Jul 29, 2026
…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]>
calvadev pushed a commit to shopstr-eng/buzz that referenced this pull request Aug 3, 2026
…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]>
BradGroux pushed a commit to BradGroux/buzz that referenced this pull request Aug 23, 2026
…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]>
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