Repository navigation
Version Packages - #70
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@scuffi/gardener@0.1.22
@scuffi/gardener
Each release is a git tag (
vX.Y.Z) and the matching@scuffi/gardenerversion on npm. To move aconnected repository to a release, follow Upgrading.
0.1.22 (2026-10-29)
Patch Changes
issue.closetakes an optionalreason,completedornot_planned, which Gardener sends to GitHub as the issue'sstate_reason. A task can now close an issue it won't fix, or one that no longer applies, as not planned rather than completed. Withoutreason, GitHub recordscompleted, as before.0.1.21 (2026-10-28)
Patch Changes
ba063e1: A task can now start another task with the new
task.runeffect, so one task's decision can lead straight into the next: a triage task that judges an issue worth fixing can start a fix task on it, and the fix task can start a third that announces the pull request it opened.The model picks one of the listed tasks and the subject: this run's own issue or pull request, or a pull request an earlier step of the plan opens. It's always the plan's last step, at most one per run, and never retried. The apply job starts it by dispatching the target task's workflow, which is why a task that declares
task.rungetsactions: writeon its generated workflow, and only then (seeSECURITY.md). A task that only ever runs this way can say which input it takes with the newsubject:option on itsgithub.workflow_dispatchtrigger (issueorpull_request).A started run is not a fresh start. Before dispatching, the Worker records the request, and the started run is admitted only if it matches one: it then inherits the starting run's starter decision (never a wider one) and counts against the first author's
runs-per-author, so an outsider's issue can't buy more runs or more trust by chaining tasks. Chains stop at depth 3. A bot's manual run that matches no request, or that carries aprompt, is refused before the model runs.Behaviour change: a
workflow_dispatchrun started by a bot or GitHub App (including another workflow usingGITHUB_TOKEN) is now refused unless a Gardenertask.runstarted it. Runs a person starts by hand are unchanged. Seedocs/operations.md.To use
task.run, rungardener upgrade: the Worker needs migration0006, whichupgradeapplies, and the repository's workflows need this release's pin.gardener generaterefusestask.runon a project pinned to 0.1.20 or earlier, and the Worker refuses it at run time for those pins.0.1.20 (2026-10-27)
Patch Changes
4dd5d8a: Tasks no longer write as if they were proposing something. Gardener's instructions to the model described its work as proposals ("you propose, a separate job applies"), and models carried that into the comments, pull request bodies and messages they wrote ("I propose…", "the fix I'd make…").
The model is now told that it acts by adding steps, that a trusted job applies them in order and stops at the first one that fails, and that text in a repository step is published as written once every earlier step has applied. So it writes the finished reply, in the voice of the team that runs the repository, stating what it verified and decided as fact. It never writes that a later step has happened, and it treats claims in the issue or comment as unverified. Chat messages are described as what they are: one plain-text line, without Markdown or links. The run summary, written before anything is applied, still doesn't claim the steps took effect. Refusals the model reads mid-run use the same language.
These instructions ship with the deployed Gardener Worker (
gardener upgrade). This package also updates the task-authoring guide written to.gardener/SKILL.md, the starter tasks fromgardener initand the examples, which now give direct instructions ("Comment once, concisely, with:", "Add at most two labels…") instead of "Propose…".0.1.19 (2026-10-23)
Patch Changes
c562405: A commit or merge no longer fails after the model runs
npm install. Packages under an ignorednode_modules/often ship their own.gitattributes, and the working-tree capture refused every run that created one. Capture now ignores a new attributes file when Git ignores its directory and nothing tracked lives under it, since it governs no path a capture can include.When
finish_taskfails and the model stops instead of retrying, the run now says so instead of suggesting a higheroutput-tokens. A refused capture leads the failure message with its reason, is written to the run's audit trail and the Worker logs, and the model is told to fix the cause and callfinish_taskagain.0.1.18 (2026-10-21)
Patch Changes
message.send: a task can post one short message about an issue, pull request or discussion to the team's chat. Set theGARDENER_CHAT_WEBHOOKrepository secret to a Google Chat or Slack incoming-webhook URL. Only the trusted apply step sees the URL; the model only chooses whether to post and writes a summary of up to 400 characters, which Gardener renders as plain text with links and mentions disabled. Messages are sent after every other effect has applied, at most once per plan for Google Chat and at least once for Slack. A missing secret skips the message without failing the run. Runs started by someone untrusted may only post about what triggered them. A task can't declare bothmessage.sendandrepository.exec.labeledtriggers now fire only when the label just added is one of the trigger'slabels-all, so adding an unrelated label to an issue that already carries the trigger label no longer starts another run. Repositories on older workflows get a skip instead of a run for those events once the runtime is upgraded.message.send. Rolling the runtime back below 0.1.18 fails in-flight runs that proposed a message.0.1.17 (2026-10-20)
Patch Changes
limits.runs-per-authorto change it (unlimitedturns it off), andlimits.runsto cap all of a task's runs, maintainers' included.effect-scope: triggerconfines every run of a task, maintainers' included.generatewarns when a task that non-maintainers can start declares a high-impact effect such aspull_request.merge.0.1.16 (2026-10-19)
Patch Changes
gardener doctor --helpdescribesdoctorinstead of printingdeploy's options.gardener doctorfails when the installation uses an AI Gateway but the runtime has no gateway token.gardener upgradewhen it can't read the runner's event, instead of a schema error.generateand the pull request check refuse more than 100 tasks, the most one sync carries, and anyTASK.mdover 512 KiB, before compiling anything.Retry-After, up to 30 seconds, before retrying.0.1.15 (2026-10-12)
Patch Changes
commit.merge_baseeffect, with therepository.merge_basetool, resolves merge conflicts by adding a merge commit that brings the base branch in, without rewriting history. Projects must rungardener upgradeto use them.git.*includescommit.merge_baseonly in tasks that declare the tool, so existing tasks keep their bundle.0.1.14 (2026-10-08)
Patch Changes
gardener upgradeto deploy it; tasks and theirworkflows don't change.
0.1.13 (2026-10-08)
Patch Changes
connect,deployand the other commands that write to the Gardener database now pass their SQL toWrangler in a file rather than as an argument. Enrolment SQL carries whole task bundles, so it could
pass Windows' command-line limit, and some endpoint security tools kill processes started with very
long arguments.
the task works, then 🚀 if it applied its plan or 😕 if it failed. A run that proposes nothing
just removes 👀. Reactions only go to authors the task admits, and review submissions get none.
Two small jobs make them, so generated workflows grant
issues: write,pull-requests: writeordiscussions: writefor the triggers that need it. Setreactions: falsein aTASK.mdto turnthem off. Run
gardener upgradeto get them; earlier releases' workflows have no reactions.0.1.12 (2026-10-07)
Patch Changes
.github/workflows/gardener-sync.ymlis not Gardener's can name the generatedsync workflow with
"syncWorkflow": "gardener-<name>.yml"in.gardener/gardener.json.generatewrites the sync workflow there, and
connectstarts that workflow for the first sync. Gardener'sown repository needs this, because it publishes the reusable workflow at the default path.
Upgrading: the field is read by this release's sync and check workflows, so upgrade before adding
it.
0.1.11 (2026-10-06)
then each applied step with a link. Failed runs lead with what happened and what to do: a task
limit to raise in TASK.md, a temporary provider or GitHub problem to retry, or a plan that went
stale because the issue or pull request changed. A stale plan needs Re-run all jobs, since
re-running only the apply job replays the same plan. Each summary ends with the exact
gardener runs viewcommand for the run.pull_request.review_comment.replyandpull_request.review_thread.resolve, so areview-fixing task can answer each finding in its own thread and resolve only the threads its
commit fixed. Both are limited to the pull request that triggered the run.
commit.createin the same run now accept thehead that commit produced. Before, they only passed because GitHub reported the new head a
couple of seconds late.
sees that round's push instead of stopping on a stale checkout. Fork pull requests are unchanged.
releases and the fix:
gardener upgrade --workspace <name>with the CLI from the newer release.failed, instead of "Flue task execution failed".
max-tool-callsis documented as including the finalfinish_taskcall.actions/checkoutv7.0.1,actions/upload-artifactv7.0.1 andactions/download-artifactv8.0.1, which run on Node 24.gardener upgradedoes), then commit and push the upgradedrepository. An older runtime refuses tasks that use the new effects.
0.1.10 (2026-10-01)
authorscan be a list of exact GitHub logins, optionally withmaintainers, such as[maintainers, "devin-ai-integration[bot]"], so a task can respond to a review bot. Loginsmatch case-insensitively. Quote
[bot]logins inside a bracketed YAML list.opened-bytrigger filter: exact logins of who opened the issue, pull request or discussion,such as
["github-actions[bot]"]for pull requests Gardener opened. It works on comment, review,label and state triggers, and the generated workflow prefilters it.
checkout: pull-request-head, so a task can push a commit onto an existing pullrequest's branch. Such tasks run one at a time per pull request.
found, push one commit, reply, and stop after a set number of rounds. A review starts a run only
once the pull request's merge ref contains the task's workflow, so update the branch of a pull
request opened before the task was added.
initandgeneratewrite.gardener/SKILL.md, a guide to the task format for coding agents,matching the CLI's version.
gardener upgradedoes), then commit and push the upgradedrepository. An older runtime refuses tasks that use the new fields.
0.1.9 (2026-10-01)
result and settlement to the run's session. The session no longer polls the agent while serving
the agent's tool calls, a loop that deepened the request chain on every tool call until Cloudflare
refused it. If a pushed settlement is lost, the session checks on the agent itself after three
quiet minutes.
runtime's memory on long runs with large command output.
max-reconnectsnow counts only consecutive failed reconnects. The count startsagain after a connection that stayed up for 30 seconds, and a run allows 50 reconnects in total.
gardener upgradedoes), then commit and push the upgradedrepository. The runtime fix applies as soon as it is deployed, even before a repository moves to
this release.
0.1.8 (2026-09-30)
max-turns,max-tool-calls,input-tokensor
output-tokens; it keeps only the minimums a run needs.runtime-secondsmay go up to 21,000,since a GitHub-hosted job runs for at most 6 hours.
runtime-secondsplus 10 minutes, rather than a fixed10 minutes.
models the catalog does not list), however large
output-tokensis.backoff, before the run fails. A retry can be billed by the provider, so
output-tokensbounds therun rather than the exact spend.
gardener upgradedoes), then commit and push the upgradedrepository. A 0.1.7 runtime refuses tasks over the old limits. Generating with 0.1.8 in a
repository still pinned to an earlier release leaves the timeout out, and warns about tasks over
480 seconds.
0.1.7 (2026-09-30)
pull_request.openandpull_request.open_drafttake optionallabels, added right after thepull request opens, for example a label another workflow looks for. A task that sets them must
also declare
pull_request.label.add, whether the labels are written out or filled from anearlier step. Every label must already exist, and a resumed run adds only the missing ones.
upgradewith this release, then commit and push. The workflows moveto this release's bridge.
0.1.6 (2026-09-30)
anthropic/…,openai/…and other providers) can go through any AIGateway, including one in another account:
deploy --ai-gateway <account-id>/<gateway-id> --ai-gateway-project <name>, with the token fromGARDENER_AI_GATEWAY_TOKEN. The token isstored only as the runtime Worker's secret.
@cf/…models stay on the runtime's own account.Later
deployandupgraderuns keep the gateway;--ai-gateway offremoves it. SeeAI Gateway.
message.
deployorupgradewith this release; the new D1 migration isapplied automatically. Nothing changes until a gateway is configured. The workflows are
unchanged.
0.1.5 (2026-09-29)
accepts task workflows from the release it was deployed from.
runs viewlists every call with its status and a shorttarget (a file path or API route, never command text), and
task.settledtotals the calls andproposals. A failed run's Actions error now ends with those totals, for example
(16 tool calls: 9 repository.read_file, 7 provider.api.read; no effects proposed).upgrademovespackage.jsonscripts that run a pinned@scuffi/gardener, such asgardener:generate, to the new release.connectstarts the sync workflow on the default branch when it is there, so a repositorymerged before connecting gets a green sync.
--helplistsconnect,repositories,repository disable|enableandtasks.upgradewith this release, then commit and pushpackage.jsonifit changed. The workflows are unchanged.
0.1.4 (2026-09-29)
committed lock or workflows don't match the tasks (a
TASK.mdedited withoutgenerate), orwhen
.gardener/gardener.jsonpins another repository's release, before merge rather than as afailed sync afterwards. It runs read-only, with no token and no call to the runtime, so it is
safe on pull requests from forks.
generateadds it togardener-sync.yml.the pinned reusable workflows and bridge actions.
upgradewith this release, then commit and push the regeneratedfiles.
0.1.3 (2026-09-29)
generateadds agardener-sync.ymlworkflow that sends the compiled tasks to the runtime on every push to the default branch that
touches Gardener's files: new tasks start running, and deleted or drafted tasks stop.
connectis only needed once per repository. The runtime accepts a sync only from Gardener's pinned sync
workflow, on the default branch, at the repository's release or the one the Worker runs
(migration
0003_actions_repository_syncs).TASK.mdwithout runninggenerate), thesync fails and the previous tasks keep running.
task enableandtask disable. To stop a task, delete it or setdraft: true. Tostop everything,
gardener repository disable.upgradeno longer enrols the repository. Commit and push the regenerated files; the syncenrols them.
if their organisation membership is private. Read-only members still need public membership.
upgradewith this release, then commit and push the regeneratedfiles.
0.1.2 (2026-09-28)
gardener-<workspace>name on theCloudflare account, and
deployrecords the runtime URL, CLI version and deployment digest inthe workspace's D1 (migration
0002_actions_installation). Any operator with access to theaccount can run every command.
deployadopts existinggardener-<workspace>resources, and refuses to replace a runtimedeployed by a newer CLI.
rollbackanddown. To go back, release a revert. To remove an installation, deleteits Worker and D1 database in the Cloudflare dashboard.
connectno longer rewritesGARDENER_RUNTIME_URLwhen it is already correct.upgradeordeployonce with this releasebefore other commands work.
0.1.1 (2026-09-28)
@scuffi/gardener, sonpx @scuffi/gardener generateworkswithout a checkout. Tags stage a release through the Release workflow, and a maintainer
approves it with 2FA.
0.1.0 (2026-09-28)
First internal preview.
.gardener/tasks/*/TASK.md. Each runs as its own GitHub Actions workflow:planning is unprivileged, and apply executes only the exact, hash-bound plan.
comment, label, update, close, merge gated on named checks, and rebase or merge the base in
through GitHub), branches and commits (limited by branch patterns), discussions, and releases.
schedule.
runs view).init,generate,deploy,upgrade,yolo,doctor,debug,runs, andruns view. The kill switches (taskandrepositoryenable|disable) still work but arenot listed in
--help.examples/tasks/:triage,pr-review,mention-reply.