[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7DHGA9YBSVRFXYYZ5HTP2FE":3,"skill-same:01M7DHGA9YBSVRFXYYZ5HTP2FE":48},{"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":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":13,"repositoryHtmlUrl":30,"repositoryHomepageUrl":31,"ownerHtmlUrl":32,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":33,"install":34,"resources":47},"01M7DHGA9YBSVRFXYYZ5HTP2FE","azure-storage-blob-rust",null,"Azure Blob Storage library for Rust. Upload, download, and manage blobs and containers.\nTriggers: \"blob storage rust\", \"BlobClient rust\", \"upload blob rust\", \"download blob rust\", \"storage container rust\", \"BlobServiceClient rust\".","ak2dev\u002Fagentguard","ak2dev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F233005497?v=4","01M7DGWK3E3XCC276C6YRFSN05","01M7DGWK4J2A9WQ44CS5CRP4R6",0,"MIT","https:\u002F\u002Fgithub.com\u002Fak2dev\u002Fagentguard\u002Fblob\u002Fmain\u002Fbench\u002Fcorpus\u002Fbenign\u002Freal-ms-azure-storage-blob-rust\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: azure-storage-blob-rust\ndescription: |\n  Azure Blob Storage library for Rust. Upload, download, and manage blobs and containers.\n  Triggers: \"blob storage rust\", \"BlobClient rust\", \"upload blob rust\", \"download blob rust\", \"storage container rust\", \"BlobServiceClient rust\".\nlicense: MIT\nmetadata:\n  author: Microsoft\n  package: azure_storage_blob\n---\n\n# Azure Blob Storage library for Rust\n\nClient library for Azure Blob Storage — upload, download, and manage blobs and containers.\n\nUse this skill when:\n\n- An app needs to upload or download blobs from Azure Storage in Rust\n- You need to create or manage blob containers\n- You need to list blobs with pagination\n- You need RBAC-based auth for blob operations\n\n> **IMPORTANT:** Only use the official `azure_storage_blob` crate published by the [azure-sdk](https:\u002F\u002Fcrates.io\u002Fusers\u002Fazure-sdk) crates.io user. Do NOT use the unofficial `azure_storage`, `azure_storage_blobs`, or `azure_sdk_for_rust` community crates. Official crates use underscores in names and none have version 0.21.0.\n\n## Installation\n\n```sh\ncargo add azure_storage_blob azure_identity azure_core tokio futures\n```\n\n> If your code uses `azure_core` types directly (for example, `azure_core::http::Url` or `azure_core::http::RequestContent`), add `azure_core` to `Cargo.toml`. If you only use `azure_storage_blob` re-exports, direct `azure_core` dependency is optional.\n\n## Environment Variables\n\n```bash\nAZURE_STORAGE_ACCOUNT=\u003Caccount-name>                         # Preferred when the caller gives an account name\nAZURE_STORAGE_ENDPOINT=https:\u002F\u002F\u003Caccount>.blob.core.windows.net\u002F # Optional alternative when the caller gives a full endpoint\n```\n\nWhen both are available, prefer constructing the endpoint from `AZURE_STORAGE_ACCOUNT` so the code matches common evaluation prompts.\n\n## Authentication\n\nRust Azure SDK code must not use `DefaultAzureCredential`. The Rust identity crate does not provide that type.\n\n```rust\n\u002F\u002F Correct for local development\nuse azure_identity::DeveloperToolsCredential;\n\nlet credential = DeveloperToolsCredential::new(None)?;\n```\n\n```rust\n\u002F\u002F Incorrect in Rust: this type does not exist in azure_identity\nuse azure_identity::DefaultAzureCredential;\n```\n\n```rust\nuse azure_core::http::Url;\nuse azure_identity::DeveloperToolsCredential;\nuse azure_storage_blob::BlobServiceClient;\n\n#[tokio::main]\nasync fn main() -> Result\u003C(), Box\u003Cdyn std::error::Error>> {\n    \u002F\u002F Local dev: DeveloperToolsCredential. Production: use ManagedIdentityCredential.\n    let credential = DeveloperToolsCredential::new(None)?;\n    let service_url = Url::parse(\"https:\u002F\u002F\u003Cstorage_account_name>.blob.core.windows.net\u002F\")?;\n    let service_client = BlobServiceClient::new(\n        service_url,\n        Some(credential),\n        None,\n    )?;\n\n    \u002F\u002F Derive container and blob clients by name.\n    let container_client = service_client.blob_container_client(\"\u003Ccontainer_name>\");\n    let blob_client = container_client.blob_client(\"\u003Cblob_name>\");\n    Ok(())\n}\n```\n\n## Client Types\n\n| Client                | Purpose                                   |\n| --------------------- | ----------------------------------------- |\n| `BlobServiceClient`   | Account-level operations, list containers |\n| `BlobContainerClient` | Container operations, list blobs          |\n| `BlobClient`          | Individual blob operations                |\n\n## Core Workflow\n\n### Upload Blob\n\n```rust\nuse azure_core::http::{RequestContent, Url};\nuse azure_identity::DeveloperToolsCredential;\nuse azure_storage_blob::BlobServiceClient;\n\n#[tokio::main]\nasync fn main() -> Result\u003C(), Box\u003Cdyn std::error::Error>> {\n    \u002F\u002F Local dev: DeveloperToolsCredential. Production: use ManagedIdentityCredential.\n    let credential = DeveloperToolsCredential::new(None)?;\n    let service_url = Url::parse(\"https:\u002F\u002F\u003Cstorage_account_name>.blob.core.windows.net\u002F\")?;\n    let service_client = BlobServiceClient::new(service_url, Some(credential), None)?;\n    let blob_client = service_client.blob_client(\"\u003Ccontainer_name>\", \"\u003Cblob_name>\");\n\n    let data = b\"hello world\";\n    blob_client.upload(RequestContent::from(data.to_vec()), None).await?;\n    Ok(())\n}\n```\n\n### Download Blob \u002F Get Properties\n\n```rust\n\u002F\u002F Get blob properties\nlet props = blob_client.get_properties(None).await?;\n\n\u002F\u002F Download blob content\nlet response = blob_client.download(None).await?;\nlet content = String::from_utf8(response.body.collect().await?.into())?;\n```\n\n### Delete Blob\n\n```rust\nblob_client.delete(None).await?;\n```\n\n### Container Operations\n\n```rust\nuse azure_core::http::Url;\nuse azure_identity::DeveloperToolsCredential;\nuse azure_storage_blob::BlobServiceClient;\nuse futures::TryStreamExt as _;\n\nlet credential = DeveloperToolsCredential::new(None)?;\nlet service_url = Url::parse(\"https:\u002F\u002F\u003Cstorage_account_name>.blob.core.windows.net\u002F\")?;\nlet service_client = BlobServiceClient::new(service_url, Some(credential), None)?;\nlet container_client = service_client.blob_container_client(\"\u003Ccontainer_name>\");\n\n\u002F\u002F Create container\ncontainer_client.create(None).await?;\n\n\u002F\u002F List blobs (the pager yields BlobItem values directly for this client pattern)\nlet mut pager = container_client.list_blobs(None)?;\nwhile let Some(blob) = pager.try_next().await? {\n    let name = blob.name.as_deref().unwrap_or(\"\u003Cunnamed>\");\n    let size = blob\n        .properties\n        .as_ref()\n        .and_then(|properties| properties.content_length);\n\n    match size {\n        Some(size) => println!(\"Blob: {name} ({size} bytes)\"),\n        None => println!(\"Blob: {name}\"),\n    }\n}\n```\n\nFor `azure_storage_blob` 1.x, do not assume you need a nested page loop like `for item in &page.blob_items`. In this usage pattern, `try_next()` already yields the blob item you want to print.\n\n## Error Handling\n\nUse `StorageError` for programmatic access to storage-specific error codes:\n\n```rust\nuse azure_core::error::ErrorKind;\nuse azure_storage_blob::StorageError;\nuse azure_storage_blob::models::StorageErrorCode;\n\nlet result = blob_client.download(None).await;\n\nmatch result {\n    Ok(response) => {\n        let content: Vec\u003Cu8> = response.body.collect().await?.into();\n        println!(\"Downloaded {} bytes\", content.len());\n    }\n    Err(error) => {\n        if matches!(error.kind(), ErrorKind::HttpResponse { .. }) {\n            \u002F\u002F Convert to StorageError for programmatic access\n            let storage_error: StorageError = error.try_into()?;\n            println!(\"HTTP Status: {}\", storage_error.status_code);\n\n            if let Some(error_code) = &storage_error.error_code {\n                match error_code {\n                    StorageErrorCode::BlobNotFound => {\n                        println!(\"The blob does not exist.\");\n                    }\n                    StorageErrorCode::ContainerNotFound => {\n                        println!(\"The container does not exist.\");\n                    }\n                    StorageErrorCode::AuthorizationFailure => {\n                        println!(\"Authorization failed. Check RBAC roles.\");\n                    }\n                    _ => println!(\"Storage error: {error_code}\"),\n                }\n            }\n\n            if let Some(request_id) = &storage_error.request_id {\n                println!(\"Request ID (for Azure support): {request_id}\");\n            }\n        } else {\n            println!(\"Non-HTTP error: {:?}\", error);\n        }\n    }\n}\n```\n\n> **Note:** `StorageError::try_into` requires an owned error object — it will not compile if handed a reference to an error.\n\n## RBAC Roles\n\nFor Entra ID auth, assign one of these roles to the identity:\n\n| Role                            | Access                     |\n| ------------------------------- | -------------------------- |\n| `Storage Blob Data Reader`      | Read-only                  |\n| `Storage Blob Data Contributor` | Read\u002Fwrite                 |\n| `Storage Blob Data Owner`       | Full access including RBAC |\n\n## Best Practices\n\n1. **Use `cargo add` to manage dependencies, never edit `Cargo.toml` directly.** Add and remove Rust SDK dependencies with cargo commands instead of manual manifest edits.\n2. **Add `azure_core` only when importing `azure_core` types directly.** If your code imports `azure_core::http::Url`, `azure_core::http::RequestContent`, or `azure_core::error::ErrorKind`, include `azure_core`; otherwise a direct dependency is optional.\n3. **Use `DeveloperToolsCredential`** for local dev, **`ManagedIdentityCredential`** for production — Rust does not provide a single `DefaultAzureCredential` type\n4. **Never hardcode credentials** — use environment variables or managed identity\n5. **Use `RequestContent::from()`** to wrap data for blob uploads — ensures proper content handling by the SDK\n6. **Assign RBAC roles** — ensure \"Storage Blob Data Contributor\" for write access\n7. **Reuse clients** — clients are thread-safe; create once, share across tasks\n8. **Prefer `BlobServiceClient` as the entry point** and derive container\u002Fblob clients from it\n9. **Treat many storage model fields as optional.** `blob.name` is an `Option\u003CString>` and content length is accessed via `blob.properties.as_ref().and_then(|p| p.content_length)`.\n10. **Run `cargo clippy -- -D warnings` before considering the task complete** when the prompt or CI expects strict lint compliance; fix style lints such as collapsible `if` blocks, not just compiler errors.\n11. **Prefer crate README\u002Fexamples over generated internal type names** when validating public API shapes such as pagination results\n12. **Future-proof `#[non_exhaustive]` SDK models** — when constructing SDK model\u002Foptions structs, end the initializer with `..Default::default()` (add `#[allow(clippy::needless_update)]`) and use a `_` wildcard arm when matching SDK enums, so new service-added fields\u002Fvariants don't break your build\n\n## Common Rust Blob Pitfalls\n\n- Do not import `azure_identity::DefaultAzureCredential`; use `DeveloperToolsCredential` or another real Rust credential type.\n- Do not assume generated internal model names describe the public pager item type; follow the documented `list_blobs` example for this crate.\n- Do not print `blob.name` with `{}` directly; unwrap or provide a fallback because it is optional.\n- Do not stop after `cargo build` passes when the task also requires `cargo clippy -- -D warnings`.\n\n## Reference Links\n\n| Resource      | Link                                                                                 |\n| ------------- | ------------------------------------------------------------------------------------ |\n| API Reference | https:\u002F\u002Fdocs.rs\u002Fcrate\u002Fazure_storage_blob\u002Flatest                                      |\n| crates.io     | https:\u002F\u002Fcrates.io\u002Fcrates\u002Fazure_storage_blob                                          |\n| Source Code   | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-rust\u002Ftree\u002Fmain\u002Fsdk\u002Fstorage\u002Fazure_storage_blob |\n","# Azure Blob Storage library for Rust\n\nClient library for Azure Blob Storage — upload, download, and manage blobs and containers.\n\nUse this skill when:\n\n- An app needs to upload or download blobs from Azure Storage in Rust\n- You need to create or manage blob containers\n- You need to list blobs with pagination\n- You need RBAC-based auth for blob operations\n\n> **IMPORTANT:** Only use the official `azure_storage_blob` crate published by the [azure-sdk](https:\u002F\u002Fcrates.io\u002Fusers\u002Fazure-sdk) crates.io user. Do NOT use the unofficial `azure_storage`, `azure_storage_blobs`, or `azure_sdk_for_rust` community crates. Official crates use underscores in names and none have version 0.21.0.\n\n## Installation\n\n```sh\ncargo add azure_storage_blob azure_identity azure_core tokio futures\n```\n\n> If your code uses `azure_core` types directly (for example, `azure_core::http::Url` or `azure_core::http::RequestContent`), add `azure_core` to `Cargo.toml`. If you only use `azure_storage_blob` re-exports, direct `azure_core` dependency is optional.\n\n## Environment Variables\n\n```bash\nAZURE_STORAGE_ACCOUNT=\u003Caccount-name>                         # Preferred when the caller gives an account name\nAZURE_STORAGE_ENDPOINT=https:\u002F\u002F\u003Caccount>.blob.core.windows.net\u002F # Optional alternative when the caller gives a full endpoint\n```\n\nWhen both are available, prefer constructing the endpoint from `AZURE_STORAGE_ACCOUNT` so the code matches common evaluation prompts.\n\n## Authentication\n\nRust Azure SDK code must not use `DefaultAzureCredential`. The Rust identity crate does not provide that type.\n\n```rust\n\u002F\u002F Correct for local development\nuse azure_identity::DeveloperToolsCredential;\n\nlet credential = DeveloperToolsCredential::new(None)?;\n```\n\n```rust\n\u002F\u002F Incorrect in Rust: this type does not exist in azure_identity\nuse azure_identity::DefaultAzureCredential;\n```\n\n```rust\nuse azure_core::http::Url;\nuse azure_identity::DeveloperToolsCredential;\nuse azure_storage_blob::BlobServiceClient;\n\n#[tokio::main]\nasync fn main() -> Result\u003C(), Box\u003Cdyn std::error::Error>> {\n    \u002F\u002F Local dev: DeveloperToolsCredential. Production: use ManagedIdentityCredential.\n    let credential = DeveloperToolsCredential::new(None)?;\n    let service_url = Url::parse(\"https:\u002F\u002F\u003Cstorage_account_name>.blob.core.windows.net\u002F\")?;\n    let service_client = BlobServiceClient::new(\n        service_url,\n        Some(credential),\n        None,\n    )?;\n\n    \u002F\u002F Derive container and blob clients by name.\n    let container_client = service_client.blob_container_client(\"\u003Ccontainer_name>\");\n    let blob_client = container_client.blob_client(\"\u003Cblob_name>\");\n    Ok(())\n}\n```\n\n## Client Types\n\n| Client                | Purpose                                   |\n| --------------------- | ----------------------------------------- |\n| `BlobServiceClient`   | Account-level operations, list containers |\n| `BlobContainerClient` | Container operations, list blobs          |\n| `BlobClient`          | Individual blob operations                |\n\n## Core Workflow\n\n### Upload Blob\n\n```rust\nuse azure_core::http::{RequestContent, Url};\nuse azure_identity::DeveloperToolsCredential;\nuse azure_storage_blob::BlobServiceClient;\n\n#[tokio::main]\nasync fn main() -> Result\u003C(), Box\u003Cdyn std::error::Error>> {\n    \u002F\u002F Local dev: DeveloperToolsCredential. Production: use ManagedIdentityCredential.\n    let credential = DeveloperToolsCredential::new(None)?;\n    let service_url = Url::parse(\"https:\u002F\u002F\u003Cstorage_account_name>.blob.core.windows.net\u002F\")?;\n    let service_client = BlobServiceClient::new(service_url, Some(credential), None)?;\n    let blob_client = service_client.blob_client(\"\u003Ccontainer_name>\", \"\u003Cblob_name>\");\n\n    let data = b\"hello world\";\n    blob_client.upload(RequestContent::from(data.to_vec()), None).await?;\n    Ok(())\n}\n```\n\n### Download Blob \u002F Get Properties\n\n```rust\n\u002F\u002F Get blob properties\nlet props = blob_client.get_properties(None).await?;\n\n\u002F\u002F Download blob content\nlet response = blob_client.download(None).await?;\nlet content = String::from_utf8(response.body.collect().await?.into())?;\n```\n\n### Delete Blob\n\n```rust\nblob_client.delete(None).await?;\n```\n\n### Container Operations\n\n```rust\nuse azure_core::http::Url;\nuse azure_identity::DeveloperToolsCredential;\nuse azure_storage_blob::BlobServiceClient;\nuse futures::TryStreamExt as _;\n\nlet credential = DeveloperToolsCredential::new(None)?;\nlet service_url = Url::parse(\"https:\u002F\u002F\u003Cstorage_account_name>.blob.core.windows.net\u002F\")?;\nlet service_client = BlobServiceClient::new(service_url, Some(credential), None)?;\nlet container_client = service_client.blob_container_client(\"\u003Ccontainer_name>\");\n\n\u002F\u002F Create container\ncontainer_client.create(None).await?;\n\n\u002F\u002F List blobs (the pager yields BlobItem values directly for this client pattern)\nlet mut pager = container_client.list_blobs(None)?;\nwhile let Some(blob) = pager.try_next().await? {\n    let name = blob.name.as_deref().unwrap_or(\"\u003Cunnamed>\");\n    let size = blob\n        .properties\n        .as_ref()\n        .and_then(|properties| properties.content_length);\n\n    match size {\n        Some(size) => println!(\"Blob: {name} ({size} bytes)\"),\n        None => println!(\"Blob: {name}\"),\n    }\n}\n```\n\nFor `azure_storage_blob` 1.x, do not assume you need a nested page loop like `for item in &page.blob_items`. In this usage pattern, `try_next()` already yields the blob item you want to print.\n\n## Error Handling\n\nUse `StorageError` for programmatic access to storage-specific error codes:\n\n```rust\nuse azure_core::error::ErrorKind;\nuse azure_storage_blob::StorageError;\nuse azure_storage_blob::models::StorageErrorCode;\n\nlet result = blob_client.download(None).await;\n\nmatch result {\n    Ok(response) => {\n        let content: Vec\u003Cu8> = response.body.collect().await?.into();\n        println!(\"Downloaded {} bytes\", content.len());\n    }\n    Err(error) => {\n        if matches!(error.kind(), ErrorKind::HttpResponse { .. }) {\n            \u002F\u002F Convert to StorageError for programmatic access\n            let storage_error: StorageError = error.try_into()?;\n            println!(\"HTTP Status: {}\", storage_error.status_code);\n\n            if let Some(error_code) = &storage_error.error_code {\n                match error_code {\n                    StorageErrorCode::BlobNotFound => {\n                        println!(\"The blob does not exist.\");\n                    }\n                    StorageErrorCode::ContainerNotFound => {\n                        println!(\"The container does not exist.\");\n                    }\n                    StorageErrorCode::AuthorizationFailure => {\n                        println!(\"Authorization failed. Check RBAC roles.\");\n                    }\n                    _ => println!(\"Storage error: {error_code}\"),\n                }\n            }\n\n            if let Some(request_id) = &storage_error.request_id {\n                println!(\"Request ID (for Azure support): {request_id}\");\n            }\n        } else {\n            println!(\"Non-HTTP error: {:?}\", error);\n        }\n    }\n}\n```\n\n> **Note:** `StorageError::try_into` requires an owned error object — it will not compile if handed a reference to an error.\n\n## RBAC Roles\n\nFor Entra ID auth, assign one of these roles to the identity:\n\n| Role                            | Access                     |\n| ------------------------------- | -------------------------- |\n| `Storage Blob Data Reader`      | Read-only                  |\n| `Storage Blob Data Contributor` | Read\u002Fwrite                 |\n| `Storage Blob Data Owner`       | Full access including RBAC |\n\n## Best Practices\n\n1. **Use `cargo add` to manage dependencies, never edit `Cargo.toml` directly.** Add and remove Rust SDK dependencies with cargo commands instead of manual manifest edits.\n2. **Add `azure_core` only when importing `azure_core` types directly.** If your code imports `azure_core::http::Url`, `azure_core::http::RequestContent`, or `azure_core::error::ErrorKind`, include `azure_core`; otherwise a direct dependency is optional.\n3. **Use `DeveloperToolsCredential`** for local dev, **`ManagedIdentityCredential`** for production — Rust does not provide a single `DefaultAzureCredential` type\n4. **Never hardcode credentials** — use environment variables or managed identity\n5. **Use `RequestContent::from()`** to wrap data for blob uploads — ensures proper content handling by the SDK\n6. **Assign RBAC roles** — ensure \"Storage Blob Data Contributor\" for write access\n7. **Reuse clients** — clients are thread-safe; create once, share across tasks\n8. **Prefer `BlobServiceClient` as the entry point** and derive container\u002Fblob clients from it\n9. **Treat many storage model fields as optional.** `blob.name` is an `Option\u003CString>` and content length is accessed via `blob.properties.as_ref().and_then(|p| p.content_length)`.\n10. **Run `cargo clippy -- -D warnings` before considering the task complete** when the prompt or CI expects strict lint compliance; fix style lints such as collapsible `if` blocks, not just compiler errors.\n11. **Prefer crate README\u002Fexamples over generated internal type names** when validating public API shapes such as pagination results\n12. **Future-proof `#[non_exhaustive]` SDK models** — when constructing SDK model\u002Foptions structs, end the initializer with `..Default::default()` (add `#[allow(clippy::needless_update)]`) and use a `_` wildcard arm when matching SDK enums, so new service-added fields\u002Fvariants don't break your build\n\n## Common Rust Blob Pitfalls\n\n- Do not import `azure_identity::DefaultAzureCredential`; use `DeveloperToolsCredential` or another real Rust credential type.\n- Do not assume generated internal model names describe the public pager item type; follow the documented `list_blobs` example for this crate.\n- Do not print `blob.name` with `{}` directly; unwrap or provide a fallback because it is optional.\n- Do not stop after `cargo build` passes when the task also requires `cargo clippy -- -D warnings`.\n\n## Reference Links\n\n| Resource      | Link                                                                                 |\n| ------------- | ------------------------------------------------------------------------------------ |\n| API Reference | https:\u002F\u002Fdocs.rs\u002Fcrate\u002Fazure_storage_blob\u002Flatest                                      |\n| crates.io     | https:\u002F\u002Fcrates.io\u002Fcrates\u002Fazure_storage_blob                                          |\n| Source Code   | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-rust\u002Ftree\u002Fmain\u002Fsdk\u002Fstorage\u002Fazure_storage_blob |\n",{"name":5,"license":14,"metadata":23,"description":26},{"author":24,"package":25},"Microsoft","azure_storage_blob","Azure Blob Storage library for Rust. Upload, download, and manage blobs and containers.\nTriggers: \"blob storage rust\", \"BlobClient rust\", \"upload blob rust\", \"download blob rust\", \"storage container rust\", \"BlobServiceClient rust\".\n","main","634c25395a24b98cd6125453ad4abb65517bcabb","bench\u002Fcorpus\u002Fbenign\u002Freal-ms-azure-storage-blob-rust","https:\u002F\u002Fgithub.com\u002Fak2dev\u002Fagentguard","https:\u002F\u002Fsite-bionic8.vercel.app","https:\u002F\u002Fgithub.com\u002Fak2dev","2026-11-11 02:37:06",{"source":8,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add ak2dev\u002Fagentguard --skill azure-storage-blob-rust",{"tool":40,"command":41},"bunx","bunx skills add ak2dev\u002Fagentguard --skill azure-storage-blob-rust",{"tool":43,"command":44},"pnpm","pnpm dlx skills add ak2dev\u002Fagentguard --skill azure-storage-blob-rust","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fak2dev\u002Fagentguard\u002Fblob\u002Fmain\u002Fbench\u002Fcorpus\u002Fbenign\u002Freal-ms-azure-storage-blob-rust\u002FSKILL.md",true,[],[49,57,62,67,72,78],{"skillNo":50,"name":51,"nameZh":6,"description":52,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":53,"licenseFileUrl":6,"sourceHtmlUrl":54,"categories":55,"keywords":56,"publishedAt":18},"01M7DJ7GBSJBJ32GXNQXVAMNYK","csv-tool","Summarize CSV files and report column statistics.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fak2dev\u002Fagentguard\u002Fblob\u002Fmain\u002Ffixtures\u002Frules\u002FAG-SYS-002\u002Fpositive\u002Ffault\u002Fcsv-tool\u002FSKILL.md",[],[],{"skillNo":58,"name":51,"nameZh":6,"description":52,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":53,"licenseFileUrl":6,"sourceHtmlUrl":59,"categories":60,"keywords":61,"publishedAt":18},"01M7DJ7F00PA7EHFM39RVCC8R5","https:\u002F\u002Fgithub.com\u002Fak2dev\u002Fagentguard\u002Fblob\u002Fmain\u002Ffixtures\u002Frules\u002FAG-SYS-002\u002Fnegative\u002Fnormal\u002Fcsv-tool\u002FSKILL.md",[],[],{"skillNo":63,"name":51,"nameZh":6,"description":52,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":53,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":18},"01M7DJ7DP7KDW7MYY5Q0R0JFEN","https:\u002F\u002Fgithub.com\u002Fak2dev\u002Fagentguard\u002Fblob\u002Fmain\u002Ffixtures\u002Frules\u002FAG-SYS-001\u002Fpositive\u002Ftoo-large\u002Fcsv-tool\u002FSKILL.md",[],[],{"skillNo":68,"name":51,"nameZh":6,"description":52,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":53,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":18},"01M7DJ7C3VA0KQ8Q9ESNX6AJHE","https:\u002F\u002Fgithub.com\u002Fak2dev\u002Fagentguard\u002Fblob\u002Fmain\u002Ffixtures\u002Frules\u002FAG-SYS-001\u002Fnegative\u002Fsmall\u002Fcsv-tool\u002FSKILL.md",[],[],{"skillNo":73,"name":74,"nameZh":6,"description":52,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":53,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":18},"01M7DJ7AQZTGY5YADQX73TRB7K","pdf","https:\u002F\u002Fgithub.com\u002Fak2dev\u002Fagentguard\u002Fblob\u002Fmain\u002Ffixtures\u002Frules\u002FAG-SKL-TYP-002\u002Fpositive\u002Fother-publisher\u002Fpdf\u002FSKILL.md",[],[],{"skillNo":79,"name":74,"nameZh":6,"description":52,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":53,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":18},"01M7DJ7831XDVWS4W9SAAKBJHX","https:\u002F\u002Fgithub.com\u002Fak2dev\u002Fagentguard\u002Fblob\u002Fmain\u002Ffixtures\u002Frules\u002FAG-SKL-TYP-002\u002Fnegative\u002Fsame-publisher\u002Fpdf\u002FSKILL.md",[],[]]