Ops Table Manager
Available Context
@_platform-references/org-variables.md
Ops Table Manager
Goal
Manage the lifecycle and structure of Ops tables -- the flexible, spreadsheet-like data stores that power prospecting workflows. This skill handles creating tables, listing existing tables, viewing table details and columns, adding columns, and deleting tables.
Ops tables are the foundation of the prospecting system. Every enrichment, AI query, and data import flows through them. Getting the structure right upfront saves reps from painful restructuring later.
Required Capabilities
- Ops Tables: CRUD access to ops tables and column management
Inputs
table_id: ID of an existing table (for view, modify, or delete operations)table_name: Name for a new table (for create operations)column_name: Name for a new column (for add column operations)column_type: Type of column -- one of:text,number,url,email,date,select,ai_generatedescription: Optional description for a new tablecolumns: Optional array of initial columns when creating a table (each withnameandtype)
Instructions
Listing Tables
When the user wants to see their tables:
- Call
execute_action("list_ops_tables", { limit: 50 }) - Present the results as a scannable list showing:
- Table name
- Row count
- Source type (manual, import, apollo, hubspot, etc.)
- If no tables exist, suggest creating one: "You don't have any ops tables yet. Want me to create one?"
Viewing Table Details
When the user asks about a specific table:
- Identify the table -- if the user gives a name, first call
list_ops_tablesto find the matching ID - Call
execute_action("get_ops_table", { table_id: "<id>" }) - Present:
- Table name and description
- Column list with types
- Row count
- Enrichment stats (if any columns have been enriched)
Creating a Table
When the user wants a new table:
- Confirm the table name. If not provided, ask: "What would you like to name the table?"
- Ask about initial columns if not specified. Suggest sensible defaults based on context:
- For a leads table: Name, Company, Title, Email, LinkedIn URL, Phone
- For a companies table: Company Name, Domain, Industry, Size, Location
- Call
execute_action("create_ops_table", { name: "<name>", description: "<desc>", columns: [...] }) - Confirm creation with the table name and column count
Adding a Column
When the user wants to add a column:
- Identify the target table (by name or ID)
- Determine column name and type. If type is not specified, infer from the name:
- "email" ->
email - "website", "url", "linkedin" ->
url - "revenue", "count", "size", "score" ->
number - "date", "founded", "created" ->
date - Otherwise ->
text
- "email" ->
- Call
execute_action("add_ops_column", { table_id: "<id>", name: "<name>", column_type: "<type>" }) - For
ai_generatetype columns, ask for the generation prompt: "What should the AI generate for this column?" - Confirm the column was added
Deleting a Table
When the user wants to delete a table:
- Always confirm before deleting. Show the table name and row count: "This will permanently delete '[Table Name]' with X rows. Are you sure?"
- Only proceed after explicit confirmation
- Call
execute_action("delete_ops_table", { table_id: "<id>", confirm: true }) - Confirm deletion
Available Actions
| Action | Parameters | Returns |
|---|---|---|
list_ops_tables |
{ limit?: number } |
Array of tables with id, name, row_count, source_type |
get_ops_table |
{ table_id: string } |
Table with columns array and enrichment stats |
create_ops_table |
{ name: string, description?: string, columns?: Array<{name, type}> } |
New table object |
delete_ops_table |
{ table_id: string, confirm: true } |
Deletion confirmation |
add_ops_column |
{ table_id: string, name: string, column_type: string, config?: object } |
New column object |
Output Format
List Tables Response
YOUR OPS TABLES (X tables)
Lead Prospects 142 rows Source: apollo
Target Companies 38 rows Source: manual
HubSpot Import 95 rows Source: hubspot
Table Details Response
TABLE: Lead Prospects (142 rows)
Source: apollo | Created: Jan 15, 2026
COLUMNS (8)
Name text
Company text
Title text
Email email
LinkedIn url
Phone text
Score number
Notes ai_generate (enriched: 89%)
Create Confirmation
Table "[Name]" created with X columns.
Ready to add data -- you can import from Apollo, HubSpot, or add rows manually.
Error Handling
Table not found
If a table name doesn't match any existing table, list available tables and ask: "I couldn't find a table called '[name]'. Here are your tables -- which one did you mean?"
Duplicate table name
If the user tries to create a table with a name that already exists, inform them and suggest alternatives: "A table called '[name]' already exists. Want me to use a different name, or did you mean to open the existing one?"
Delete confirmation not given
If the user says "delete table" but does not explicitly confirm after the warning, do NOT proceed. Respond: "No problem, the table is safe. Let me know if you change your mind."
Invalid column type
If an unrecognized column type is requested, suggest the closest valid type and confirm before proceeding.
Guidelines
- Always use table IDs (not names) when calling actions -- names are for display only
- When creating tables for prospecting, suggest the standard lead columns (Name, Company, Title, Email, LinkedIn)
- Column names should be human-readable (use "Company Name" not "company_name")
- Suggest
ai_generatecolumn type when the user wants AI-derived data (e.g., "company summary", "personalized intro") - Never delete a table without explicit user confirmation