Azure Bastion
MicrosoftDocs/Agent-Skills
Expert knowledge for Azure Bastion development including best practices, decision making, architecture & design patterns, limits & quotas, security, configuration, and integrations & coding patterns.
Load token usage data from Azure Table Storage for faster iteration and analysis in chat conversations
$ npx skills add rajbos/ai-engineering-fluency --skill azure-storage-loader -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rajbos/ai-engineering-fluency azure-storage-loader --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/rajbos/ai-engineering-fluency.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/azure-storage-loader .claude/skills/azure-storage-loader && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "azure-storage-loader" agent skill from https://github.com/rajbos/ai-engineering-fluency/tree/main/.claude/skills/azure-storage-loader into .claude/skills/azure-storage-loader/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "azure-storage-loader", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/rajbos/ai-engineering-fluency/tree/main/.claude/skills/azure-storage-loaderType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add rajbos/ai-engineering-fluency --skill azure-storage-loader -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rajbos/ai-engineering-fluency azure-storage-loader --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rajbos/ai-engineering-fluency.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/azure-storage-loader .agents/skills/azure-storage-loader && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "azure-storage-loader" agent skill from https://github.com/rajbos/ai-engineering-fluency/tree/main/.claude/skills/azure-storage-loader into .agents/skills/azure-storage-loader/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "azure-storage-loader", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rajbos/ai-engineering-fluency --skill azure-storage-loader -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rajbos/ai-engineering-fluency azure-storage-loader --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rajbos/ai-engineering-fluency.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/azure-storage-loader .cursor/skills/azure-storage-loader && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "azure-storage-loader" agent skill from https://github.com/rajbos/ai-engineering-fluency/tree/main/.claude/skills/azure-storage-loader into .cursor/skills/azure-storage-loader/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "azure-storage-loader", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/rajbos/ai-engineering-fluency.git --path .claude/skills/azure-storage-loader--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add rajbos/ai-engineering-fluency --skill azure-storage-loader -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rajbos/ai-engineering-fluency azure-storage-loader --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rajbos/ai-engineering-fluency.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/azure-storage-loader .gemini/skills/azure-storage-loader && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "azure-storage-loader" agent skill from https://github.com/rajbos/ai-engineering-fluency/tree/main/.claude/skills/azure-storage-loader into .gemini/skills/azure-storage-loader/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "azure-storage-loader", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install rajbos/ai-engineering-fluency azure-storage-loaderInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add rajbos/ai-engineering-fluency --skill azure-storage-loader -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rajbos/ai-engineering-fluency.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/azure-storage-loader .github/skills/azure-storage-loader && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "azure-storage-loader" agent skill from https://github.com/rajbos/ai-engineering-fluency/tree/main/.claude/skills/azure-storage-loader into .github/skills/azure-storage-loader/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "azure-storage-loader", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rajbos/ai-engineering-fluency --skill azure-storage-loader -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rajbos/ai-engineering-fluency azure-storage-loader --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rajbos/ai-engineering-fluency.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/azure-storage-loader .opencode/skills/azure-storage-loader && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "azure-storage-loader" agent skill from https://github.com/rajbos/ai-engineering-fluency/tree/main/.claude/skills/azure-storage-loader into .opencode/skills/azure-storage-loader/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "azure-storage-loader", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
azure-storage-loaderLoad token usage data from Azure Table Storage for faster iteration and analysis in chat conversations
Azure Storage Loader is an agent skill from rajbos/ai-engineering-fluency. Load token usage data from Azure Table Storage for faster iteration and analysis in chat conversations
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development. It works with Microsoft Azure and Microsoft Entra ID. The repository describes itself as: Extension that shows information about the estimated token usage and more of AI in editors/CLI's. The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 257ede3. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
nodenpmazFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
learn.microsoft.comgithub.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
COPILOT_STORAGE_KEYAZURE_CLIENT_SECRETFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Azure Storage Loader loads about 3k tokens when it runs. Until then it costs about 31 tokens; SKILL.md has 965 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from rajbos/ai-engineering-fluency at commit 257ede3, republished under its MIT licence (© rajbos). 965 words, ~3,000 tokens.
.claude/skills/azure-storage-loader/SKILL.md (or your agent's skills folder).This skill enables you to load actual token usage data from Azure Table Storage into your chat conversations. This allows for faster iteration when analyzing usage patterns, testing queries, or debugging issues without needing to sync data from local session files.
The AI Engineering Fluency extension can sync token usage data to Azure Table Storage. This skill provides helper scripts to:
Use this skill when you need to:
Before using this skill, ensure you have:
The extension stores daily aggregate data in Azure Tables with the following schema:
Default: usageAggDaily (configurable via aiEngineeringFluency.backend.aggTable)
Partition Key: ds:{datasetId}|d:{YYYY-MM-DD}
Row Key: m:{model}|w:{workspaceId}|mc:{machineId}|u:{userId}
Fields:
schemaVersion (number): Schema version for compatibilitydatasetId (string): Logical dataset identifierday (string): Date in YYYY-MM-DD formatmodel (string): AI model name (e.g., "gpt-4", "claude-3-5-sonnet-20241022")workspaceId (string): Workspace identifier (sanitized)workspaceName (string, optional): Human-readable workspace namemachineId (string): Machine identifier (sanitized)machineName (string, optional): Human-readable machine nameuserId (string, optional): User identifier (if team sharing enabled)userKeyType (string, optional): Type of user identifier (pseudonymous/teamAlias/entraObjectId)shareWithTeam (boolean, optional): Whether data is shared with teamconsentAt (string, optional): ISO timestamp of consentinputTokens (number): Total input tokens for this dimensionoutputTokens (number): Total output tokens for this dimensioninteractions (number): Total interactions countupdatedAt (string): ISO timestamp of last updateAzure Tables disallow certain characters in PartitionKey/RowKey: /, \, #, ?
These are replaced with _ by the sanitizeTableKey() function in src/backend/storageTables.ts.
Uses DefaultAzureCredential for authentication:
az loginAZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRETRequired RBAC Roles:
Storage Table Data Reader (read-only)Storage Table Data Contributor (read/write)Uses account access key stored in VS Code SecretStorage:
load-table-data.jsFetch token usage data from Azure Table Storage and output as JSON for analysis.
# Navigate to skill directory
cd .github/skills/azure-storage-loader
# Install dependencies (first time only)
npm install
# Load data with Entra ID auth
node load-table-data.js \
--storageAccount "youraccount" \
--tableName "usageAggDaily" \
--datasetId "default" \
--startDate "2026-01-01" \
--endDate "2026-01-30"
# Load data with Shared Key auth
node load-table-data.js \
--storageAccount "youraccount" \
--tableName "usageAggDaily" \
--datasetId "default" \
--startDate "2026-01-01" \
--endDate "2026-01-30" \
--sharedKey "your-account-key"
# Filter by specific model
node load-table-data.js \
--storageAccount "youraccount" \
--tableName "usageAggDaily" \
--datasetId "default" \
--startDate "2026-01-01" \
--endDate "2026-01-30" \
--model "gpt-4o"
# Output to file
node load-table-data.js \
--storageAccount "youraccount" \
--tableName "usageAggDaily" \
--datasetId "default" \
--startDate "2026-01-01" \
--endDate "2026-01-30" \
--output "usage-data.json"--storageAccount (required): Azure Storage account name--tableName (optional): Table name (default: "usageAggDaily")--datasetId (optional): Dataset identifier (default: "default")--startDate (required): Start date in YYYY-MM-DD format--endDate (required): End date in YYYY-MM-DD format--model (optional): Filter by specific model name--workspaceId (optional): Filter by specific workspace ID--userId (optional): Filter by specific user ID--sharedKey (optional): Azure Storage account key (if not using Entra ID)--output (optional): Output file path (default: stdout)--format (optional): Output format: "json" or "csv" (default: "json")JSON array of entities:
[
{
"partitionKey": "ds:default|d:2026-01-16",
"rowKey": "m:gpt-4o|w:workspace123|mc:machine456|u:user789",
"schemaVersion": 3,
"datasetId": "default",
"day": "2026-01-16",
"model": "gpt-4o",
"workspaceId": "workspace123",
"workspaceName": "MyProject",
"machineId": "machine456",
"machineName": "MyLaptop",
"userId": "user789",
"userKeyType": "pseudonymous",
"inputTokens": 1500,
"outputTokens": 800,
"interactions": 25,
"updatedAt": "2026-01-16T23:59:59.999Z"
}
]CSV format (when --format csv is used):
day,model,workspaceId,workspaceName,machineId,machineName,userId,userKeyType,inputTokens,outputTokens,interactions,updatedAt
2026-01-16,gpt-4o,workspace123,MyProject,machine456,MyLaptop,user789,pseudonymous,1500,800,25,2026-01-16T23:59:59.999Z// In a chat conversation:
// "Load the last 7 days of token usage data from Azure"
// Run the helper script:
node load-table-data.js \
--storageAccount "mycopilotusage" \
--datasetId "team-alpha" \
--startDate "2026-01-23" \
--endDate "2026-01-30"
// Analyze the output in the conversation// "Compare GPT-4 vs Claude usage for January"
// Load GPT-4 data
node load-table-data.js \
--storageAccount "mycopilotusage" \
--datasetId "team-alpha" \
--startDate "2026-01-01" \
--endDate "2026-01-31" \
--model "gpt-4o" \
--output "gpt4-jan.json"
// Load Claude data
node load-table-data.js \
--storageAccount "mycopilotusage" \
--datasetId "team-alpha" \
--startDate "2026-01-01" \
--endDate "2026-01-31" \
--model "claude-3-5-sonnet-20241022" \
--output "claude-jan.json"
// Compare in chat using the JSON files// "Show me per-user token usage for our team this month"
node load-table-data.js \
--storageAccount "mycopilotusage" \
--datasetId "team-alpha" \
--startDate "2026-01-01" \
--endDate "2026-01-31" \
--output "team-usage.json"
// In chat, analyze the userId field to aggregate per-user totals// "Calculate the estimated cost of our Copilot usage"
node load-table-data.js \
--storageAccount "mycopilotusage" \
--datasetId "team-alpha" \
--startDate "2026-01-01" \
--endDate "2026-01-31" \
--output "usage-for-costing.json"
// Use model pricing data (src/modelPricing.json) to calculate costs
// Group by model, multiply tokens by pricing ratesThe helper script uses the same Azure SDK packages as the extension:
@azure/data-tables: Table Storage operations@azure/identity: Authentication via DefaultAzureCredentialKey extension modules referenced:
src/backend/storageTables.ts: Entity schema and query functionssrc/backend/services/dataPlaneService.ts: Table client creation and operationssrc/backend/constants.ts: Schema versions and constantsProblem: "Missing Azure RBAC data-plane permissions"
Solution: Ensure you have Storage Table Data Reader or Storage Table Data Contributor role assigned
Problem: "SharedKeyCredential is not authorized" Solution: Verify the shared key is correct and has not been rotated
Problem: No entities returned Solution:
Problem: Queries timing out with large date ranges Solution:
When running as the GitHub Copilot Coding Agent, the load-table-data.js script is executed automatically during the copilot-setup-steps.yml workflow. The aggregated usage data is downloaded to ./usage-data/usage-agg-daily.json in the workspace root.
How it works:
cd .github/skills/azure-storage-loader && npm install --productionload-table-data.js with env vars from the copilot GitHub environment./usage-data/usage-agg-daily.jsonCOPILOT_STORAGE_KEY secret) or Entra ID authenticationEnvironment variables (set in the copilot GitHub environment):
COPILOT_STORAGE_ACCOUNT (required): Storage account nameCOPILOT_TABLE_NAME (optional, default: usageAggDaily): Table nameCOPILOT_DATASET_ID (optional, default: default): Dataset identifierCOPILOT_TABLE_DATA_DAYS (optional, default: 30): Days of data to fetchCOPILOT_STORAGE_KEY (secret, optional): Storage account key for shared key authSee the session-log-data skill (.github/skills/session-log-data/SKILL.md) for details on the downloaded data format and analysis examples.
src/backend/storageTables.ts: Core table operations and schemasrc/backend/services/dataPlaneService.ts: Table client and query servicesrc/backend/services/queryService.ts: Query caching and filteringsrc/backend/constants.ts: Schema versions and configurationsrc/backend/types.ts: TypeScript type definitionspackage.json: Azure SDK dependencies© rajbos, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/azure-storage-loader of rajbos/ai-engineering-fluency.
Open the folder on GitHubat commit 257ede3
Azure Storage Loader next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Azure Storage Loader this skillrajbos/ai-engineering-fluency | 116 | — | ~3k | Automated safety check: Pass | MIT | |
| Azure BastionMicrosoftDocs/Agent-Skills | 777 | — | ~1.8k | Automated safety check: Pass | CC-BY-4.0 | |
| Azure Key VaultMicrosoftDocs/Agent-Skills | 777 | — | ~4.9k | Automated safety check: Pass | CC-BY-4.0 | |
| Entra Agent Idmicrosoft/GitHub-Copilot-for-Azure | 255 | 2 repos | ~4k | Automated safety check: Pass | MIT | |
| Azure App Service Securityvinayaklatthe/microsoft-security-skills | 175 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Azure Identity Dotnetmicrosoft/skills | 3.1k | 5 repos | ~2.5k | Automated safety check: Pass | MIT |
MicrosoftDocs/Agent-Skills
Expert knowledge for Azure Bastion development including best practices, decision making, architecture & design patterns, limits & quotas, security, configuration, and integrations & coding patterns.
MicrosoftDocs/Agent-Skills
Expert knowledge for Azure Key Vault development including troubleshooting, best practices, decision making, architecture & design patterns, limits & quotas, security, configuration, integrations &…
microsoft/GitHub-Copilot-for-Azure
Provision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmipath, OBO, cross-tenant)…
vinayaklatthe/microsoft-security-skills
Guidance for securing Azure App Service web apps and APIs — managed identity, Easy Auth with Microsoft Entra ID, network isolation via private endpoints + VNet integration, HTTPS / TLS hardening…
microsoft/skills
Azure Identity library for .NET. An agent skill from microsoft/skills.
microsoft/skills
Connect to Azure Database for PostgreSQL Flexible Server from Node.js/TypeScript using the pg (node-postgres) package.
rajbos/ai-engineering-fluency
Find all hardcoded URLs in TypeScript source files and verify they resolve (return HTTP 2xx/3xx).
rajbos/ai-engineering-fluency
Create a well-scoped GitHub issue in this repo. An agent skill from rajbos/ai-engineering-fluency.
rajbos/ai-engineering-fluency
Detect copy-pasted code blocks across the shared source (vscode-extension/src, the repo-root src/, cli/src) with the dependency-free check-code-duplication.js detector, then pick one duplicate group…
rajbos/ai-engineering-fluency
Analyze coverage of the vscode-extension's tool-family definitions (DEFAULTTOOLFAMILIES in vscode-extension/src/toolFamilies.ts) against the canonical tool-name list in src/toolNames.json and/or a…
rajbos/ai-engineering-fluency
Load and display the last 10 cache entries as raw JSON output.
rajbos/ai-engineering-fluency
Assess the risk of a changeset (a PR, a branch, or the working tree) and classify it as low, medium, or high with a written rationale.
Works with
Categories
Load token usage data from Azure Table Storage for faster iteration and analysis in chat conversations. Azure Storage Loader is an agent skill from rajbos/ai-engineering-fluency.
Azure Storage Loader fits situations like: development work in your project.
Run `npx skills add rajbos/ai-engineering-fluency --skill azure-storage-loader -a claude-code`. Or copy the skill folder (.claude/skills/azure-storage-loader in rajbos/ai-engineering-fluency) into .claude/skills/azure-storage-loader in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rajbos/ai-engineering-fluency --skill azure-storage-loader -a codex`. Or copy the skill folder (.claude/skills/azure-storage-loader in rajbos/ai-engineering-fluency) into .agents/skills/azure-storage-loader in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rajbos/ai-engineering-fluency --skill azure-storage-loader -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/azure-storage-loader, .gemini/skills/azure-storage-loader, .github/skills/azure-storage-loader and .opencode/skills/azure-storage-loader in your project.
Going by SKILL.md and its folder, Azure Storage Loader needs the command-line tools its instructions call (node, npm and az) and credentials named COPILOT_STORAGE_KEY and AZURE_CLIENT_SECRET. Our summary lists: Node.js; A credential in AZURE_CLIENT_SECRET; A credential in COPILOT_STORAGE_KEY.
SKILL.md names 2 domains. As links in the text: learn.microsoft.com and github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Azure Storage Loader is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Azure Storage Loader: Azure Bastion (MicrosoftDocs/Agent-Skills, 777 stars), Azure Key Vault (MicrosoftDocs/Agent-Skills, 777 stars), Entra Agent Id (microsoft/GitHub-Copilot-for-Azure, 255 stars) and Azure App Service Security (vinayaklatthe/microsoft-security-skills, 175 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
rajbos (a GitHub user) maintains it in rajbos/ai-engineering-fluency, which has 116 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 9, 2026.
Source: rajbos/ai-engineering-fluency on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.