{"_id":"@attunesolutions/piece-skyvern-selfhosted","_rev":"2-cb7a915afa9e16852979978a8efcbc6e","name":"@attunesolutions/piece-skyvern-selfhosted","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.1":{"name":"@attunesolutions/piece-skyvern-selfhosted","version":"0.0.1","keywords":["activepieces","activepieces-piece","skyvern","self-hosted","browser-automation"],"license":"MIT","_id":"@attunesolutions/piece-skyvern-selfhosted@0.0.1","maintainers":[{"name":"sgsimpson","email":"scott@simpson.kiwi"}],"homepage":"https://github.com/AttuneSolutions/activepieces/tree/main/packages/pieces/community/skyvern-selfhosted","bugs":{"url":"https://github.com/AttuneSolutions/activepieces/issues"},"dist":{"shasum":"12197f63641d420b10d079d52d29f652e27d9dfc","tarball":"https://registry.npmjs.org/@attunesolutions/piece-skyvern-selfhosted/-/piece-skyvern-selfhosted-0.0.1.tgz","fileCount":13,"integrity":"sha512-Tn8vQ9OmCb/7oP2yZVReKeIV7/mTJqERAZnAsd9lmNZwUERdfq3LlOBTMmcvwLVzxotPxU8Fo6KuPbOI9MKNPg==","signatures":[{"sig":"MEUCIQDggfQxOLfb+MYN+TU7xD4tpBuF/o190sf4qV3p0J1GtgIgQCbyvBzlC8DGL1re6AIohS0N8x/3dy67SuwmvvrIsPU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153776},"main":"./src/index.js","type":"commonjs","gitHead":"aedbafc60cd24bc92ed7a10ac37bc6313daeec66","_npmUser":{"name":"sgsimpson","email":"scott@simpson.kiwi"},"repository":{"url":"git+https://github.com/AttuneSolutions/activepieces.git","type":"git","directory":"packages/pieces/community/skyvern-selfhosted"},"_npmVersion":"10.9.4","description":"Activepieces piece for a self-hosted Skyvern instance — browser-automation agent tasks and workflows against your own API URL.","directories":{},"_nodeVersion":"22.22.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/piece-skyvern-selfhosted_0.0.1_1788338523581_0.3276382837321774","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"_id":"@attunesolutions/piece-skyvern-selfhosted@0.1.0","bugs":{"url":"https://github.com/AttuneSolutions/activepieces/issues"},"dist":{"shasum":"03e125e9ddac3294b3675b6e944c2d247e92d198","tarball":"https://registry.npmjs.org/@attunesolutions/piece-skyvern-selfhosted/-/piece-skyvern-selfhosted-0.1.0.tgz","fileCount":13,"integrity":"sha512-98AJd4XLcVIMEmjR5MJpJEuzcQs2/gubnVH8h08eYuVSGk9vs2Hw/zB64U/AUN32fr40/ttEfpWK+SiU9rsLOg==","signatures":[{"sig":"MEQCIGmFemzPI7ZGk+sUprP80RY/WDIrAi+G0zotfhYrNlAMAiBFn0PRzpORhCInni0tZ/LgzM2tSMIeeRFPsYzW8evHwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHtRGRBAhsTMXtaEvyF4El9orPh+1baOq4PUjqGlH+fsAiABvgL5Jeh+vqA1pMRSmoC93utZM1Ge3F7K5s6tUk7WvQ=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@attunesolutions%2fpiece-skyvern-selfhosted@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":462402},"main":"./src/index.js","name":"@attunesolutions/piece-skyvern-selfhosted","type":"commonjs","gitHead":"8b52e7503e434ca6b9531568f33e365a14570582","license":"MIT","version":"0.1.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7bf27d74-aa73-48f2-aeea-55f4b2c6c07d"}},"homepage":"https://github.com/AttuneSolutions/activepieces/tree/main/packages/pieces/community/skyvern-selfhosted","keywords":["activepieces","activepieces-piece","skyvern","self-hosted","browser-automation"],"repository":{"url":"git+https://github.com/AttuneSolutions/activepieces.git","type":"git","directory":"packages/pieces/community/skyvern-selfhosted"},"_npmVersion":"12.0.2","description":"Activepieces piece for a self-hosted Skyvern instance — browser-automation agent tasks and workflows against your own API URL.","directories":{},"maintainers":[{"name":"sgsimpson","email":"scott@simpson.kiwi"}],"_nodeVersion":"24.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/piece-skyvern-selfhosted_0.1.0_1788341363733_0.502009029918614"}}},"time":{"created":"2026-09-02T08:42:03.245Z","modified":"2026-09-02T09:29:24.254Z","0.0.1":"2026-09-02T08:42:03.712Z","0.1.0":"2026-09-02T09:29:23.815Z"},"bugs":{"url":"https://github.com/AttuneSolutions/activepieces/issues"},"license":"MIT","homepage":"https://github.com/AttuneSolutions/activepieces/tree/main/packages/pieces/community/skyvern-selfhosted","keywords":["activepieces","activepieces-piece","skyvern","self-hosted","browser-automation"],"repository":{"url":"git+https://github.com/AttuneSolutions/activepieces.git","type":"git","directory":"packages/pieces/community/skyvern-selfhosted"},"description":"Activepieces piece for a self-hosted Skyvern instance — browser-automation agent tasks and workflows against your own API URL.","maintainers":[{"name":"sgsimpson","email":"scott@simpson.kiwi"}],"readme":"# @attunesolutions/piece-skyvern-selfhosted\n\nAn [Activepieces](https://www.activepieces.com) piece for a **self-hosted**\n[Skyvern](https://www.skyvern.com) instance. It is the community Skyvern piece with the\nhardcoded `https://api.skyvern.com/v1` base URL replaced by a field on the connection, so\neach connection points at your own deployment.\n\n## Install\n\n```bash\nnpm install @attunesolutions/piece-skyvern-selfhosted\n```\n\nOr from the Activepieces admin UI (**Platform Admin → Pieces → Install piece**) by npm\npackage name.\n\n## Connection\n\n| Field | Description |\n| --- | --- |\n| Base URL | Your Skyvern API root **including the version path**, e.g. `https://skyvern.example.com/api/v1`. A trailing slash is trimmed. |\n| API Key | Sent as the `x-api-key` header on every request. |\n\nSaving the connection calls `GET {Base URL}/workflows` to verify both values.\n\n## Actions\n\n| Action | Endpoint | Returns |\n| --- | --- | --- |\n| Run Agent Task | `POST /run/tasks` | run id |\n| Run Workflow | `POST /run/agents` | run id |\n| Login Task | `POST /run/tasks/login` | run id |\n| Push One-Time Code | `POST /credentials/totp` | ack |\n| Create Credential | `POST /credentials` | `credential_id` (`cred_…`) |\n| Create Browser Profile | `POST /browser_profiles` | `browser_profile_id` (`bp_…`) |\n| Cancel Run | `POST /runs/{id}/cancel` | run |\n| Get Workflow/Task Run | `GET /runs/{id}` | run |\n| Find Workflow | `GET /workflows` | matches |\n| Custom API Call | any | body |\n\nEvery action returns the parsed response body, so a later step reads\n`{{ step_1['output'].credential_id }}` rather than `.body.credential_id`.\n\nAll actions above except **Custom API Call** are built from static properties only, so they can be\nadded, validated and published entirely over the Activepieces MCP API with no visit to the web UI.\nCustom API Call keeps the framework's dynamic `url`/`body` properties: it runs fine, but a step\nbuilt from it over MCP is marked invalid and blocks publishing, because a dynamic property's schema\nis only written into `propertySettings` by the builder UI.\n\n### Two different fields called `credential_type`\n\nThe API reuses one field name for two unrelated enums, and the piece renames one of them to keep\nthem apart:\n\n| Piece property | API field | Means | Values |\n| --- | --- | --- | --- |\n| Create Credential → **Credential Type (Kind of Secret)** | `credential_type` | what sort of secret this is | `password`, `credit_card`, `secret` |\n| Login Task → **Credential Source (Vault)** | `credential_type` | which vault to read from | `skyvern`, `bitwarden`, `1password`, `azure_vault` |\n\nPassing `password` as a Login Task's Credential Source fails confusingly. It is the natural mistake.\n\n### Browser profiles need a v2 engine\n\n`browser_profile_id` is rejected by `skyvern-1.0` and the CUA engines. Run Agent Task selects\n`skyvern-2.0` for you when a Browser Profile ID is set and Engine is blank, and throws a clear\nerror when an incompatible engine is chosen explicitly. Skyvern's own message names the engine\n`skyvern_v2`, but the value the field accepts is `skyvern-2.0`.\n\n### Run a workflow by its permanent id\n\nRun Workflow posts to `POST /run/agents`; `POST /agents/{id}` is the *update* endpoint and answers\na run attempt with *\"Invalid workflow definition. Workflow should be provided in either yaml or\njson format.\"* Pass the permanent `wpid_…` id, never a versioned `w_…` one — editing a workflow\nmints a new `w_…` while the `wpid_…` stays put, so a pinned `w_…` quietly runs a stale version.\nFind Workflow returns `workflow_permanent_id`, which is the value Agent ID wants.\n\n## Verifying webhook callbacks\n\nSkyvern signs every callback with an `x-skyvern-signature` header: hex HMAC-SHA256 over the **raw\nrequest body** using your API key as the secret. No timestamp is mixed in, so the signature is over\nthe body alone.\n\nIn a Code step:\n\n```ts\nimport { createHmac, timingSafeEqual } from 'node:crypto';\n\nexport const code = async (inputs) => {\n  const expected = createHmac('sha256', inputs.apiKey)\n    .update(inputs.rawBody, 'utf8')\n    .digest('hex');\n  const a = Buffer.from(expected, 'utf8');\n  const b = Buffer.from(inputs.signature, 'utf8');\n  return a.length === b.length && timingSafeEqual(a, b);\n};\n```\n\nCompare with `timingSafeEqual`, not `===`, and hash the raw body exactly as received — re-serialising\nthe parsed JSON changes the bytes and the signature will not match.\n\n## Building\n\n```bash\nturbo run build --filter=@attunesolutions/piece-skyvern-selfhosted\n```\n","readmeFilename":"README.md"}