A dependency upgrade agent for Claude Code, Codex and Cursor
Dependency Upgrader upgrades a public GitHub repository within its semver ranges, fixes the project's code when that breaks its tests, and returns the diff and the results. A run costs 8,000 credits, charged only when the run succeeds.
Not offered in ContextStream yet. It needs a sandbox, and ContextStream's Slipstream worker has no sandbox provider yet. Version 1.0.0 · Updated
What does Dependency Upgrader do?
Upgrades a public GitHub repo within its semver ranges and runs its tests; when the upgrade breaks them, fixes the project's code. Returns the diff and the results.
What it declines
A task like one of these is declined with a reason, and a declined run is free:
Major-version upgrades, pinning or downgrading, or changes to tests to make them pass.
Fixing tests that already failed before the upgrade (CI Fixer does that).
Private repositories, or anything that needs credentials.
Opening pull requests or pushing changes.
What does a real run of Dependency Upgrader look like?
The input, the result (shortened where it is long), how long it took, what it cost and where it ran. Live runs used public or demo material only; a run marked as from the eval suite is not a live run.
Version 1.0.0 runs on ContextStream's task rail and needs a sandbox, which ContextStream's Slipstream worker does not have yet. The live run below is version 0.1.0, the public version on Slipstream's own API; the second example is version 1.0.0 in its eval suite.
Live run on Slipstream's own API
Upgrading unjs/defu within its ranges (version 0.1.0)
Version
0.1.0
Outcome
succeeded
Ran
2026-10-27 17:18 UTC
Took
7.0 s
Cost
No charge (no model, not billed)
Slipstream's own API on a Depot CI runner, inside the images/base.Dockerfile image as an unprivileged user. No model, no ContextStream, no credits.
> [email protected] test [path]/slipstream/work/repo
> pnpm lint && pnpm test:types && pnpm vitest run
> [email protected] lint [path]/slipstream/work/repo
> oxlint src && oxfmt --check src test
Found 0 warnings and 0 errors.
Finished in 3ms on 3 files with 96 rules using 8 threads.
Checking formatting...
All matched files use the correct format.
Finished in 22ms on 7 files using 8 threads.
> [email protected] test:types [path]/slipstream/work/repo
> tsgo --noEmit
[1m[30m[46m RUN [49m[39m[22m [36mv4.1.12 [39m[90m[path]/slipstream/work/repo[39m
TAP version 13
# Subtest: isPlainObject
ok 1 - isPlainObject
---
duration_ms: 0.60468
type: 'suite'
...
[32m✓[39m test/utils.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 2[2mms[22m[39m
[32m✓[39m test/defu.test.ts [2m([22m[2m21 tests[22m[2m)[22m[32m 5[2mms[22m[39m
[2m Test Files [22m [1m[32m2 passed[39m[22m[90m (2)[39m
[2m Tests [22m [1m[32m23 passed[39m[22m[90m (23)[39m
[2m Start at [22m 17:18:30
[2m Duration [22m 106ms[2m (transform 53ms, setup 0ms, import 73ms, tests 7ms, environment 0ms)[22m
Checks: 4 of 4 passed
clone: Cloned https://github.com/unjs/defu at 82632b66f5914e9946edce300e10633a3d5c0cb7.
lockfile: Found a lockfile for pnpm.
upgrade: Upgraded within the declared ranges and installed.
tests: `pnpm test` passed.
Lockfile changes are left out of the patch shown here.
Run
run_679b0d01502edd2082
Depot run
0zb9r381xr
Image
images/base.Dockerfile@3a1adeda3695 (slipstream origin/main) + scripts/example-runs from branch site-example-runs 5112d5b (local)
Sandbox
the fake provider on loopback, inside that disposable container
From its eval suite, not a live run
An upgrade that renamed an export, and the fix (version 1.0.0, eval case)
Version
1.0.0
Outcome
succeeded
Ran
2026-10-27 17:17 UTC
Took
Not timed (fakes)
Cost
No charge (offline)
The agent's offline eval suite: its real program, against a fake ContextStream, a scripted model and a fixture repository, with no network. Not a live run.
What it ran on
evals/dependency-upgrader/cases.jsonl in the Slipstream repository
Input
{
"repo_url": "https://github.com/eval/greeter"
}
Result
Upgraded within the declared ranges (2 files changed). The upgrade broke the tests; a 2-line fix makes them pass. casekit 1.1.0 renamed its toTitle export to titleCase.
Result
npm: 2 files changed; npm test passed (exit 0).
The upgrade broke the tests, and the fix
casekit 1.1.0 renamed its toTitle export to titleCase.
upgrade.patch
diff --git a/src/greet.js b/src/greet.js
index f2d839b..9ed89d4 100644
--- a/src/greet.js
+++ b/src/greet.js
@@ -1,4 +1,4 @@
-import { toTitle } from 'casekit';
+import { titleCase as toTitle } from 'casekit';
export function greet(name) {
return `Hello, ${toTitle(name)}!`;
fix.patch
diff --git a/src/greet.js b/src/greet.js
index f2d839b..9ed89d4 100644
--- a/src/greet.js
+++ b/src/greet.js
@@ -1,4 +1,4 @@
-import { toTitle } from 'casekit';
+import { titleCase as toTitle } from 'casekit';
export function greet(name) {
return `Hello, ${toTitle(name)}!`;
Test output
> [email protected] test
> node --test
TAP version 13
# Subtest: greets by name, in title case
ok 1 - greets by name, in title case
---
duration_ms: 0.4108
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 36.03147
Checks: 6 of 7 passed
clone: Cloned the repository.
lockfile: Found a lockfile for npm.
upgrade: Upgraded within the declared ranges and installed.
tests_after_upgrade: `npm test` exited 1.
baseline: `npm test` passes before the upgrade, so the upgrade broke it.
tests: `npm test` passes after a 2-line fix to 1 file.
workspace_context: 0 context items from ContextStream for this job, about 0 tokens.
Lockfile changes are left out of the patch shown here.
Dependency Upgrader costs 8,000 ContextStream credits a run, charged only when the run succeeds; a declined, failed, cancelled or timed-out run costs nothing. Credits come with every plan: Starter is free with 10,000 a month (1 run of Dependency Upgrader, if spent on nothing else), and Pro is $19 a month with 25,000.
Which tools does Dependency Upgrader work with?
Claude Code, Codex, Cursor and other MCP clients, once ContextStream offers it: through the slipstream tool of ContextStream's MCP, ss run dependency-upgrader in a terminal, or the web app. It needs a sandbox, and ContextStream's Slipstream worker has no sandbox provider yet.
Claude Code, Codex, Cursor and other MCP clients: connect ContextStream's MCP once (setup for each editor), then ask your agent to hand the job to Dependency Upgrader.
A terminal or an agent's shell:ss run dependency-upgrader, installed with ContextStream's command line.
The web app: the workspace's specialist library, where each run shows its price before it starts.
What access does Dependency Upgrader need?
Dependency Upgrader gets a short-lived token for one workspace, limited to 2 scopes: Models via ContextStream and Reads context. It works in one project, and only for that run.
Model agent with a sandbox. A program on ContextStream's model proxy that also drives its own sandbox. The sandbox holds no credentials. Network: github.com, codeload.github.com, objects.githubusercontent.com, release-assets.githubusercontent.com, registry.npmjs.org, pypi.org, files.pythonhosted.org. It is stopped after 30 min.
Scope
What it lets a run do
model.invoke
Call models through ContextStream’s model proxy, under the run’s credit cap.
context.read
Read the run’s context pack from the workspace.
How do I turn Dependency Upgrader on?
You cannot turn Dependency Upgrader on yet: it needs a sandbox, and ContextStream's Slipstream worker has no sandbox provider yet. It is built and tested, and its page shows how it will be called.
How do I call Dependency Upgrader from Claude Code or Codex?
Once it is offered: ss run dependency-upgrader in a terminal, or slipstream(action="run", agent="dependency-upgrader", input={...}) over MCP, with the input below.
Connect ContextStream's MCP (it also writes each editor's connection):
In a terminal (curl -fsSL https://contextstream.io/cs/install.sh | sh installs ss):
ss run dependency-upgrader repo_url=https://github.com/unjs/defu ref=82632b66f5914e9946edce300e10633a3d5c0cb7
Over MCP, a call without accepted_price_credits returns the quote first; ss asks on a terminal, and scripts pass --yes.
Input
Field
Type
What it is
repo_url
string, required
ref
string
subdir
string
test_command
string
Overrides the default test command for the detected installer.
Other versions of Dependency Upgrader
dependency-upgrader@0.1.0: sandbox agent, on Slipstream's own API. Upgrades a public GitHub repo within its existing semver ranges, runs its tests, and returns the diff and results.
CI Fixer reproduces a failing test command in a public repository and returns the smallest change to the project's code that makes it pass, with the passing output.