Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ Give your AI coding agents full visibility into your CI test results. The Curren
| `currents-get-context` | Call this first to find out why tests failed in CI, or to fix them: returns the errors, steps and files of the failed tests of a run, a spec file (instance) or one test — the same content as Fix in the Currents dashboard. |
| `currents-get-errors-explorer` | Get aggregated error metrics for a project within a date range. |
| `currents-get-test-evidence` | Collect evidence artifacts (screenshots, videos, traces, attachments) produced by tests in a CI run, with signed download URLs grouped per test. |
| `currents-create-evidence-links` | Create a shareable link to a test attempt's evidence, served from its Playwright trace, and the URLs onto it: a markdown digest of what the attempt did and what failed, a filmstrip, an animated screencast, DOM snapshots, network requests and attachments. |
| `currents-create-evidence-links` | Create a shareable trace API link to a test attempt's evidence, served from its Playwright trace, and the URLs onto it: a markdown trace summary (the `digest` URL) of what the attempt did and what failed, a filmstrip, an animated screencast, DOM snapshots, network requests and attachments. |
| `currents-create-session` | Record a browser session you drove as a Currents session, so its evidence can be read and shared. |
| `currents-add-attachments` | Add attachments to a session from currents-create-session (send sessionId), or to a CI run (send runId): logs for a spec file, a test, or the run itself. |
| `currents-list-webhooks` | List all webhooks for a project. |
Expand All @@ -63,11 +63,11 @@ Give your AI coding agents full visibility into your CI test results. The Curren

Agent skills that teach AI agents multi-step Currents workflows.

| Skill | Description |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`browser-evidence`](skills/browser-evidence) | Experimental: prove a change works in a browser you drove yourself, when there is no test to run. |
| [`collect-evidence`](skills/collect-evidence) | Show that work you implemented actually works, or demo it, from tests that ran in CI via Currents — a trace link whose digest, filmstrip and accessibility snapshots read inside a comment, plus screenshots, attachments and videos. |
| [`fix-failing-tests`](skills/fix-failing-tests) | Fix tests that failed in CI, using the results Currents recorded — errors, steps, traces, screenshots and console output. |
| Skill | Description |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [`browser-evidence`](skills/browser-evidence) | Experimental: prove a change works in a browser you drove yourself, when there is no test to run. |
| [`collect-evidence`](skills/collect-evidence) | Show that work you implemented actually works, or demo it, from tests that ran in CI via Currents — a trace API link whose trace summary, filmstrip and accessibility snapshots read inside a comment, plus screenshots, attachments and videos. |
| [`fix-failing-tests`](skills/fix-failing-tests) | Fix tests that failed in CI, using the results Currents recorded — errors, steps, traces, screenshots and console output. |

The server publishes every skill as an MCP resource, so a connected agent can
list and read them without a local copy:
Expand Down
2 changes: 1 addition & 1 deletion mcp-server/.synced-from
Original file line number Diff line number Diff line change
@@ -1 +1 @@
a1ac39f7c15ff0be510d426b1392e4e0ff5a8797
9c6599eacc0a3eb3e71b6142af70c321e6fa13f5
6 changes: 3 additions & 3 deletions mcp-server/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ export const TOOL_CATALOG: CatalogTool[] = [
'currents-get-spec-instance',
{
description:
"Retrieves the raw result of one spec file execution by instanceId: each test's state and attempts, and the artifact URLs. For why its tests failed, currents-get-context with run_id and instance_id returns the errors, steps and trace links ready to read.",
"Retrieves the raw result of one spec file execution by instanceId: each test's state and attempts, and the artifact URLs. For why its tests failed, currents-get-context with run_id and instance_id returns the errors, steps and trace API links ready to read.",
title: 'Get Spec Execution',
annotations: readOnly,
},
Expand Down Expand Up @@ -513,8 +513,8 @@ export const TOOL_CATALOG: CatalogTool[] = [
'currents-create-evidence-links',
{
description:
"Create a shareable link to a test attempt's evidence, served from its Playwright trace, and the URLs onto it: a markdown digest of what the attempt did and what failed, a filmstrip, an animated screencast, DOM snapshots, network requests and attachments. Use it to read a trace without downloading it, and to put evidence in a pull request comment or an issue — the link reads without a Currents credential and expires. Start from the digest it returns. For a session recorded with currents-create-session, send sessionId and the trace's attachmentId; for a CI test, instanceId and testId. Before posting evidence, read the workflow at skill://currents/browser-evidence/SKILL.md for a session you recorded, or skill://currents/collect-evidence/SKILL.md for a CI run.",
title: 'Create Evidence Links',
"Create a shareable trace API link to a test attempt's evidence, served from its Playwright trace, and the URLs onto it: a markdown trace summary (the `digest` URL) of what the attempt did and what failed, a filmstrip, an animated screencast, DOM snapshots, network requests and attachments. Use it to read a trace without downloading it, and to put evidence in a pull request comment or an issue — the link reads without a Currents credential and expires. Start from the trace summary it returns. For a session recorded with currents-create-session, send sessionId and the trace's attachmentId; for a CI test, instanceId and testId. Before posting evidence, read the workflow at skill://currents/browser-evidence/SKILL.md for a session you recorded, or skill://currents/collect-evidence/SKILL.md for a CI run.",
title: 'Create Trace API Link',
annotations: { ...additiveWrite, openWorldHint: true },
},
createEvidenceLinksTool
Expand Down
2 changes: 1 addition & 1 deletion mcp-server/src/tools/evidence/create-evidence-links.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ const handler = async ({
...data,
...traceEndpoints(data.url),
docs: `${origin}/docs`,
note: 'Start with the digest. The link needs no Currents credential and stops working at expiresAt.',
note: 'Start with the trace summary, the digest URL. The link needs no Currents credential and stops working at expiresAt.',
},
null,
2
Expand Down
18 changes: 9 additions & 9 deletions skills/browser-evidence/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ Put both halves in one comment:
- the before and after screenshots, attached to the comment itself — drag them into the body, or use the tracker's attachment API
- the diff of the two accessibility snapshots — this is the part that shows what changed when the screenshots look the same

Lead with what changed for the user. Do not post trace links or storage URLs: the share link is the one that stays valid until it expires.
Lead with what changed for the user. Do not post trace API links or storage URLs: the share link is the one that stays valid until it expires.

## Troubleshooting

Expand All @@ -97,7 +97,7 @@ Use this when you have a shell and the Currents MCP server but not the `currents

### Zip the trace

From the directory holding the recording, with `screencast/` in the archive — that is where the frames are, and a trace API asked for a filmstrip has nowhere else to read them from. Name the archive after the capture so the two do not overwrite each other.
From the directory holding the recording, with `screencast/` in the archive — that is where the frames are, and the filmstrip and frame URLs have nowhere else to read them from. Name the archive after the capture so the two do not overwrite each other.

```bash
NAME=before
Expand Down Expand Up @@ -134,7 +134,7 @@ rm -f "/tmp/$NAME-trace.zip"
zip -qr "/tmp/$NAME-trace.zip" trace.trace trace.network screencast resources
```

Scripts that loaded are not in the link's request count or request list; failed ones are. The trace API reads a network log of up to 64 MB decompressed. A larger one is left out: the digest names it and reports no requests, so failed requests go missing from the evidence.
Scripts that loaded are not in the trace summary's request count or the request list; failed ones are. The trace API reads a network log of up to 64 MB decompressed. A larger one is left out: the trace summary names it and reports no requests, so failed requests go missing from the evidence.

### Record the session

Expand All @@ -158,9 +158,9 @@ Check each one succeeded. `--fail` is what makes curl report a refused upload; w
curl --fail -X PUT -H "Content-Type: <uploadHeaders.Content-Type>" --data-binary @<file> "<uploadUrl>"
```

### Create the evidence links and read the digest
### Create the trace API link and read the trace summary

Call `currents-create-evidence-links` with the `sessionId` and the trace's `attachmentId` from the session. It returns the link and the URLs onto it — `digest`, `filmstrip`, `animation`. Fetch the `digest` URL and read it: it says what the page did and what failed, and it is how you confirm the recording captured the problem. It needs no Currents credential.
Call `currents-create-evidence-links` with the `sessionId` and the trace's `attachmentId` from the session. It returns the link and the URLs onto it — `digest`, `filmstrip`, `animation`. Fetch the `digest` URL and read the trace summary: it says what the page did and what failed, and it is how you confirm the recording captured the problem. It needs no Currents credential.

```bash
curl -sL "<digest url>"
Expand All @@ -177,11 +177,11 @@ Then as in step 6 above. Screenshots go into the comment itself; a storage URL f
- **`currents-create-session` is not in your tools**: the credential lacks `runs:write`, or is a read API key.
- **403 from the session tool**: the same cause, on a connection that lists every tool (an API key whose access level the server does not know).
- **`currents-create-share-link` is not in your tools**: the credential lacks `shares:write`.
- **503 `Trace links are not configured` from `currents-create-evidence-links`**: this deployment serves no trace links. Attach the trace zip and the screenshots instead, and say the trace opens at https://trace.playwright.dev.
- **503 `Trace API links are not configured` from `currents-create-evidence-links`**: this deployment serves no trace API links. Attach the trace zip and the screenshots instead, and say the trace opens at https://trace.playwright.dev.
- **404 from the session tool**: the project id does not belong to this organization.
- **422 from the session tool**: recording is suspended for the organization, or its subscription has expired.
- **The upload URL is refused**: more than ten minutes passed since the session was recorded. Record the session again.
- **The digest says `trace.network` was not read**: the network log is over 64 MB even after the filter. Capture again with fewer steps, then zip and record a new session — the trace API caches what it read from the first upload.
- **The digest reports no frames**: the archive has no `screencast/`, or tracing ran without screenshots.
- **The trace summary says `trace.network` was not read**: the network log is over 64 MB even after the filter. Capture again with fewer steps, then zip and record a new session — the trace API caches what it read from the first upload, for every trace API link to that trace.
- **The trace summary reports no frames**: the archive has no `screencast/`, or tracing ran without screenshots.
- **`No trace found`**: wrong `sessionId` or `attachmentId`, or an `artifactName` no trace carries. Creating the link never reads the file, so this is not an upload that is still in flight.
- **The digest fails with a 404 from storage**: the trace bytes are not there. Check that the upload got a 200.
- **The trace summary fails with a 404 from storage**: the trace bytes are not there. Check that the upload got a 200.
Loading