[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PAFEN5KT0RFDR60HT1CFTM":3,"skill-same:01M6PAFEN5KT0RFDR60HT1CFTM":66},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":27,"commitSha":47,"skillDirectory":48,"forksCount":13,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":51,"install":52,"resources":65},"01M6PAFEN5KT0RFDR60HT1CFTM","neon-object-storage",null,"S3-compatible object storage that branches with your Neon project, so files and the database stay in sync across every branch.","duc-duy-1612\u002FOnline-Delivery-Systems-Web","duc-duy-1612","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F192231384?v=4","01M6NSDKQQDKVTHZ8DZMZ1VYY6","01M6NSDKW8DDVTQHBT1HBDDJPT",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fneon-object-storage\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"storage","object","object storage","neon object storage","neon","s3","branch","agent-skills","files","main","branches","across","project","license","critical","database","with","official","tree","github","2026-11-10 10:12:30",false,"---\nname: neon-object-storage\ndescription: \"S3-compatible object storage that branches with your Neon project, so files and the database stay in sync across every branch.\"\nrisk: critical\nsource: https:\u002F\u002Fgithub.com\u002Fneondatabase\u002Fagent-skills\u002Ftree\u002Fmain\u002Fskills\u002Fneon-object-storage\nsource_repo: neondatabase\u002Fagent-skills\nsource_type: official\ndate_added: 2026-07-01\nlicense: Apache-2.0\nlicense_source: https:\u002F\u002Fgithub.com\u002Fneondatabase\u002Fagent-skills\u002Fblob\u002Fmain\u002FLICENSE\n---\n\n# Neon Object Storage\n\nThis is a preview feature and only available in `us-east-2`. Neon Object Storage is S3-compatible object storage that branches with your projects: every branch gets its own isolated storage state, so files and database rows stay in sync across dev, preview, staging, and production.\n\nUse this skill to help the user store and serve files that branch alongside their database. Deliver a working bucket and upload\u002Fdownload flow, a branch-aware S3 client wired to the injected env vars, or a precise answer from the official Neon docs.\n\n## When to Use\n\nReach for Neon Object Storage when the user needs to store files (images, uploads, generated assets, documents, backups) and any of the following are true:\n\n- **They already use Neon Postgres and don't want a second provider.** One backend, one bill, one CLI, one set of branches — instead of standing up and wiring a separate AWS S3 \u002F R2 \u002F Supabase Storage account. The same Neon credential that backs the database backs storage.\n- **Files must stay in sync with the database across environments.** Storage branches _together with_ your Postgres data. Fork a branch and the child instantly inherits the parent's buckets and objects at that point in time — copy-on-write, so no data is duplicated. This is what makes agent, dev, preview, and test environments seamless: a preview branch gets a consistent snapshot of _both_ the rows and the files they reference, and writes on the child never touch the parent.\n- **They want safe, throwaway environments.** Upload, overwrite, and delete files in a preview\u002FCI branch without any risk to production data, then drop the branch.\n- **They want standard S3 tooling.** It's built on S3 semantics and speaks the S3 API, so the AWS SDKs, `boto3`, the AWS CLI, and presigned URLs all work — reliable and familiar, with no proprietary client.\n\nIf the user has no Neon project, isn't on Postgres, and just needs a standalone CDN-backed asset store, a dedicated object store may fit better — but the moment branch-consistent files + rows matter, this is the reason to use it.\n\n## What It Does\n\n- **S3-compatible** — Works with existing S3 SDKs, `boto3`, the AWS CLI, and presigned URLs. Path-style addressing and SigV4 only.\n- **Branches with your database** — Every Neon branch gets its own isolated, copy-on-write storage state. Forking copies no data.\n- **Two access modes** — `private` buckets require a credential for every operation; `public_read` buckets allow anonymous reads with authenticated writes.\n- **One credential system** — The same Neon credential system used by Functions and the AI Gateway.\n\n## Setup\n\nObject storage is part of the `neon.ts` infrastructure-as-code config (see the `neon` skill for the branch-first workflow, `link`\u002F`checkout`, and `neon.ts` basics). Declare buckets under `preview.buckets`, keyed by bucket name:\n\n```typescript\n\u002F\u002F neon.ts\nimport { defineConfig } from \"@neon\u002Fconfig\u002Fv1\";\n\nexport default defineConfig({\n  preview: {\n    buckets: {\n      images: {}, \u002F\u002F private by default\n      \"public-assets\": { access: \"public_read\" },\n    },\n  },\n});\n```\n\nProvision the declared buckets on the linked branch:\n\n```bash\nneon deploy   # alias for `neon config apply`\n```\n\n## Neon Infrastructure as Code (`neon.ts`)\n\nThe `preview.buckets` block above is part of `neon.ts`, Neon's infrastructure-as-code file — one TypeScript file declares your buckets alongside every other service the branch should have (see the `neon` skill for the full reference). Reconcile the declaration against a branch the Terraform way:\n\n```bash\nneon config status   # print the branch's live config (which buckets exist)\nneon config plan     # dry-run diff of what apply would change\nneon config apply    # create the declared buckets  (neon deploy is an alias)\n```\n\nBuckets are **branch-scoped**: when a `neon.ts` is present, `neon checkout` applies the policy as it _creates_ a branch, so a fresh preview\u002FCI branch comes up with its buckets already provisioned (and copy-on-write objects inherited from the parent). Checking out an _existing_ branch doesn't reconcile it — run `neon deploy` to apply changes. Provisioning (`config apply` \u002F `deploy`), `link`, and `checkout` also pull the branch's S3 credentials into your local `.env.local`, so the same `env pull` step shown below happens for you on those commands.\n\nFor typed, validated access to the injected S3 credentials, pass the same config object to `parseEnv` from `@neon\u002Fenv` — it returns an `env.storage` namespace (`accessKeyId`, `secretAccessKey`, `endpoint`, `region`) derived from your `neon.ts`.\n\n## Environment variables\n\nWhen `preview.buckets` is declared, Neon injects **AWS-standard** S3 env vars so the AWS SDKs work from the environment with zero extra config. Inside a deployed Neon Function these are injected automatically; locally, pull them onto disk (or inject them at runtime) via the CLI:\n\n```bash\nneon env pull            # writes the branch's vars into .env (or .env.local)\n# or, without writing a file, inject at runtime:\nneon-env run -- \u003Cyour dev command>\n```\n\n| Variable                | Meaning                                             |\n| ----------------------- | --------------------------------------------------- |\n| `AWS_ACCESS_KEY_ID`     | S3 Access Key ID (the branch credential's token id) |\n| `AWS_SECRET_ACCESS_KEY` | S3 Secret Access Key                                |\n| `AWS_ENDPOINT_URL_S3`   | Branch S3 endpoint URL                              |\n| `AWS_REGION`            | Region, e.g. `us-east-2`                            |\n\nBecause the names are AWS-standard, the AWS SDK picks up the credentials, endpoint, and region from the environment automatically. Credentials are branch-scoped and valid for that branch and all its descendants.\n\n## Working with objects: the Files SDK (recommended)\n\nThe simplest, most portable way to read and write objects is the [Files SDK](https:\u002F\u002Ffiles-sdk.dev) with its `neon` adapter — a small, unified storage API (`upload`, `download`, `url`, `list`, `exists`, `copy`, `delete`, `signedUploadUrl`) over web-standard I\u002FO. It uses the AWS S3 client under the hood, configured appropriately for Neon, and relabels errors as `Neon error` — so there's nothing to misconfigure. Reach for this first.\n\nInstall it alongside the AWS S3 peer dependencies the adapter uses internally:\n\n```bash\nnpm install files-sdk @aws-sdk\u002Fclient-s3 @aws-sdk\u002Fs3-presigned-post @aws-sdk\u002Fs3-request-presigner\n```\n\nThe adapter resolves its endpoint, region, and credentials from the same injected `AWS_*` env vars — pass only the bucket name:\n\n```typescript\nimport { Files } from \"files-sdk\";\nimport { neon } from \"files-sdk\u002Fneon\";\n\nconst files = new Files({ adapter: neon({ bucket: \"images\" }) });\n\n\u002F\u002F Upload — body may be a Buffer, Uint8Array, Blob, File, ReadableStream, or string\nawait files.upload(\"generated\u002Fcat.jpg\", fileBuffer, { contentType: \"image\u002Fjpeg\" });\n\n\u002F\u002F Download\nconst file = await files.download(\"generated\u002Fcat.jpg\");\nconst bytes = new Uint8Array(await file.arrayBuffer());\n\n\u002F\u002F Presigned GET — share without exposing credentials (defaults to a 1h expiry)\nconst url = await files.url(\"generated\u002Fcat.jpg\", { expiresIn: 3600 });\n\n\u002F\u002F Plus: files.exists(), files.list({ prefix }), files.copy(), files.delete(), files.signedUploadUrl()\n```\n\nSwap the adapter import (`files-sdk\u002Fs3`, `files-sdk\u002Fr2`, `files-sdk\u002Fgcs`, …) and the rest of your code is unchanged.\n\n## Working with objects: the AWS S3 client (alternative)\n\nNeon speaks the S3 API directly, so you can drop down to the AWS SDK whenever you prefer the native client or already depend on it. The credentials, endpoint, and region are read from the standard AWS env chain, so the only setting you pass is `forcePathStyle: true` — Neon requires path-style addressing, so the S3 client **must** set it:\n\n```typescript\nimport { S3Client } from \"@aws-sdk\u002Fclient-s3\";\n\nconst s3 = new S3Client({\n  forcePathStyle: true, \u002F\u002F required: Neon uses path-style addressing\n});\n```\n\nIf you prefer typed access instead of reading `process.env` directly, `parseEnv` (from `@neon\u002Fenv`) returns a validated `env.storage` namespace (`accessKeyId`, `secretAccessKey`, `endpoint`, `region`) derived from your `neon.ts` — see the `neon` skill.\n\nThen upload, download, and presign with the raw command objects:\n\n```typescript\nimport { PutObjectCommand, GetObjectCommand } from \"@aws-sdk\u002Fclient-s3\";\nimport { getSignedUrl } from \"@aws-sdk\u002Fs3-request-presigner\";\n\nconst BUCKET = \"images\";\n\n\u002F\u002F Upload\nawait s3.send(\n  new PutObjectCommand({\n    Bucket: BUCKET,\n    Key: \"generated\u002Fcat.jpg\",\n    Body: fileBuffer,\n    ContentType: \"image\u002Fjpeg\",\n  }),\n);\n\n\u002F\u002F Download\nconst res = await s3.send(\n  new GetObjectCommand({ Bucket: BUCKET, Key: \"generated\u002Fcat.jpg\" }),\n);\nconst bytes = await res.Body?.transformToByteArray();\n\n\u002F\u002F Presigned GET — share without exposing credentials\nconst url = await getSignedUrl(\n  s3,\n  new GetObjectCommand({ Bucket: BUCKET, Key: \"generated\u002Fcat.jpg\" }),\n  { expiresIn: 3600 },\n);\n```\n\nThe canonical pattern for pairing storage with the database on a branch: an agent generates an image → `PutObject` into the `images` bucket → a row is inserted in Postgres → a presigned URL is returned on read. Store the bucket **key** (not the bytes) in a Postgres column, and presign on read. Because both the row and the object live on the same branch, they branch together and never drift.\n\n`neon` also has first-class bucket\u002Fobject commands (`neon bucket create|list|delete`, `neon bucket object put|get|list|delete`) for scripting and one-off operations.\n\n## Availability\n\nNeon Object Storage is a preview (early access) feature available only on new projects in the `us-east-2` region. Confirm the user's Neon project is a new project in `us-east-2` before proceeding; it can't be enabled on existing projects. If the user does not yet have access, point them to the private beta sign-up: https:\u002F\u002Fneon.com\u002Fblog\u002Fwere-building-backends#access\n\n## Neon Documentation\n\nThe Neon documentation is the source of truth and Object Storage is evolving rapidly, so always verify against the official docs. Any doc page can be fetched as markdown by appending `.md` to the URL or by requesting `Accept: text\u002Fmarkdown`. Find the right page from the docs index (https:\u002F\u002Fneon.com\u002Fdocs\u002Fllms.txt) and the changelog announcements.\n\n## Further reading\n\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Foverview.md\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Fget-started.md\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Fbuckets.md\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Fobjects.md\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Fauthentication.md\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Fs3-compatibility.md\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Ftroubleshooting.md\n- https:\u002F\u002Ffiles-sdk.dev — Files SDK docs (the `neon` adapter)\n\n## Limitations\n\n- Use this skill only when the task clearly matches its upstream product or API scope.\n- Verify commands, API behavior, pricing, quotas, credentials, and deployment effects against current official documentation before making changes.\n- Do not treat generated examples as a substitute for environment-specific tests, security review, or user approval for destructive or costly actions.\n","# Neon Object Storage\n\nThis is a preview feature and only available in `us-east-2`. Neon Object Storage is S3-compatible object storage that branches with your projects: every branch gets its own isolated storage state, so files and database rows stay in sync across dev, preview, staging, and production.\n\nUse this skill to help the user store and serve files that branch alongside their database. Deliver a working bucket and upload\u002Fdownload flow, a branch-aware S3 client wired to the injected env vars, or a precise answer from the official Neon docs.\n\n## When to Use\n\nReach for Neon Object Storage when the user needs to store files (images, uploads, generated assets, documents, backups) and any of the following are true:\n\n- **They already use Neon Postgres and don't want a second provider.** One backend, one bill, one CLI, one set of branches — instead of standing up and wiring a separate AWS S3 \u002F R2 \u002F Supabase Storage account. The same Neon credential that backs the database backs storage.\n- **Files must stay in sync with the database across environments.** Storage branches _together with_ your Postgres data. Fork a branch and the child instantly inherits the parent's buckets and objects at that point in time — copy-on-write, so no data is duplicated. This is what makes agent, dev, preview, and test environments seamless: a preview branch gets a consistent snapshot of _both_ the rows and the files they reference, and writes on the child never touch the parent.\n- **They want safe, throwaway environments.** Upload, overwrite, and delete files in a preview\u002FCI branch without any risk to production data, then drop the branch.\n- **They want standard S3 tooling.** It's built on S3 semantics and speaks the S3 API, so the AWS SDKs, `boto3`, the AWS CLI, and presigned URLs all work — reliable and familiar, with no proprietary client.\n\nIf the user has no Neon project, isn't on Postgres, and just needs a standalone CDN-backed asset store, a dedicated object store may fit better — but the moment branch-consistent files + rows matter, this is the reason to use it.\n\n## What It Does\n\n- **S3-compatible** — Works with existing S3 SDKs, `boto3`, the AWS CLI, and presigned URLs. Path-style addressing and SigV4 only.\n- **Branches with your database** — Every Neon branch gets its own isolated, copy-on-write storage state. Forking copies no data.\n- **Two access modes** — `private` buckets require a credential for every operation; `public_read` buckets allow anonymous reads with authenticated writes.\n- **One credential system** — The same Neon credential system used by Functions and the AI Gateway.\n\n## Setup\n\nObject storage is part of the `neon.ts` infrastructure-as-code config (see the `neon` skill for the branch-first workflow, `link`\u002F`checkout`, and `neon.ts` basics). Declare buckets under `preview.buckets`, keyed by bucket name:\n\n```typescript\n\u002F\u002F neon.ts\nimport { defineConfig } from \"@neon\u002Fconfig\u002Fv1\";\n\nexport default defineConfig({\n  preview: {\n    buckets: {\n      images: {}, \u002F\u002F private by default\n      \"public-assets\": { access: \"public_read\" },\n    },\n  },\n});\n```\n\nProvision the declared buckets on the linked branch:\n\n```bash\nneon deploy   # alias for `neon config apply`\n```\n\n## Neon Infrastructure as Code (`neon.ts`)\n\nThe `preview.buckets` block above is part of `neon.ts`, Neon's infrastructure-as-code file — one TypeScript file declares your buckets alongside every other service the branch should have (see the `neon` skill for the full reference). Reconcile the declaration against a branch the Terraform way:\n\n```bash\nneon config status   # print the branch's live config (which buckets exist)\nneon config plan     # dry-run diff of what apply would change\nneon config apply    # create the declared buckets  (neon deploy is an alias)\n```\n\nBuckets are **branch-scoped**: when a `neon.ts` is present, `neon checkout` applies the policy as it _creates_ a branch, so a fresh preview\u002FCI branch comes up with its buckets already provisioned (and copy-on-write objects inherited from the parent). Checking out an _existing_ branch doesn't reconcile it — run `neon deploy` to apply changes. Provisioning (`config apply` \u002F `deploy`), `link`, and `checkout` also pull the branch's S3 credentials into your local `.env.local`, so the same `env pull` step shown below happens for you on those commands.\n\nFor typed, validated access to the injected S3 credentials, pass the same config object to `parseEnv` from `@neon\u002Fenv` — it returns an `env.storage` namespace (`accessKeyId`, `secretAccessKey`, `endpoint`, `region`) derived from your `neon.ts`.\n\n## Environment variables\n\nWhen `preview.buckets` is declared, Neon injects **AWS-standard** S3 env vars so the AWS SDKs work from the environment with zero extra config. Inside a deployed Neon Function these are injected automatically; locally, pull them onto disk (or inject them at runtime) via the CLI:\n\n```bash\nneon env pull            # writes the branch's vars into .env (or .env.local)\n# or, without writing a file, inject at runtime:\nneon-env run -- \u003Cyour dev command>\n```\n\n| Variable                | Meaning                                             |\n| ----------------------- | --------------------------------------------------- |\n| `AWS_ACCESS_KEY_ID`     | S3 Access Key ID (the branch credential's token id) |\n| `AWS_SECRET_ACCESS_KEY` | S3 Secret Access Key                                |\n| `AWS_ENDPOINT_URL_S3`   | Branch S3 endpoint URL                              |\n| `AWS_REGION`            | Region, e.g. `us-east-2`                            |\n\nBecause the names are AWS-standard, the AWS SDK picks up the credentials, endpoint, and region from the environment automatically. Credentials are branch-scoped and valid for that branch and all its descendants.\n\n## Working with objects: the Files SDK (recommended)\n\nThe simplest, most portable way to read and write objects is the [Files SDK](https:\u002F\u002Ffiles-sdk.dev) with its `neon` adapter — a small, unified storage API (`upload`, `download`, `url`, `list`, `exists`, `copy`, `delete`, `signedUploadUrl`) over web-standard I\u002FO. It uses the AWS S3 client under the hood, configured appropriately for Neon, and relabels errors as `Neon error` — so there's nothing to misconfigure. Reach for this first.\n\nInstall it alongside the AWS S3 peer dependencies the adapter uses internally:\n\n```bash\nnpm install files-sdk @aws-sdk\u002Fclient-s3 @aws-sdk\u002Fs3-presigned-post @aws-sdk\u002Fs3-request-presigner\n```\n\nThe adapter resolves its endpoint, region, and credentials from the same injected `AWS_*` env vars — pass only the bucket name:\n\n```typescript\nimport { Files } from \"files-sdk\";\nimport { neon } from \"files-sdk\u002Fneon\";\n\nconst files = new Files({ adapter: neon({ bucket: \"images\" }) });\n\n\u002F\u002F Upload — body may be a Buffer, Uint8Array, Blob, File, ReadableStream, or string\nawait files.upload(\"generated\u002Fcat.jpg\", fileBuffer, { contentType: \"image\u002Fjpeg\" });\n\n\u002F\u002F Download\nconst file = await files.download(\"generated\u002Fcat.jpg\");\nconst bytes = new Uint8Array(await file.arrayBuffer());\n\n\u002F\u002F Presigned GET — share without exposing credentials (defaults to a 1h expiry)\nconst url = await files.url(\"generated\u002Fcat.jpg\", { expiresIn: 3600 });\n\n\u002F\u002F Plus: files.exists(), files.list({ prefix }), files.copy(), files.delete(), files.signedUploadUrl()\n```\n\nSwap the adapter import (`files-sdk\u002Fs3`, `files-sdk\u002Fr2`, `files-sdk\u002Fgcs`, …) and the rest of your code is unchanged.\n\n## Working with objects: the AWS S3 client (alternative)\n\nNeon speaks the S3 API directly, so you can drop down to the AWS SDK whenever you prefer the native client or already depend on it. The credentials, endpoint, and region are read from the standard AWS env chain, so the only setting you pass is `forcePathStyle: true` — Neon requires path-style addressing, so the S3 client **must** set it:\n\n```typescript\nimport { S3Client } from \"@aws-sdk\u002Fclient-s3\";\n\nconst s3 = new S3Client({\n  forcePathStyle: true, \u002F\u002F required: Neon uses path-style addressing\n});\n```\n\nIf you prefer typed access instead of reading `process.env` directly, `parseEnv` (from `@neon\u002Fenv`) returns a validated `env.storage` namespace (`accessKeyId`, `secretAccessKey`, `endpoint`, `region`) derived from your `neon.ts` — see the `neon` skill.\n\nThen upload, download, and presign with the raw command objects:\n\n```typescript\nimport { PutObjectCommand, GetObjectCommand } from \"@aws-sdk\u002Fclient-s3\";\nimport { getSignedUrl } from \"@aws-sdk\u002Fs3-request-presigner\";\n\nconst BUCKET = \"images\";\n\n\u002F\u002F Upload\nawait s3.send(\n  new PutObjectCommand({\n    Bucket: BUCKET,\n    Key: \"generated\u002Fcat.jpg\",\n    Body: fileBuffer,\n    ContentType: \"image\u002Fjpeg\",\n  }),\n);\n\n\u002F\u002F Download\nconst res = await s3.send(\n  new GetObjectCommand({ Bucket: BUCKET, Key: \"generated\u002Fcat.jpg\" }),\n);\nconst bytes = await res.Body?.transformToByteArray();\n\n\u002F\u002F Presigned GET — share without exposing credentials\nconst url = await getSignedUrl(\n  s3,\n  new GetObjectCommand({ Bucket: BUCKET, Key: \"generated\u002Fcat.jpg\" }),\n  { expiresIn: 3600 },\n);\n```\n\nThe canonical pattern for pairing storage with the database on a branch: an agent generates an image → `PutObject` into the `images` bucket → a row is inserted in Postgres → a presigned URL is returned on read. Store the bucket **key** (not the bytes) in a Postgres column, and presign on read. Because both the row and the object live on the same branch, they branch together and never drift.\n\n`neon` also has first-class bucket\u002Fobject commands (`neon bucket create|list|delete`, `neon bucket object put|get|list|delete`) for scripting and one-off operations.\n\n## Availability\n\nNeon Object Storage is a preview (early access) feature available only on new projects in the `us-east-2` region. Confirm the user's Neon project is a new project in `us-east-2` before proceeding; it can't be enabled on existing projects. If the user does not yet have access, point them to the private beta sign-up: https:\u002F\u002Fneon.com\u002Fblog\u002Fwere-building-backends#access\n\n## Neon Documentation\n\nThe Neon documentation is the source of truth and Object Storage is evolving rapidly, so always verify against the official docs. Any doc page can be fetched as markdown by appending `.md` to the URL or by requesting `Accept: text\u002Fmarkdown`. Find the right page from the docs index (https:\u002F\u002Fneon.com\u002Fdocs\u002Fllms.txt) and the changelog announcements.\n\n## Further reading\n\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Foverview.md\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Fget-started.md\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Fbuckets.md\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Fobjects.md\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Fauthentication.md\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Fs3-compatibility.md\n- https:\u002F\u002Fneon.com\u002Fdocs\u002Fstorage\u002Ftroubleshooting.md\n- https:\u002F\u002Ffiles-sdk.dev — Files SDK docs (the `neon` adapter)\n\n## Limitations\n\n- Use this skill only when the task clearly matches its upstream product or API scope.\n- Verify commands, API behavior, pricing, quotas, credentials, and deployment effects against current official documentation before making changes.\n- Do not treat generated examples as a substitute for environment-specific tests, security review, or user approval for destructive or costly actions.\n",{"name":5,"risk":32,"source":43,"license":14,"date_added":44,"description":7,"source_repo":45,"source_type":35,"license_source":46},"https:\u002F\u002Fgithub.com\u002Fneondatabase\u002Fagent-skills\u002Ftree\u002Fmain\u002Fskills\u002Fneon-object-storage",1782864000000,"neondatabase\u002Fagent-skills","https:\u002F\u002Fgithub.com\u002Fneondatabase\u002Fagent-skills\u002Fblob\u002Fmain\u002FLICENSE","f3312ba749561b6159f477dbfc9313c875d40a56",".agents\u002Fskills_archive\u002Fneon-object-storage","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612","2026-10-25 23:50:58",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill neon-object-storage",{"tool":58,"command":59},"bunx","bunx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill neon-object-storage",{"tool":61,"command":62},"pnpm","pnpm dlx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill neon-object-storage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fneon-object-storage\u002FSKILL.md",true,[],[67,97,120,143,171,194],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":71,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":79,"publishedAt":38},"01M6Q0FA5FZ410Z33Z3TFQ4DBA","zero-trust","Implement zero-trust network architecture. Configure identity-based access, micro-segmentation, and continuous verification. Use when implementing modern security architectures.","MIT","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzero-trust\u002FSKILL.md",[74],{"categoryNo":75,"categoryName":76,"taxonomyType":77,"taxonomyTypeDesc":78},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[80,81,82,83,84,85,69,86,87,88,89,90,91,27,92,32,93,94,95,96],"ZeRO","trust","zero trust","architecture","assessment","verification","segmentation","devops-security","access","configure","only","community","active","scope","scripts","relevant","implementing",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":71,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":38},"01M6Q0F1YZJW3KX5FBKEVZ8CV4","zcode-delegate","Delegate coding tasks to the Z.AI ZCode CLI only when the user explicitly requests it, while the orchestrator retains review and landing responsibility.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzcode-delegate\u002FSKILL.md",[],[104,105,106,107,108,109,110,111,112,113,114,115,116,90,26,91,117,118,32,119],"delegate","zcode","zcode delegate","review","cli","orchestration","tasks","run","Bash","model","node","read","orchestrator","desktop app","app","agent-orchestration",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":71,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":38},"01M6Q0ETK41VGNMYEXW0T00AJN","youtube-transcript","Fetch YouTube transcripts through DeepAPI or local fallback tooling and save clean text output.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript\u002FSKILL.md",[],[127,128,129,130,37,131,132,31,133,134,135,136,137,91,27,138,139,140,141,142],"transcript","youtube transcript","youtube","safe","codex","research","https","text","fetch","tooling","clean","local","output","deepapi","youtube transcripts","blob",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":71,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":160,"publishedAt":38},"01M6Q0EPPH2PVMDW40017F8WX0","youtube-transcript-skills","Fetch YouTube video transcripts, search videos\u002Fchannels, browse channels, and extract playlists via the getyoutubetranscript.com API - free tier, no card required.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript-skills\u002FSKILL.md",[149,152,155],{"categoryNo":150,"categoryName":151,"taxonomyType":77,"taxonomyTypeDesc":78},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":153,"categoryName":154,"taxonomyType":77,"taxonomyTypeDesc":78},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":156,"categoryName":157,"taxonomyType":158,"taxonomyTypeDesc":159},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[127,128,129,161,130,162,37,131,31,163,164,165,166,135,167,91,27,168,169,170],"youtube transcript skills","gemini","search","api","Video","browse","api-integration","free","card","channels",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":71,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":181,"publishedAt":38},"01M6Q0EAB96PX83W5PTE8A0R8D","youtube-notetaker","Turn YouTube talks into local study notes with slides, transcripts, editable annotations, and a markdown-backed viewer.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-notetaker\u002FSKILL.md",[177,180],{"categoryNo":178,"categoryName":179,"taxonomyType":77,"taxonomyTypeDesc":78},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":153,"categoryName":154,"taxonomyType":77,"taxonomyTypeDesc":78},[129,182,183,108,130,184,35,185,186,31,165,187,188,189,190,27,191,138,192,193],"youtube notetaker","notetaker","workflow","notes","code","markdown","slides","annotations","README","study","dair-academy","viewer",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":71,"licenseFileUrl":6,"sourceHtmlUrl":198,"categories":199,"keywords":201,"publishedAt":38},"01M6Q0E55F0GW5MX48V8HXS8B5","youtube-full","Fetch YouTube transcripts, search videos, browse channels, and extract playlists via TranscriptAPI — no yt-dlp, no Google API key, works from any cloud server.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-full\u002FSKILL.md",[200],{"categoryNo":150,"categoryName":151,"taxonomyType":77,"taxonomyTypeDesc":78},[202,129,203,204,130,162,163,205,206,164,165,166,135,207,167,91,27,168,208,141],"youtube full","full","google","server","dlp","credits","automatic"]