skills/integrations/airtable/airtable-connect/SKILL.md
airtable, connect airtable, query [base], add to [table].
npx skillsauth add beam-ai-team/beam-next-skills airtable-connectInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Meta-skill for complete Airtable workspace integration.
Enable natural language interaction with ANY Airtable base. User says "query my Projects base" or "add a record to CRM" and it just works - no manual API calls, no remembering base IDs, no schema lookups.
This skill uses airtable-master shared library. Load references as needed:
| Resource | When to Load |
|----------|--------------|
| airtable-master/scripts/check_airtable_config.py | Always first (pre-flight) |
| airtable-master/references/setup-guide.md | If config check fails |
| airtable-master/references/error-handling.md | On any API errors |
| airtable-master/references/api-reference.md | For API details |
| airtable-master/references/field-types.md | For field type options |
Use --token NAME to switch between different Airtable workspaces/accounts:
# Default token (AIRTABLE_API_KEY)
uv run python discover_bases.py
# Named token (AIRTABLE_API_KEY_MUTAGENT)
uv run python discover_bases.py --token MUTAGENT
Setup multiple tokens in .env:
AIRTABLE_API_KEY=pat.xxx... # Default token
AIRTABLE_API_KEY_MUTAGENT=pat.yyy... # Named token for Mutagent workspace
AIRTABLE_API_KEY_CLIENT=pat.zzz... # Named token for client workspace
All scripts support --token:
discover_bases.py --token NAMEquery_records.py --token NAMEmanage_records.py --token NAMEmanage_tables.py --token NAMEmanage_fields.py --token NAMEIf user has never used Airtable integration before:
Run config check with JSON to detect setup state:
uv run python 00-system/skills/airtable/airtable-master/scripts/check_airtable_config.py --json
Parse the ai_action field in JSON output:
prompt_for_api_key → Guide user to get PAT, add to .envrun_setup_wizard → Run interactive wizardproceed_with_warning → Partial config, warn but continueproceed_with_operation → All good, continueIf setup needed, help user:
data.records:read, data.records:write, schema.bases:read.env when user provides tokenSetup triggers: "setup airtable", "connect airtable", "configure airtable"
Every workflow MUST start with config validation:
uv run python 00-system/skills/airtable/airtable-master/scripts/check_airtable_config.py --json
Parse ai_action from JSON:
proceed_with_operation: Fully configured, continueproceed_with_warning: API works but no bases (warn user to add bases to PAT)prompt_for_api_key: Need API key, guide user through setuprun_setup_wizard: Run setup wizardIf not configured:
python 00-system/skills/airtable/airtable-master/scripts/setup_airtable.pyTriggers: "connect airtable", "sync airtable", "discover bases", "what bases", "refresh airtable"
Purpose: Find all accessible bases in user's Airtable workspace and cache schemas.
Steps:
uv run python 00-system/skills/airtable/airtable-master/scripts/discover_bases.py
02-memory/integrations/airtable-bases.yamlFirst-time flow: If airtable-bases.yaml doesn't exist, discovery runs automatically.
Triggers: "query [base]", "find in [table]", "search [base]", "show [table]", "list records"
Purpose: Query any base/table by name with optional filters.
Steps:
02-memory/integrations/airtable-bases.yaml
uv run python 00-system/skills/airtable/airtable-master/scripts/query_records.py \
--base <base_id> --table <table_name> [--filter "..."] [--sort ...] [--limit N]
Filter Syntax:
--filter "Status = Active"--filter "Priority = High"--filter "{Field} contains Design"Triggers: "add to [table]", "create in [base]", "new [item] in [table]"
Purpose: Create a new record in any table with field validation.
Steps:
uv run python 00-system/skills/airtable/airtable-master/scripts/manage_records.py create \
--base <base_id> --table <table_name> \
--fields '{"Name": "...", "Status": "..."}'
Triggers: "update [record]", "edit [record]", "change [field] to [value]"
Purpose: Modify fields of an existing record.
Steps:
python query_records.py --filter "Name contains [search]"uv run python 00-system/skills/airtable/airtable-master/scripts/manage_records.py update \
--base <base_id> --table <table_name> --record <record_id> \
--fields '{"Status": "Done", "Priority": "High"}'
Triggers: "delete [record]", "remove [record]"
Purpose: Delete a record from a table.
Steps:
uv run python 00-system/skills/airtable/airtable-master/scripts/manage_records.py delete \
--base <base_id> --table <table_name> --record <record_id>
Triggers: "bulk update", "update multiple", "batch create"
Purpose: Create, update, or delete multiple records at once (max 10 per batch).
Steps:
uv run python 00-system/skills/airtable/airtable-master/scripts/manage_records.py batch-create \
--base <base_id> --table <table_name> \
--records '[{"fields": {...}}, {"fields": {...}}]'
Note: Airtable limits batch operations to 10 records per request.
Triggers: "create table", "new table in [base]", "add table to [base]"
Purpose: Create a new table in an existing Airtable base.
Steps:
uv run python 00-system/skills/airtable/airtable-master/scripts/manage_tables.py list \
--base <base_id> [--token NAME]
uv run python 00-system/skills/airtable/airtable-master/scripts/manage_tables.py create \
--base <base_id> --name "Table Name" \
--fields '[{"name": "Name", "type": "singleLineText"}, {"name": "Status", "type": "singleSelect", "options": {"choices": [{"name": "Todo"}, {"name": "Done"}]}}]' \
[--token NAME]
Field Definition Format:
[
{"name": "Name", "type": "singleLineText"},
{"name": "Status", "type": "singleSelect", "options": {"choices": [{"name": "Todo"}, {"name": "In Progress"}, {"name": "Done"}]}},
{"name": "Priority", "type": "number", "options": {"precision": 0}},
{"name": "Due Date", "type": "date"}
]
Triggers: "add field", "create field", "update field", "list fields", "show schema"
Purpose: Add, update, or list fields in a table.
uv run python 00-system/skills/airtable/airtable-master/scripts/manage_fields.py list \
--base <base_id> --table <table_id_or_name> [--token NAME]
uv run python 00-system/skills/airtable/airtable-master/scripts/manage_fields.py create \
--base <base_id> --table <table_id_or_name> \
--name "Field Name" --type singleSelect \
--choices "Option1,Option2,Option3" \
[--token NAME]
uv run python 00-system/skills/airtable/airtable-master/scripts/manage_fields.py update \
--base <base_id> --table <table_id_or_name> --field <field_id> \
--name "New Name" --description "Updated description" \
[--token NAME]
uv run python 00-system/skills/airtable/airtable-master/scripts/manage_fields.py types
Common Field Types:
| Type | Description | Options |
|------|-------------|---------|
| singleLineText | Short text | - |
| multilineText | Long text/notes | - |
| number | Numeric value | precision (0-8) |
| singleSelect | Dropdown (one) | choices |
| multipleSelects | Multi-select | choices |
| date | Date field | dateFormat |
| checkbox | Boolean toggle | - |
| url | Web link | - |
| email | Email address | - |
| currency | Money value | precision, symbol |
| percent | Percentage | precision |
| rating | Star rating | max, icon |
Location: 02-memory/integrations/airtable-bases.yaml
---
last_synced: 2025-12-11T12:00:00
bases:
- id: "appXXXXXXXXXXXXXX"
name: "Client Projects"
permission_level: "create"
tables:
- id: "tblXXXXXXXXXXXXXX"
name: "Projects"
fields:
- name: "Name"
type: "singleLineText"
- name: "Status"
type: "singleSelect"
options: ["Not Started", "In Progress", "Complete"]
- name: "Priority"
type: "singleSelect"
options: ["Low", "Medium", "High"]
- name: "Due Date"
type: "date"
- id: "appYYYYYYYYYYYYYY"
name: "CRM"
permission_level: "edit"
tables:
- id: "tblYYYYYYYYYYYYYY"
name: "Contacts"
fields: [...]
---
# Airtable Bases Context
Auto-generated by airtable-connect skill.
Run "refresh airtable" to update.
When user says a base/table name:
Disambiguation prompt (if multiple matches):
Found 3 bases matching "Projects":
1. Client Projects
2. Personal Projects
3. Project Templates
Which one? (enter number or be more specific)
| Error | Action | |-------|--------| | No bases found | Check PAT has base access at https://airtable.com/create/tokens | | Base not in context | Run discovery: "refresh airtable" | | Permission denied | Verify PAT has correct scopes | | Rate limited (429) | Wait and retry with exponential backoff | | Invalid field | Show valid options from cached schema |
Load airtable-master/references/error-handling.md for detailed troubleshooting.
First-time setup:
User: "connect to airtable"
AI: [Runs config check, detects no API key]
Airtable integration needs setup. I need your Personal Access Token (PAT).
Get one at: https://airtable.com/create/tokens
Required scopes: data.records:read, data.records:write, schema.bases:read
Paste your PAT here (starts with 'pat.'):
User: pat.xxxxx...
AI: [Writes to .env, re-runs config check]
[OK] Connected! Found 3 bases: Client Projects, CRM, Tasks
What would you like to do?
Query by name:
User: "query my Projects for active items"
AI: Querying "Client Projects" → "Projects" table...
Found 12 active items:
1. Website Redesign (High priority, due Jan 15)
2. Q1 Marketing Plan (Medium priority, due Jan 30)
...
Create record:
User: "add a new task to my Tasks base"
AI: Creating in "Tasks" base → "Tasks" table.
Required fields:
- Task Name: [your input]
- Status: Not Started / In Progress / Complete
- Due Date: [optional, format: YYYY-MM-DD]
What's the task name?
Create table with MUTAGENT token:
User: "create a Projects table in my Mutagent base"
AI: [Uses MUTAGENT token]
Creating table "Projects" in base app1gngDx52VAgjVQ...
uv run python manage_tables.py create --base app1gngDx52VAgjVQ --name "Projects" --token MUTAGENT
[OK] Table created: tbl83yYyFGvFDpv9V
Want to add fields to this table?
Add fields to new table:
User: "yes, add Status and Description fields"
AI: Adding fields to Projects table...
uv run python manage_fields.py create --base app1gngDx52VAgjVQ --table tbl83yYyFGvFDpv9V \
--name "Status" --type singleSelect --choices "Todo,In Progress,Done" --token MUTAGENT
[OK] Created: Status (singleSelect)
uv run python manage_fields.py create --base app1gngDx52VAgjVQ --table tbl83yYyFGvFDpv9V \
--name "Description" --type multilineText --token MUTAGENT
[OK] Created: Description (multilineText)
Full workflow: Create table → Add fields → Add record:
User: "create a Tasks table with Name, Status, Priority, and DueDate fields"
AI: [Creates table, adds fields, confirms schema]
User: "add a task: Review PR, High priority, due tomorrow"
AI: [Uses manage_records.py to create record with proper field mapping]
Airtable Connect v1.1 - Meta-skill for complete Airtable workspace integration with multi-token support
development
--- name: taste-skill type: skill version: '1.0' author: Leonxlnx (packaged by Zhichao Li) category: general tags: - frontend - design - anti-slop - landing-page updated: '2026-06-11' visibility: public description: Anti-slop frontend skill for landing pages, portfolios, and redesigns. The agent reads the brief, infers the right design direction, and ships interfaces that do not look templated. Real design systems when applicable, audit-first on redesigns, strict pre-flight check. license: MIT.
development
Use when communicating quantitative information in any form — Slack updates, emails, reports, decks, dashboards, landing pages, product UI, public talks. Covers two integrated layers: (1) making numbers semantically meaningful (translation, anchoring, simplification, story-pairing) and (2) showing numbers cleanly (chart vs table vs prose, chart-by-message, pre-attentive emphasis, color discipline, decluttering). Distilled and integrated from *Show Me the Numbers* (Stephen Few) and *Make Numbers Count* (Chip Heath & Karla Starr). Not for raw data analysis or statistics — this is about communication of numbers, not their derivation.
development
Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.
tools
Stateful multi-session tutor adapted for Beam — teach a stakeholder to understand, trust, and operate a specific agent, or teach a Solution Engineer a client's business process for delivery. Grounds every lesson in Knowledge Hub sources (real agent graphs, real tasks, transcripts, Linear) before any web resource. Also works for any general topic. Trigger on "teach me", "beam teach", "教我", "onboard <person> on <agent>", "help <stakeholder> understand the agent", "learn this client's process".