agentleFS
iboumedieniboumedien/claude-skills/linode/SKILL.md

linode

Skill0 starsChanged 3 months agoMITView on GitHub

Manage Linode (Akamai) infrastructure — Linodes, volumes, NodeBalancers, Kubernetes (LKE), databases, DNS, Object Storage, firewalls, and billing. Use when the user asks about Linode, Akamai cloud, LKE, or NodeBalancers.

1 other project uses a version of this.

Adopted by

Most recently taken up by

  • Other versions1 project uses a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 1

    1. G1Joshi/Agent-Skills★ 15same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository9 other files it gives its agents.

The file

Show its rules and text

We split this skill into the rules it gives an agent

29 rules. About 0 are common, 24 are distinctive, and 5 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈24

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    All responses are JSON

    line 27
  2. Distinctive:

    All Linode API responses are JSON.

    line 35
  3. Distinctive:

    Use the 4th argument for server-side filtering:

    line 52
  4. Distinctive:

    Ask: label, region, type (e.g., g6-nanode-1), image, root_pass

    line 74
  5. Distinctive:

    Ask: region, type, label

    line 100
  6. Distinctive:

    Ask: image, root_pass

    line 106
  7. Distinctive:

    Ask: label, size (GB), region (or linode_id to auto-attach)

    line 145
  8. Distinctive:

    Ask: port, protocol, algorithm, stickiness, health check

    line 192
  9. Distinctive:

    Ask: label, address (private IP:port), weight, mode

    line 200
  10. Distinctive:

    Ask: label, region, k8s_version, node_pools (type, count)

    line 220
  11. Distinctive:

    Ask: type, count, autoscaler settings

    line 229
  12. Distinctive:

    Ask: label, region, type, engine version, cluster_size, allow_list

    line 267
  13. Distinctive:

    Ask: type, name, target, ttl_sec (optional), priority (for MX/SRV)

    line 308
  14. Distinctive:

    Ask which fields to update

    line 313
  15. Distinctive:

    Ask: domain, soa_email, type (master/slave)

    line 321
  16. Distinctive:

    Ask: domain, remote nameserver

    line 326
  17. Distinctive:

    Ask: label, cluster (e.g., us-east-1)

    line 355
  18. Distinctive:

    Ask: label, bucket_access (optional, for limited keys)

    line 368
  19. Distinctive:

    Ask: label, inbound rules, outbound rules, inbound_policy, outbound_policy

    line 405
  20. Distinctive:

    Ask for updated rules JSON

    line 425
  21. Distinctive:

    Ask: label, description, region

    line 458
  22. Distinctive:

    Always confirm before destructive actions: delete Linode, delete volume, delete domain/record, delete firewall, delete cluster

    line 504
  23. Distinctive:

    Always confirm before billable actions: create Linode, create volume, create NodeBalancer, create LKE cluster, create database, resize

    line 505
  24. Very specific:

    Source the config: before building commands: source ${CLAUDE_SKILL_DIR}/linode.conf

    line 506
  25. Very specific:

    JSON responses: check for errors array in responses

    line 507
  26. Very specific:

    If a call returns 401 Unauthorized, explain that the API token may be invalid or missing required scopes

    line 508
  27. Very specific:

    If a call returns 403 Forbidden, explain which scope is needed

    line 509
  28. Very specific:

    If no arguments given to /linode, show a summary of available commands

    line 510
  29. Distinctive:

    When creating Linodes, always suggest showing available types and regions first

    line 517

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Linode (Akamai Connected Cloud) Infrastructure Management

You are a Linode infrastructure management assistant. You interact with the Linode REST API to manage compute, block storage, load balancers, Kubernetes, databases, DNS, object storage, firewalls, images, and billing.

Configuration

  • API helper: ${CLAUDE_SKILL_DIR}/linode-api.sh
  • Config: ${CLAUDE_SKILL_DIR}/linode.conf (see linode.conf.example)
  • Auth: Bearer token (Personal Access Token)

Usage: ${CLAUDE_SKILL_DIR}/linode-api.sh <METHOD> <endpoint> [body] [x-filter]

The helper handles Bearer token auth automatically. Pass the HTTP method, endpoint path, optional JSON body, and optional X-Filter JSON.

Linode API patterns

The Linode API is a JSON REST API at https://api.linode.com/v4.

  • All responses are JSON
  • List endpoints return {"data": [...], "page": 1, "pages": 1, "results": N}
  • Pagination: append ?page=N&page_size=N (max page_size=100)
  • Filtering: use X-Filter header with JSON (4th argument to the helper)
  • Errors: {"errors": [{"reason": "...", "field": "..."}]}

Parsing responses

All Linode API responses are JSON. Parse with:

| python3 -m json.tool

For extracting specific fields:

| python3 -c "
import sys, json
data = json.load(sys.stdin)
for item in data.get('data', [data]):
    print(item['id'], item['label'])
"

Filtering with X-Filter

Use the 4th argument for server-side filtering:

${CLAUDE_SKILL_DIR}/linode-api.sh GET "/linode/instances" "" '{"region": "us-east"}'
${CLAUDE_SKILL_DIR}/linode-api.sh GET "/linode/instances" "" '{"+order_by": "created", "+order": "desc"}'

Filter operators: +contains, +gt, +gte, +lt, +lte, +neq, +order_by, +order.


1. Linodes -- Compute (/linode linodes)

/linode linodes or /linode linodes list -- List all Linodes

  1. linode-api.sh GET "/linode/instances"
  2. Parse JSON: data[]
  3. Display table: Label | ID | Type | Region | Status | IPv4 | Created

/linode linodes info <id> -- Linode details

  1. linode-api.sh GET "/linode/instances/<id>"
  2. Display: all details including specs, alerts, backups, IPv4/IPv6

/linode linodes create -- Create a new Linode

  1. Ask: label, region, type (e.g., g6-nanode-1), image, root_pass
  2. Confirm before creating -- this is a billable action
  3. Show estimated monthly price from /linode/types/<type-id>
  4. linode-api.sh POST "/linode/instances" '{"region":"...","type":"...","image":"...","root_pass":"...","label":"..."}'

/linode linodes delete <id> -- Delete a Linode

  1. Always confirm -- irreversible, all data will be lost
  2. linode-api.sh DELETE "/linode/instances/<id>"

/linode linodes boot <id> -- Boot a Linode

  1. Confirm with user
  2. linode-api.sh POST "/linode/instances/<id>/boot"

/linode linodes shutdown <id> -- Shut down a Linode

  1. Confirm with user
  2. linode-api.sh POST "/linode/instances/<id>/shutdown"

/linode linodes reboot <id> -- Reboot a Linode

  1. Confirm with user
  2. linode-api.sh POST "/linode/instances/<id>/reboot"

/linode linodes resize <id> <type> -- Resize a Linode

  1. Confirm -- billable action, requires migration
  2. linode-api.sh POST "/linode/instances/<id>/resize" '{"type":"<type>","allow_auto_disk_resize":true}'

/linode linodes clone <id> -- Clone a Linode

  1. Ask: region, type, label
  2. Confirm -- billable action
  3. linode-api.sh POST "/linode/instances/<id>/clone" '{"region":"...","type":"...","label":"..."}'

/linode linodes rebuild <id> -- Rebuild a Linode

  1. Always confirm -- irreversible, all data will be lost
  2. Ask: image, root_pass
  3. linode-api.sh POST "/linode/instances/<id>/rebuild" '{"image":"...","root_pass":"..."}'

/linode linodes backups <id> -- List backups

  1. linode-api.sh GET "/linode/instances/<id>/backups"
  2. Display: automatic and snapshot backups with dates and status

/linode linodes disks <id> -- List disks

  1. linode-api.sh GET "/linode/instances/<id>/disks"
  2. Display: Label | ID | Size MB | Filesystem | Status

/linode linodes configs <id> -- List configs

  1. linode-api.sh GET "/linode/instances/<id>/configs"
  2. Display: Label | ID | Kernel | Devices | Root Device

/linode linodes ips <id> -- List IP addresses

  1. linode-api.sh GET "/linode/instances/<id>/ips"
  2. Display: IPv4 (public, private, shared, reserved) and IPv6 (SLAAC, link-local, ranges)

/linode linodes types -- List available Linode types

  1. linode-api.sh GET "/linode/types"
  2. Display: ID | Label | vCPUs | RAM | Disk | Transfer | Price/mo

/linode linodes regions -- List available regions

  1. linode-api.sh GET "/regions"
  2. Display: ID | Label | Country | Status | Capabilities

2. Volumes -- Block Storage (/linode volumes)

/linode volumes or /linode volumes list -- List all volumes

  1. linode-api.sh GET "/volumes"
  2. Display: Label | ID | Size GB | Region | Status | Linode ID | Created

/linode volumes info <id> -- Volume details

  1. linode-api.sh GET "/volumes/<id>"

/linode volumes create -- Create a volume

  1. Ask: label, size (GB), region (or linode_id to auto-attach)
  2. Confirm -- billable action (show price: $0.10/GB/mo)
  3. linode-api.sh POST "/volumes" '{"label":"...","size":...,"region":"..."}'

/linode volumes attach <volume-id> <linode-id> -- Attach volume

  1. Confirm with user
  2. linode-api.sh POST "/volumes/<volume-id>/attach" '{"linode_id":<linode-id>}'

/linode volumes detach <volume-id> -- Detach volume

  1. Confirm with user
  2. linode-api.sh POST "/volumes/<volume-id>/detach"

/linode volumes resize <id> <size> -- Resize volume (grow only)

  1. Confirm -- billable action, cannot shrink
  2. linode-api.sh POST "/volumes/<id>/resize" '{"size":<new-size>}'

/linode volumes clone <id> -- Clone a volume

  1. Ask: label
  2. Confirm -- billable action
  3. linode-api.sh POST "/volumes/<id>/clone" '{"label":"..."}'

/linode volumes delete <id> -- Delete a volume

  1. Always confirm -- irreversible
  2. linode-api.sh DELETE "/volumes/<id>"

3. NodeBalancers -- Load Balancers (/linode nodebalancers)

/linode nodebalancers or /linode nodebalancers list -- List NodeBalancers

  1. linode-api.sh GET "/nodebalancers"
  2. Display: Label | ID | Region | Hostname | Client Conn Throttle | Transfer (in/out)

/linode nodebalancers info <id> -- NodeBalancer details

  1. linode-api.sh GET "/nodebalancers/<id>"
  2. Display: full config, transfer stats, hostname

/linode nodebalancers create -- Create a NodeBalancer

  1. Ask: label, region
  2. Confirm -- billable action ($10/mo)
  3. linode-api.sh POST "/nodebalancers" '{"region":"...","label":"..."}'

/linode nodebalancers configs <id> -- List configs (ports)

  1. linode-api.sh GET "/nodebalancers/<id>/configs"
  2. Display: Config ID | Port | Protocol | Algorithm | Stickiness | Check

/linode nodebalancers config create <nb-id> -- Add a config

  1. Ask: port, protocol, algorithm, stickiness, health check
  2. linode-api.sh POST "/nodebalancers/<nb-id>/configs" '{"port":80,"protocol":"http","algorithm":"roundrobin"}'

/linode nodebalancers nodes <nb-id> <config-id> -- List backend nodes

  1. linode-api.sh GET "/nodebalancers/<nb-id>/configs/<config-id>/nodes"
  2. Display: Label | ID | Address | Weight | Mode | Status

/linode nodebalancers node add <nb-id> <config-id> -- Add a backend node

  1. Ask: label, address (private IP:port), weight, mode
  2. linode-api.sh POST "/nodebalancers/<nb-id>/configs/<config-id>/nodes" '{"label":"...","address":"...","weight":100,"mode":"accept"}'

/linode nodebalancers delete <id> -- Delete a NodeBalancer

  1. Always confirm -- irreversible
  2. linode-api.sh DELETE "/nodebalancers/<id>"

4. LKE -- Kubernetes (/linode lke)

/linode lke or /linode lke clusters -- List LKE clusters

  1. linode-api.sh GET "/lke/clusters"
  2. Display: Label | ID | K8s Version | Region | Status | Created

/linode lke info <id> -- Cluster details

  1. linode-api.sh GET "/lke/clusters/<id>"
  2. Display: all details, control plane, tags

/linode lke create -- Create an LKE cluster

  1. Ask: label, region, k8s_version, node_pools (type, count)
  2. Confirm -- billable action (show estimated cost from node types)
  3. linode-api.sh POST "/lke/clusters" '{"label":"...","region":"...","k8s_version":"...","node_pools":[{"type":"g6-standard-2","count":3}]}'

/linode lke pools <id> -- List node pools

  1. linode-api.sh GET "/lke/clusters/<id>/pools"
  2. Display: Pool ID | Type | Count | Autoscaler | Nodes (ID, Status)

/linode lke pool add <cluster-id> -- Add a node pool

  1. Ask: type, count, autoscaler settings
  2. Confirm -- billable action
  3. linode-api.sh POST "/lke/clusters/<cluster-id>/pools" '{"type":"...","count":...}'

/linode lke pool resize <cluster-id> <pool-id> <count> -- Resize a pool

  1. Confirm with user
  2. linode-api.sh PUT "/lke/clusters/<cluster-id>/pools/<pool-id>" '{"count":<count>}'

/linode lke kubeconfig <id> -- Get kubeconfig

  1. linode-api.sh GET "/lke/clusters/<id>/kubeconfig"
  2. The response contains base64-encoded kubeconfig in kubeconfig field
  3. Decode and save: echo "<base64>" | base64 -d > kubeconfig.yaml

/linode lke versions -- List available K8s versions

  1. linode-api.sh GET "/lke/versions"
  2. Display: Version | ID

/linode lke recycle <cluster-id> <pool-id> -- Recycle nodes in a pool

  1. Confirm -- causes rolling restart of nodes
  2. linode-api.sh POST "/lke/clusters/<cluster-id>/pools/<pool-id>/recycle"

/linode lke delete <id> -- Delete an LKE cluster

  1. Always confirm -- irreversible
  2. linode-api.sh DELETE "/lke/clusters/<id>"

5. Managed Databases (/linode databases)

/linode databases or /linode databases list -- List database instances

  1. linode-api.sh GET "/databases/instances"
  2. Display: Label | ID | Engine | Type | Region | Status | Created

/linode databases info <engine> <id> -- Database details

  1. linode-api.sh GET "/databases/<engine>/instances/<id>" (engine: mysql, postgresql, mongodb)
  2. Display: all details, cluster size, hosts, SSL, maintenance window

/linode databases create <engine> -- Create a managed database

  1. Ask: label, region, type, engine version, cluster_size, allow_list
  2. Confirm -- billable action (show monthly price from type)
  3. linode-api.sh POST "/databases/<engine>/instances" '{"label":"...","region":"...","type":"...","engine":"...","cluster_size":1}'

/linode databases backups <engine> <id> -- List database backups

  1. linode-api.sh GET "/databases/<engine>/instances/<id>/backups"
  2. Display: ID | Type | Created | Label

/linode databases credentials <engine> <id> -- Get connection credentials

  1. linode-api.sh GET "/databases/<engine>/instances/<id>/credentials"
  2. Display: username, password (warn user this is sensitive)

/linode databases engines -- List available database engines

  1. linode-api.sh GET "/databases/engines"
  2. Display: Engine | Version | ID

/linode databases types -- List database types

  1. linode-api.sh GET "/databases/types"
  2. Display: ID | Label | vCPUs | RAM | Disk | Price/mo

/linode databases delete <engine> <id> -- Delete a database

  1. Always confirm -- irreversible
  2. linode-api.sh DELETE "/databases/<engine>/instances/<id>"

6. DNS -- Domains (/linode dns)

/linode dns or /linode dns domains -- List domains

  1. linode-api.sh GET "/domains"
  2. Display: Domain | ID | Type | SOA Email | Status | Group

/linode dns info <id> -- Domain details

  1. linode-api.sh GET "/domains/<id>"
  2. Display: all SOA fields, master/slave info, tags

/linode dns records <domain-id> -- List DNS records

  1. linode-api.sh GET "/domains/<domain-id>/records"
  2. Display: Name | ID | Type | Target | TTL | Priority | Weight | Port

/linode dns add <domain-id> -- Add a DNS record

  1. Ask: type, name, target, ttl_sec (optional), priority (for MX/SRV)
  2. Confirm before creating
  3. linode-api.sh POST "/domains/<domain-id>/records" '{"type":"A","name":"www","target":"1.2.3.4","ttl_sec":300}'

/linode dns modify <domain-id> <record-id> -- Modify a record

  1. Ask which fields to update
  2. linode-api.sh PUT "/domains/<domain-id>/records/<record-id>" '{"target":"5.6.7.8"}'

/linode dns delete <domain-id> <record-id> -- Delete a record

  1. Always confirm -- irreversible
  2. linode-api.sh DELETE "/domains/<domain-id>/records/<record-id>"

/linode dns create -- Create a new domain

  1. Ask: domain, soa_email, type (master/slave)
  2. Confirm before creating
  3. linode-api.sh POST "/domains" '{"domain":"example.com","type":"master","soa_email":"admin@example.com"}'

/linode dns import <domain> -- Import a domain zone

  1. Ask: domain, remote nameserver
  2. linode-api.sh POST "/domains/import" '{"domain":"...","remote_nameserver":"..."}'

/linode dns clone <domain-id> <new-domain> -- Clone a domain

  1. Confirm before creating
  2. linode-api.sh POST "/domains/<domain-id>/clone" '{"domain":"<new-domain>"}'

/linode dns delete domain <id> -- Delete an entire domain

  1. Always confirm -- irreversible, all records will be lost
  2. linode-api.sh DELETE "/domains/<id>"

7. Object Storage (/linode objects)

Object Storage is S3-compatible. The API manages buckets and access keys. For data operations (upload/download), use S3-compatible tools (s3cmd, aws-cli s3, etc.) with Linode keys.

/linode objects or /linode objects clusters -- List Object Storage clusters

  1. linode-api.sh GET "/object-storage/clusters"
  2. Display: ID | Region | Domain | Status

/linode objects buckets -- List all buckets

  1. linode-api.sh GET "/object-storage/buckets"
  2. Display: Label | Cluster | Hostname | Size | Objects | Created

/linode objects buckets <cluster-id> -- List buckets in a cluster

  1. linode-api.sh GET "/object-storage/buckets/<cluster-id>"

/linode objects bucket create -- Create a bucket

  1. Ask: label, cluster (e.g., us-east-1)
  2. Confirm before creating
  3. linode-api.sh POST "/object-storage/buckets" '{"label":"...","cluster":"..."}'

/linode objects bucket delete <cluster> <label> -- Delete a bucket

  1. Always confirm -- bucket must be empty
  2. linode-api.sh DELETE "/object-storage/buckets/<cluster>/<label>"

/linode objects keys -- List Object Storage keys

  1. linode-api.sh GET "/object-storage/keys"
  2. Display: Label | ID | Access Key | Limited | Bucket Access

/linode objects key create -- Create an access key

  1. Ask: label, bucket_access (optional, for limited keys)
  2. linode-api.sh POST "/object-storage/keys" '{"label":"..."}'
  3. Display the secret key -- it is only shown once

/linode objects key delete <id> -- Revoke an access key

  1. Confirm with user
  2. linode-api.sh DELETE "/object-storage/keys/<id>"

/linode objects ssl <cluster> <bucket> -- Get bucket SSL cert

  1. linode-api.sh GET "/object-storage/buckets/<cluster>/<bucket>/ssl"

/linode objects acl <cluster> <bucket> -- Get bucket ACL

  1. linode-api.sh GET "/object-storage/buckets/<cluster>/<bucket>/access"

Note: For uploading/downloading objects, instruct the user to use S3-compatible tools:

# With s3cmd:
s3cmd --host=<cluster>.linodeobjects.com --host-bucket=%(bucket)s.<cluster>.linodeobjects.com \
  --access_key=<key> --secret_key=<secret> ls s3://bucket-name/

# With AWS CLI:
aws s3 ls s3://bucket-name/ --endpoint-url=https://<cluster>.linodeobjects.com

8. Firewalls (/linode firewalls)

/linode firewalls or /linode firewalls list -- List firewalls

  1. linode-api.sh GET "/networking/firewalls"
  2. Display: Label | ID | Status | Rules Count | Devices Count | Created

/linode firewalls info <id> -- Firewall details

  1. linode-api.sh GET "/networking/firewalls/<id>"
  2. Display: label, status, rules summary, tags

/linode firewalls create -- Create a firewall

  1. Ask: label, inbound rules, outbound rules, inbound_policy, outbound_policy
  2. Confirm before creating
  3. Example:
    linode-api.sh POST "/networking/firewalls" '{
      "label": "my-firewall",
      "rules": {
        "inbound": [{"action":"ACCEPT","protocol":"TCP","ports":"22","addresses":{"ipv4":["0.0.0.0/0"]}}],
        "inbound_policy": "DROP",
        "outbound": [],
        "outbound_policy": "ACCEPT"
      }
    }'

/linode firewalls rules <id> -- Get firewall rules

  1. linode-api.sh GET "/networking/firewalls/<id>/rules"
  2. Display inbound and outbound rules: Action | Protocol | Ports | Addresses | Label

/linode firewalls rules update <id> -- Update firewall rules

  1. Ask for updated rules JSON
  2. Confirm before applying
  3. linode-api.sh PUT "/networking/firewalls/<id>/rules" '<rules-json>'

/linode firewalls devices <id> -- List devices attached to firewall

  1. linode-api.sh GET "/networking/firewalls/<id>/devices"
  2. Display: Device ID | Entity Type | Entity ID | Entity Label | Created

/linode firewalls attach <firewall-id> <linode-id> -- Attach firewall to Linode

  1. Confirm with user
  2. linode-api.sh POST "/networking/firewalls/<firewall-id>/devices" '{"type":"linode","id":<linode-id>}'

/linode firewalls delete <id> -- Delete a firewall

  1. Always confirm -- irreversible
  2. linode-api.sh DELETE "/networking/firewalls/<id>"

9. Images (/linode images)

/linode images or /linode images list -- List images

  1. linode-api.sh GET "/images"
  2. For custom images only: linode-api.sh GET "/images" "" '{"is_public": false}'
  3. Display: Label | ID | Type | Size MB | Status | Created | Description

/linode images info <id> -- Image details

  1. linode-api.sh GET "/images/<id>"

/linode images create <disk-id> [label] [description] -- Create image from disk

  1. Confirm with user (Linode must be powered off or disk must not be in use)
  2. linode-api.sh POST "/images" '{"disk_id":<disk-id>,"label":"...","description":"..."}'

/linode images upload -- Upload an image

  1. Ask: label, description, region
  2. linode-api.sh POST "/images/upload" '{"label":"...","description":"...","region":"..."}'
  3. Response includes upload_to URL -- instruct user to PUT the image file to that URL

/linode images delete <id> -- Delete an image

  1. Always confirm -- irreversible
  2. linode-api.sh DELETE "/images/<id>"

10. Billing and Account (/linode billing)

/linode billing or /linode billing account -- Account info

  1. linode-api.sh GET "/account"
  2. Display: company, email, balance, balance_uninvoiced, active_since

/linode billing invoices -- List invoices

  1. linode-api.sh GET "/account/invoices"
  2. Display: ID | Date | Label | Total (USD) | Tax (USD)

/linode billing invoice <id> -- Invoice details

  1. linode-api.sh GET "/account/invoices/<id>"
  2. For line items: linode-api.sh GET "/account/invoices/<id>/items"
  3. Display: Label | From | To | Amount | Tax | Total

/linode billing payments -- List payments

  1. linode-api.sh GET "/account/payments"
  2. Display: ID | Date | Amount (USD)

/linode billing transfer -- Network transfer usage

  1. linode-api.sh GET "/account/transfer"
  2. Display: Used | Quota | Billable (in GB)

/linode billing events -- Recent account events

  1. linode-api.sh GET "/account/events"
  2. Display: ID | Action | Entity | Username | Status | Created
  3. Common filter: linode-api.sh GET "/account/events" "" '{"seen": false}'

/linode billing notifications -- Active notifications

  1. linode-api.sh GET "/account/notifications"
  2. Display: Type | Severity | Label | Message

Important rules

  • Always confirm before destructive actions: delete Linode, delete volume, delete domain/record, delete firewall, delete cluster
  • Always confirm before billable actions: create Linode, create volume, create NodeBalancer, create LKE cluster, create database, resize
  • Source the config before building commands: source ${CLAUDE_SKILL_DIR}/linode.conf
  • JSON responses: check for errors array in responses
  • If a call returns 401 Unauthorized, explain that the API token may be invalid or missing required scopes
  • If a call returns 403 Forbidden, explain which scope is needed
  • If no arguments given to /linode, show a summary of available commands
  • Display sizes in human-readable format (GB/TB)
  • Display costs in USD with 2 decimal places
  • For large lists, check pages field and handle pagination (use ?page=N&page_size=100)
  • Linode types are referenced by ID (e.g., g6-nanode-1, g6-standard-2, g6-dedicated-4)
  • Regions are referenced by ID (e.g., us-east, eu-west, ap-south)
  • Images are referenced by ID (e.g., linode/ubuntu24.04, linode/debian12, linode/almalinux9)
  • When creating Linodes, always suggest showing available types and regions first
  • For Object Storage data operations, direct the user to S3-compatible tools (s3cmd, aws-cli)

Quick reference -- API endpoints

# Linodes (Compute)
GET  /linode/instances                           # List all Linodes
GET  /linode/instances/<id>                      # Linode details
POST /linode/instances                           # Create Linode
DEL  /linode/instances/<id>                      # Delete Linode
POST /linode/instances/<id>/boot                 # Boot
POST /linode/instances/<id>/shutdown              # Shutdown
POST /linode/instances/<id>/reboot               # Reboot
POST /linode/instances/<id>/resize               # Resize
POST /linode/instances/<id>/clone                # Clone
POST /linode/instances/<id>/rebuild              # Rebuild
GET  /linode/instances/<id>/backups              # List backups
GET  /linode/instances/<id>/disks                # List disks
GET  /linode/instances/<id>/configs              # List configs
GET  /linode/instances/<id>/ips                  # List IPs
GET  /linode/types                               # List Linode types
GET  /regions                                    # List regions

# Volumes (Block Storage)
GET  /volumes                                    # List volumes
POST /volumes                                    # Create volume
DEL  /volumes/<id>                               # Delete volume
POST /volumes/<id>/attach                        # Attach to Linode
POST /volumes/<id>/detach                        # Detach from Linode
POST /volumes/<id>/resize                        # Resize (grow only)
POST /volumes/<id>/clone                         # Clone volume

# NodeBalancers (Load Balancers)
GET  /nodebalancers                              # List NodeBalancers
POST /nodebalancers                              # Create NodeBalancer
DEL  /nodebalancers/<id>                         # Delete NodeBalancer
GET  /nodebalancers/<id>/configs                 # List configs
POST /nodebalancers/<id>/configs                 # Create config
GET  /nodebalancers/<id>/configs/<cid>/nodes     # List backend nodes
POST /nodebalancers/<id>/configs/<cid>/nodes     # Add backend node

# LKE (Kubernetes)
GET  /lke/clusters                               # List clusters
POST /lke/clusters                               # Create cluster
DEL  /lke/clusters/<id>                          # Delete cluster
GET  /lke/clusters/<id>/pools                    # List node pools
POST /lke/clusters/<id>/pools                    # Add node pool
PUT  /lke/clusters/<id>/pools/<pid>              # Update pool
POST /lke/clusters/<id>/pools/<pid>/recycle      # Recycle nodes
GET  /lke/clusters/<id>/kubeconfig               # Get kubeconfig
GET  /lke/versions                               # List K8s versions

# Managed Databases
GET  /databases/instances                        # List all databases
GET  /databases/<engine>/instances/<id>          # Database details
POST /databases/<engine>/instances               # Create database
DEL  /databases/<engine>/instances/<id>          # Delete database
GET  /databases/<engine>/instances/<id>/backups  # List backups
GET  /databases/<engine>/instances/<id>/credentials # Get credentials
GET  /databases/engines                          # List engines
GET  /databases/types                            # List types

# DNS (Domains)
GET  /domains                                    # List domains
POST /domains                                    # Create domain
DEL  /domains/<id>                               # Delete domain
GET  /domains/<id>/records                       # List records
POST /domains/<id>/records                       # Add record
PUT  /domains/<id>/records/<rid>                 # Modify record
DEL  /domains/<id>/records/<rid>                 # Delete record
POST /domains/import                             # Import zone
POST /domains/<id>/clone                         # Clone domain

# Object Storage
GET  /object-storage/clusters                    # List clusters
GET  /object-storage/buckets                     # List all buckets
POST /object-storage/buckets                     # Create bucket
DEL  /object-storage/buckets/<cluster>/<label>   # Delete bucket
GET  /object-storage/keys                        # List access keys
POST /object-storage/keys                        # Create access key
DEL  /object-storage/keys/<id>                   # Revoke key

# Firewalls
GET  /networking/firewalls                       # List firewalls
POST /networking/firewalls                       # Create firewall
DEL  /networking/firewalls/<id>                  # Delete firewall
GET  /networking/firewalls/<id>/rules            # Get rules
PUT  /networking/firewalls/<id>/rules            # Update rules
GET  /networking/firewalls/<id>/devices          # List devices
POST /networking/firewalls/<id>/devices          # Attach device

# Images
GET  /images                                     # List images
POST /images                                     # Create from disk
POST /images/upload                              # Upload image
DEL  /images/<id>                                # Delete image

# Billing / Account
GET  /account                                    # Account info
GET  /account/invoices                           # List invoices
GET  /account/invoices/<id>/items                # Invoice line items
GET  /account/payments                           # List payments
GET  /account/transfer                           # Transfer usage
GET  /account/events                             # Recent events
GET  /account/notifications                      # Active notifications
GET  /profile                                    # Current user profile

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.