Agent skill

Azure Storage Loader

by rajbos in rajbos/ai-engineering-fluency

Load token usage data from Azure Table Storage for faster iteration and analysis in chat conversations

MITAuto-check passedDevelopment

Install Azure Storage Loader

skills CLI
$ npx skills add rajbos/ai-engineering-fluency --skill azure-storage-loader -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install rajbos/ai-engineering-fluency azure-storage-loader --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
azure-storage-loader
GitHub stars
116
Token cost
~3k tokens
SKILL.md length
965 words
Files
1
Skills in repo
21
Repo updated
First seen
Licence
MIT

At a glance

Load token usage data from Azure Table Storage for faster iteration and analysis in chat conversations

  • Works in 4 steps: The workflow installs dependencies: cd… → Runs load-table-data.js with env vars… → Outputs JSON to… → …
  • Development work in your project
  • SKILL.md covers Overview, When to Use This Skill, Prerequisites and Azure Table Storage Schema, plus 9 more sections
  • Calls node, npm and az; needs COPILOT_STORAGE_KEY and AZURE_CLIENT_SECRET

What it does

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.

When your agent uses it

  • Development work in your project

Example prompts

  • “/azure-storage-loader”

Requirements

  • Node.js
  • A credential in AZURE_CLIENT_SECRET
  • A credential in COPILOT_STORAGE_KEY

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. The workflow installs dependencies: cd .github/skills/azure-storage-loader && npm install --production
  2. Runs load-table-data.js with env vars from the copilot GitHub environment
  3. Outputs JSON to ./usage-data/usage-agg-daily.json
  4. Uses shared key (COPILOT_STORAGE_KEY secret) or Entra ID authentication

What it can do on your machine

Read from SKILL.md and the folder at commit 257ede3. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • node
    • npm
    • az

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • learn.microsoft.com
    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • COPILOT_STORAGE_KEY
    • AZURE_CLIENT_SECRET

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~31
When it runs · the whole SKILL.md, loaded when a task matches
~3k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from rajbos/ai-engineering-fluency at commit 257ede3, republished under its MIT licence (© rajbos). 965 words, ~3,000 tokens.

Download SKILL.mdSave it as .claude/skills/azure-storage-loader/SKILL.md (or your agent's skills folder).
name
azure-storage-loader
description
Load token usage data from Azure Table Storage for faster iteration and analysis in chat conversations

Azure Storage Loader Skill

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.

Overview

The AI Engineering Fluency extension can sync token usage data to Azure Table Storage. This skill provides helper scripts to:

  • Query and fetch data from Azure Storage Tables
  • Load data into a usable format for chat analysis
  • Authenticate using Azure credentials (Entra ID or Shared Key)
  • Filter data by date range, dataset, model, workspace, or user

When to Use This Skill

Use this skill when you need to:

  • Analyze actual usage data patterns without manual export
  • Test query logic against real data
  • Debug backend sync issues with live data
  • Perform ad-hoc analysis of token usage across teams
  • Validate data transformations or aggregations
  • Quickly iterate on data analysis tasks in chat

Prerequisites

Before using this skill, ensure you have:

  • Azure Storage account with token usage data already synced
  • Azure credentials configured (either Entra ID or Shared Key)
  • Node.js installed for running helper scripts
  • Access to the storage account and table (read permissions minimum)

Azure Table Storage Schema

The extension stores daily aggregate data in Azure Tables with the following schema:

Table Name

Default: usageAggDaily (configurable via aiEngineeringFluency.backend.aggTable)

Entity Structure

Partition Key: ds:{datasetId}|d:{YYYY-MM-DD}

  • Groups entities by dataset and day for efficient queries

Row Key: m:{model}|w:{workspaceId}|mc:{machineId}|u:{userId}

  • Unique identifier for each model/workspace/machine/user combination

Fields:

  • schemaVersion (number): Schema version for compatibility
  • datasetId (string): Logical dataset identifier
  • day (string): Date in YYYY-MM-DD format
  • model (string): AI model name (e.g., "gpt-4", "claude-3-5-sonnet-20241022")
  • workspaceId (string): Workspace identifier (sanitized)
  • workspaceName (string, optional): Human-readable workspace name
  • machineId (string): Machine identifier (sanitized)
  • machineName (string, optional): Human-readable machine name
  • userId (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 team
  • consentAt (string, optional): ISO timestamp of consent
  • inputTokens (number): Total input tokens for this dimension
  • outputTokens (number): Total output tokens for this dimension
  • interactions (number): Total interactions count
  • updatedAt (string): ISO timestamp of last update
Sanitization Rules

Azure Tables disallow certain characters in PartitionKey/RowKey: /, \, #, ? These are replaced with _ by the sanitizeTableKey() function in src/backend/storageTables.ts.

Authentication Methods

Uses DefaultAzureCredential for authentication:

  • Azure CLI: az login
  • VS Code: Sign in via Azure extension
  • Environment variables: AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET
  • Managed Identity (when running in Azure)

Required RBAC Roles:

  • Storage Table Data Reader (read-only)
  • Storage Table Data Contributor (read/write)
Option 2: Shared Key

Uses account access key stored in VS Code SecretStorage:

  • Set via command: "AI Engineering Fluency: Set Backend Storage Shared Key"
  • Does not sync across devices
  • Requires account key from Azure Portal

Helper Script: load-table-data.js

Purpose

Fetch token usage data from Azure Table Storage and output as JSON for analysis.

Usage
bash
# 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"
Parameters
  • --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")
Output Format

JSON array of entities:

json
[
  {
    "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):

csv
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

Usage Examples

Example 1: Basic Data Loading
javascript
// 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
Example 2: Model Comparison
javascript
// "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 full SKILL.md (387 more words)Show less
Example 3: Team Analytics
javascript
// "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
Example 4: Cost Analysis
javascript
// "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 rates

Integration with Extension Code

The helper script uses the same Azure SDK packages as the extension:

  • @azure/data-tables: Table Storage operations
  • @azure/identity: Authentication via DefaultAzureCredential

Key extension modules referenced:

  • src/backend/storageTables.ts: Entity schema and query functions
  • src/backend/services/dataPlaneService.ts: Table client creation and operations
  • src/backend/constants.ts: Schema versions and constants

Troubleshooting

Authentication Errors

Problem: "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

Data Not Found

Problem: No entities returned Solution:

  • Verify the datasetId matches your configuration
  • Check that data has been synced (enable backend in extension settings)
  • Confirm the date range is correct
  • Check that the table name matches (default: "usageAggDaily")
Query Timeouts

Problem: Queries timing out with large date ranges Solution:

  • Reduce the date range (max 90 days recommended)
  • Use pagination if loading large datasets
  • Filter by model or workspace to reduce result set

Security Considerations

  • Shared Keys: Never commit shared keys to source control
  • User Data: Respect team sharing consent settings
  • Data Retention: Follow your organization's data retention policies
  • Access Control: Use least-privilege RBAC roles when possible
  • Audit Logs: Enable Azure Storage logs for compliance

Coding Agent Integration

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:

  1. The workflow installs dependencies: cd .github/skills/azure-storage-loader && npm install --production
  2. Runs load-table-data.js with env vars from the copilot GitHub environment
  3. Outputs JSON to ./usage-data/usage-agg-daily.json
  4. Uses shared key (COPILOT_STORAGE_KEY secret) or Entra ID authentication

Environment variables (set in the copilot GitHub environment):

  • COPILOT_STORAGE_ACCOUNT (required): Storage account name
  • COPILOT_TABLE_NAME (optional, default: usageAggDaily): Table name
  • COPILOT_DATASET_ID (optional, default: default): Dataset identifier
  • COPILOT_TABLE_DATA_DAYS (optional, default: 30): Days of data to fetch
  • COPILOT_STORAGE_KEY (secret, optional): Storage account key for shared key auth

See 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 schema
  • src/backend/services/dataPlaneService.ts: Table client and query service
  • src/backend/services/queryService.ts: Query caching and filtering
  • src/backend/constants.ts: Schema versions and configuration
  • src/backend/types.ts: TypeScript type definitions
  • package.json: Azure SDK dependencies

Additional Resources

© rajbos, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/azure-storage-loader of rajbos/ai-engineering-fluency.

Open the folder on GitHubat commit 257ede3

Compare with similar skills

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.

Azure Storage Loader compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Azure Storage Loader this skillrajbos/ai-engineering-fluency116—~3kAutomated safety check: PassMIT
Azure BastionMicrosoftDocs/Agent-Skills777—~1.8kAutomated safety check: PassCC-BY-4.0
Azure Key VaultMicrosoftDocs/Agent-Skills777—~4.9kAutomated safety check: PassCC-BY-4.0
Entra Agent Idmicrosoft/GitHub-Copilot-for-Azure2552 repos~4kAutomated safety check: PassMIT
Azure App Service Securityvinayaklatthe/microsoft-security-skills175—~1.9kAutomated safety check: PassMIT
Azure Identity Dotnetmicrosoft/skills3.1k5 repos~2.5kAutomated safety check: PassMIT

Similar skills

  • Azure Bastion

    MicrosoftDocs/Agent-Skills

    Official

    Expert knowledge for Azure Bastion development including best practices, decision making, architecture & design patterns, limits & quotas, security, configuration, and integrations & coding patterns.

    777 GitHub stars~1.8k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Azure Key Vault

    MicrosoftDocs/Agent-Skills

    Official

    Expert knowledge for Azure Key Vault development including troubleshooting, best practices, decision making, architecture & design patterns, limits & quotas, security, configuration, integrations &…

    777 GitHub stars~4.9k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Entra Agent Id

    microsoft/GitHub-Copilot-for-Azure

    Official

    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)…

    255 GitHub starsUsed in 2 repos~4k tokens
    Backend & APIsAuto-check passed
  • Azure App Service Security

    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…

    175 GitHub stars~1.9k tokensUpdated 3 mo ago
    DevOps & CloudAuto-check passed
  • Azure Identity Dotnet

    microsoft/skills

    Official

    Azure Identity library for .NET. An agent skill from microsoft/skills.

    3.1k GitHub starsUsed in 5 repos~2.5k tokens
    DevOps & CloudAuto-check passed
  • Azure Postgres TS

    microsoft/skills

    Official

    Connect to Azure Database for PostgreSQL Flexible Server from Node.js/TypeScript using the pg (node-postgres) package.

    3.1k GitHub starsUsed in 5 repos~3.3k tokens
    DatabasesAuto-check passed

More from rajbos/ai-engineering-fluency

All 21 skills in this repo
  • Check Urls

    rajbos/ai-engineering-fluency

    Find all hardcoded URLs in TypeScript source files and verify they resolve (return HTTP 2xx/3xx).

    116 GitHub stars~662 tokensUpdated today
    Auto-check passed
  • Create Issue

    rajbos/ai-engineering-fluency

    Create a well-scoped GitHub issue in this repo. An agent skill from rajbos/ai-engineering-fluency.

    116 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Deduplicate Code

    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…

    116 GitHub stars~2.4k tokensUpdated today
    Auto-check passed
  • Improve Tool Families

    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…

    116 GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • Load Cache Data

    rajbos/ai-engineering-fluency

    Load and display the last 10 cache entries as raw JSON output.

    116 GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • PR Risk Review

    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.

    116 GitHub stars~2.6k tokensUpdated today
    Auto-check passed

Categories

Questions about Azure Storage Loader

What does Azure Storage Loader do?

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.

When should I use Azure Storage Loader?

Azure Storage Loader fits situations like: development work in your project.

How do I install Azure Storage Loader in Claude Code?

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.

How do I install Azure Storage Loader in Codex?

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.

Can I use Azure Storage Loader in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Azure Storage Loader need to run?

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.

Does Azure Storage Loader access the network?

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.

Is Azure Storage Loader safe to install?

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.

What licence does Azure Storage Loader use?

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.

How many tokens does Azure Storage Loader use?

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.

What are the alternatives to Azure Storage Loader?

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.

Who maintains Azure Storage Loader?

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.