Data Management with XDB CLI

VerifiedSafe

Use XDB CLI to store, query, and manage structured data with a URI-based addressing system. It supports flexible, strict, or dynamic schemas and namespace organization for different projects, users, or agents. This is useful for persisting data from web scraping, issue tracking, metrics, logs, or conversation memory.

Sby Skills Guide Bot
Data & AIIntermediate
706/2/2026
Claude Code
#xdb#data-management#cli#schema#storage

Recommended for

Our review

This skill enables storage and retrieval of structured data using a CLI tool with flexible schema definitions and namespace-based organization.

Strengths

  • Supports flexible, strict, and dynamic schema modes.
  • Uses URI-like addressing for data access.
  • Provides namespace strategy for multi-project or multi-user separation.
  • Allows nested fields and various data types.

Limitations

  • Requires installation and setup of the XDB CLI tool.
  • Not a full database; may lack advanced querying capabilities.
  • Learning curve for URI format and schema modes.
When to use it

Use when you need a simple, schema-aware CLI tool to persist and organize structured data across projects or agents.

When not to use it

Avoid when you need complex relational queries, transactions, or when data volume exceeds CLI tool capacity.

Security analysis

Safe
Quality score90/100

The skill provides instructions for using the XDB CLI tool to manage structured data. It does not contain any commands that could be destructive or exfiltrating. The use of Bash and Write is limited to legitimate data management tasks.

No concerns found

Examples

Store scraped page data
Use xdb to store the scraped page title and URL in namespace agent.scraper, schema pages, with a randomized id. Use flexible mode.
Create issue tracking schema
Define a strict schema called 'issues' under namespace project.myapp with fields: title (STRING), status (STRING), priority (INTEGER), assignee (STRING). Then create the schema using xdb make-schema.
Track conversation memory
I need to store conversation history for an agent. Use xdb with dynamic mode under namespace agent.memory, schema conversations. Store each user message with a unique id, timestamp, content, and role.

name: using-xdb description: Use XDB CLI to store and manage structured data. Use when you need to persist data, create schemas for tracking information (issues, scraped data, metrics, logs), or organize data by namespace for different projects/users/contexts. allowed-tools: Bash(xdb:*), Write

Using XDB CLI for Data Management

Run xdb --help for command syntax and flags.

URI Format

xdb://NAMESPACE/SCHEMA/ID#ATTRIBUTE

| Component | Required | Example | | --------- | ------------ | --------------------------------------------- | | Namespace | Yes | agent.scraper, user.john, project.myapp | | Schema | For data ops | articles, issues, tasks | | ID | For records | article-123, issue-1 | | Attribute | Optional | #title, #status, #author.name |

Namespace Strategy

| Pattern | Use Case | Example | | ---------------- | ------------------- | ----------------------------------- | | agent.<name> | Agent-specific data | agent.scraper, agent.researcher | | user.<id> | Per-user data | user.john, user.admin | | project.<name> | Project data | project.webapp, project.api | | team.<name> | Team shared data | team.engineering, team.support | | org.<name> | Organization data | org.acme, org.internal |

Schema Definition Format

Modes:

| Mode | Behavior | | ---------- | ------------------------------------------------------- | | flexible | Accepts any attributes (default, no schema file needed) | | strict | Only allows attributes defined in schema | | dynamic | Auto-infers and adds new fields from data |

Flexible schema:

xdb make-schema xdb://agent.scraper/articles

Strict or dynamic schema with JSON definition:

{
  "name": "Article",
  "mode": "strict",
  "fields": [
    { "name": "title", "type": "STRING" },
    { "name": "tags", "type": "ARRAY", "array_of": "STRING" },
    {
      "name": "metadata",
      "type": "MAP",
      "map_key": "STRING",
      "map_value": "STRING"
    },
    { "name": "author.name", "type": "STRING" },
    { "name": "author.email", "type": "STRING" }
  ]
}

Types: STRING, INTEGER, UNSIGNED, FLOAT, BOOLEAN, TIME, BYTES, ARRAY, MAP

Nested fields: Use dot notation (author.name, stats.views)

Nanoid Helper

Generate unique IDs:

nanoid() { openssl rand -base64 12 | tr -dc 'a-zA-Z0-9' | head -c 21; }

Example Use Cases

| Use Case | Mode | Namespace | Schema | | ------------------- | ---------- | ------------------ | --------------- | | Web scraping | flexible | agent.scraper | pages | | Issue tracking | strict | project.<name> | issues | | Research notes | dynamic | agent.researcher | notes | | API cache | flexible | agent.api | cache | | Conversation memory | dynamic | agent.memory | conversations | | Bookmarks | flexible | user.<id> | bookmarks | | Code snippets | strict | team.<name> | snippets | | Meeting notes | dynamic | org.<name> | meetings | | Error logs | dynamic | project.<name> | errors | | Feature flags | strict | project.<name> | flags |

Workflow Examples

Related skills