Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Configure Bright Data local development with hot reload and testing. Use when setting up a development environment, configuring test workflows, or establishing a fast iteration cycle with Bright Data. Trigger with phrases like "brightdata dev setup", "brightdata local development", "brightdata dev environment", "develop with brightdata".
.claude/skills/jeremylongshore-brightdata-local-dev-loop/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 8% | 0% |
Separate transport from parsing so ordinary development is deterministic and credential-free. The live lane is opt-in, target-allowlisted, budgeted, and incapable of silently replacing fixtures.
Read the adapter and Grep for direct proxy/API calls in business logic. Move transport behind a narrow interface before recording fixtures.
Write configuration with fixture as the default and live requiring three independent gates.
yamlbrightdata: mode: fixture live_requires: - BRIGHTDATA_LIVE_TEST=1 - approved_target_manifest - bounded_cost_budget
Add fixtures for success, 407, policy 403, 429, building, ready, failed, empty, and expired states. Test parsers against provider fields rather than copied HTML.
Use Bash(npm:) for unit and contract tests. Permit the live suite only in a protected environment, against an approved target, with a one-job ceiling and redacted receipt.
Use Read and Grep for discovery. Use Write and Edit only for the adapter, fixtures, tests, and documented configuration. Use Bash(npm:) for the named local suites; never let a default test command send live Bright Data traffic.
A parser change should pass against a synthetic snapshot and recorded provider-error metadata with no credentials present. A maintainer may later enable one protected live job; its output updates no fixture automatically and is reviewed before adoption.
| Failure | Meaning | Response | |---------|---------|----------| | Unit tests attempt network access | Transport leaked into parsing code | Block network and refactor through the adapter | | Fixture contains target data | Captured live content was committed | Remove it and replace it with synthetic minimal data | | Live gate has only one switch | Accidental execution remains possible | Require environment, target manifest, and budget gates |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 21,593 | 9,506 | -56% | 1 | 1 | 0% | 4,565 | 3,495 | -23% | 0 | 0 | — |
case-02 | fail→pass | 15,959 | 11,604 | -27% | 1 | 1 | 0% | 3,295 | 4,112 | +25% | 0 | 0 | — |
case-03 | fail→pass | 14,712 | 9,959 | -32% | 1 | 1 | 0% | 3,052 | 3,605 | +18% | 0 | 0 | — |
case-04 | pass→fail | 24,065 | 22,675 | -6% | 1 | 1 | 0% | 5,075 | 6,242 | +23% | 0 | 0 | — |
case-05 | pass→pass | 14,080 | 15,540 | +10% | 1 | 1 | 0% | 2,785 | 4,607 | +65% | 0 | 0 | — |
case-06 | pass→pass | 12,056 | 11,516 | -4% | 1 | 1 | 0% | 2,329 | 3,814 | +64% | 0 | 0 | — |
case-07 | pass→pass | 19,620 | 6,582 | -66% | 1 | 1 | 0% | 2,551 | 2,915 | +14% | 0 | 0 | — |
case-08 | pass→pass | 12,179 | 5,149 | -58% | 1 | 1 | 0% | 1,001 | 2,346 | +134% | 0 | 0 | — |
case-09 | pass→pass | 9,310 | 2,872 | -69% | 1 | 1 | 0% | 1,709 | 1,960 | +15% | 0 | 0 | — |
case-10 | fail→fail | 16,357 | 11,264 | -31% | 1 | 1 | 0% | 3,146 | 3,746 | +19% | 0 | 0 | — |
case-11 | fail→fail | 13,846 | 10,178 | -26% | 1 | 1 | 0% | 2,740 | 3,519 | +28% | 0 | 0 | — |
case-12 | pass→pass | 10,768 | 5,568 | -48% | 1 | 1 | 0% | 1,942 | 2,539 | +31% | 0 | 0 | — |
case-13 | pass→pass | 12,733 | 12,324 | -3% | 1 | 1 | 0% | 2,451 | 3,620 | +48% | 0 | 0 | — |
case-14 | fail→pass | 12,162 | 4,585 | -62% | 1 | 1 | 0% | 2,152 | 2,312 | +7% | 0 | 0 | — |
case-15 | pass→pass | 7,647 | 4,670 | -39% | 1 | 1 | 0% | 1,308 | 2,307 | +76% | 0 | 0 | — |
case-16 | fail→pass | 11,072 | 3,173 | -71% | 1 | 1 | 0% | 1,885 | 2,035 | +8% | 0 | 0 | — |
case-17 | fail→pass | 16,091 | 9,310 | -42% | 1 | 1 | 0% | 2,922 | 3,162 | +8% | 0 | 0 | — |
case-18 | pass→pass | 13,011 | 8,095 | -38% | 1 | 1 | 0% | 2,130 | 2,794 | +31% | 0 | 0 | — |
case-19 | fail→pass | 10,606 | 10,947 | +3% | 1 | 1 | 0% | 2,019 | 1,986 | -2% | 0 | 0 | — |
case-20 | fail→pass | 10,221 | 7,484 | -27% | 1 | 1 | 0% | 1,987 | 2,829 | +42% | 0 | 0 | — |
case-21 | pass→pass | 8,970 | 4,349 | -52% | 1 | 1 | 0% | 1,552 | 2,315 | +49% | 0 | 0 | — |
case-22 | fail→pass | 14,309 | 3,254 | -77% | 1 | 1 | 0% | 2,648 | 2,035 | -23% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +32 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
The publisher has shipped newer versions since this run, so these numbers describe v1, not the version currently listed.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.