Files
inkreach-teable-cli/skills/inkreach-teable/guides/cli-reference.md
T
yeuimu 8dacbf7f2d fix(cli): 轨迹分析驱动的 8 处命令修复 + 技能文档同步 (0.1.5)
- table get/update: 改用真实路由 /api/base/:baseId/table/:tableId(/name)
- view get/update/delete: table 域路由;view update 实现文档承诺的
  --filter/--sort/--group/--column-meta(sort 自动包装 sortObjs)
- record create --fields 自动包装 {records:[{fields}]}
- record delete 单条走单删端点(修复单值 query 解析成 string 的 400),
  支持位置参数;record list 加为 record get 别名
- record get-one / record get --record-id 走 table 域路由
- 移除 sql 命令:后端无 SQL 查询 API(404),技能文档 5 处同步改写
- plugin 技能 dev-workflow 内联 known-good webpack.config
  (禁止 output.library.type=iife,评估轨迹中 with_skill 组也反复踩坑)
2026-09-29 06:45:37 +00:00

9.9 KiB

CLI Reference

Complete command reference for inkreach-teable. Global options apply to all commands.

Global Options

Option Description
--endpoint <url> Backend URL, e.g. https://table.inkreach.cc
--token <pat> Personal Access Token
--base-id <id> Default base id
--json Output raw JSON (for agent parsing)
--debug Print HTTP requests/responses to stderr
-v, --version Show version

Config precedence: global flag > env (INKREACH_TEABLE_ENDPOINT/INKREACH_TEABLE_TOKEN/INKREACH_TEABLE_BASE_ID) > ~/.inkreach-teable/config.json.

auth

inkreach-teable auth status                              # verify token + show user
inkreach-teable auth login --endpoint <url> --token <PAT> [--base-id <id>]
inkreach-teable auth token list
inkreach-teable auth token create --name <n> [--scopes <csv>] [--base-ids <csv>] [--full-access] [--expires <date>]
inkreach-teable auth token delete <id>
  • auth token create returns the full token only once. Default scopes: automation|read,automation|create,automation|update,automation|delete,table|read,record|read,record|create,record|update.

base / table / field / record / view

These resources use the official-teable-compatible API. Full guide: tables-fields.md.

# base
inkreach-teable base list
inkreach-teable base get <baseId>

# table
inkreach-teable table list [--base-id <id>]
inkreach-teable table get <tableId>
inkreach-teable table create --name <n> [--base-id <id>] [--fields '<json>']
inkreach-teable table update <tableId> --name <n>
inkreach-teable table delete <tableId>

# field  (get/update/visible-choices take <tableId> <fieldIdOrName> — id or display name, auto-resolved)
inkreach-teable field list <tableId> [--with-options]
#   --with-options: OPTIONS summary column + per-choice visibility conditions for select fields
inkreach-teable field get <tableId> <fieldIdOrName>
#   human mode renders select choices with their visibilityFilter conditions; --json for raw
inkreach-teable field create --table-id <tid> --name <n> [--type <t|alias>] [--options '<json>'] \
  [--description <d>] [--lookup-options '<json>'] [--is-lookup]
#   --type optional: inferred from --options shape / --name when omitted
inkreach-teable field update <tableId> <fieldIdOrName> [--name <n>] [--options '<json>']   # --options goes via convert API
inkreach-teable field visible-choices <tableId> <recordId> <fieldIdOrName>                 # evaluate select-choice visibilityFilter
inkreach-teable field delete <tableId> <fieldId>

# record
inkreach-teable record get --table-id <tid> [--filter '<json>'] [--projection '<json>'] [--page-size <n>] [--page <n>] [--search <kw>] [--record-id <rid>]
inkreach-teable record list --table-id <tid> [...]                          # alias of record get
inkreach-teable record get-one <recordId> --table-id <tid>
inkreach-teable record create --table-id <tid> --fields '<json>'            # single
inkreach-teable record create --table-id <tid> --records '<json>'           # batch
inkreach-teable record update --table-id <tid> --records '<json>'
inkreach-teable record delete --table-id <tid> <recordId> [recordId ...]   # or --record-ids <csv>

# view
inkreach-teable view list <tableId>
inkreach-teable view get <viewId>
inkreach-teable view create --table-id <tid> --name <n> [--type <t>]
inkreach-teable view update <viewId> [--name <n>]
inkreach-teable view delete <viewId>

# view presets (view-scoped shared named filter/sort bundles, applied via toolbar)
inkreach-teable preset list <tableId> [--view-id <vid>]
inkreach-teable preset create --table-id <tid> --view-id <vid> --name <n> [--description <d>] \
  [--filter '<json>'] [--sort '<json>'] [--group '<json>'] [--options '<json>'] [--column-meta '<json>']
inkreach-teable preset update <presetId> --table-id <tid> [--name <n>] [--description <d>] [--filter '<json>' ...]
inkreach-teable preset delete <presetId> --table-id <tid>

workflow

inkreach-teable workflow list [--base-id <id>]
inkreach-teable workflow get <workflowId> [--base-id <id>]
inkreach-teable workflow create --name <n> [--description <d>] [--base-id <id>]
inkreach-teable workflow update <workflowId> [--name <n>] [--description <d>] [--base-id <id>]
inkreach-teable workflow delete <workflowId> [--base-id <id>]
inkreach-teable workflow activate <workflowId> [--base-id <id>]
inkreach-teable workflow deactivate <workflowId> [--base-id <id>]
inkreach-teable workflow test <workflowId> [--base-id <id>]

Full automation flow: automation-guide.md.

trigger

inkreach-teable trigger set <workflowId> --type <T> [options] [--base-id <id>]
--type Required options
recordCreated --table-id
recordUpdated --table-id, --field-ids '<json>'
recordCondition --table-id, --conditions '<json>'
recordCreatedOrUpdated --table-id
formSubmitted --table-id, --form-ids <csv>
scheduledTime --schedule '{"timing":{"type":"minutes","interval":5}}'
buttonClick --table-id, --field-ids '<json>'
webhook (none)

Common optional: --batch '<json>' (record triggers only).

Details: trigger-types.md.

action

inkreach-teable action add <workflowId> --type <T> [options] [--base-id <id>]
inkreach-teable action update <workflowId> <nodeId> [--config '<json>'] [--code <js>] [--code-file <path>] [--name <n>]
inkreach-teable action delete <workflowId> <nodeId> [--base-id <id>]

Per-type options:

--type Options
script --code <js> / --code-file <path>, --timeout <ms>
sendEmail --to <email>, --subject <s>, --body <html>
httpRequest --url <u>, --method <m>, --headers <json>, --req-body <json>
createRecord --target-table <id>, --records <json>
updateRecord --target-table <id>, --records <json>
getRecords --target-table <id>, --query <json>
sendNotification --to-user <usrId>, --title <s>, --message <s>, --severity <s>, --path <s>

Details: action-types.md.

secret

inkreach-teable secret list <workflowId> [--base-id <id>]
inkreach-teable secret set <workflowId> --name <n> --value <v> [--description <d>] [--base-id <id>]
inkreach-teable secret update <workflowId> <secretId> [--name <n>] [--value <v>] [--description <d>] [--base-id <id>]
inkreach-teable secret delete <workflowId> <secretId> [--base-id <id>]

Values are write-only — list never returns them. Scripts read via process.env.<NAME>.

runs

inkreach-teable runs list <workflowId> [--status failed|succeeded|running] [--base-id <id>]
inkreach-teable runs get <workflowId> <executionId> [--base-id <id>]
inkreach-teable runs rerun <workflowId> <executionId> [--base-id <id>]

rerun only works on failed executions (backend validates).

fire

inkreach-teable fire button-click <tableId> <recordId> <fieldId>
inkreach-teable fire webhook <baseId> <workflowId> [--body '<json>'] [--method <m>]

Manually trigger for testing. Webhook needs no auth (backend is @Public).

subscription

inkreach-teable subscription list
inkreach-teable subscription get <subscriptionId>
inkreach-teable subscription create --name <n> --table-id <tid> [options]
inkreach-teable subscription update <subscriptionId> [options]
inkreach-teable subscription delete <subscriptionId>
inkreach-teable subscription events <subscriptionId>
inkreach-teable subscription send <subscriptionId>

Record digest/instant email subscriptions. Options (--filter, --send-mode, --schedule-*, --trigger-on-enter, …) and semantics: subscription.md.

plugin

Manage plugins and developer whitelist.

# List plugins registered in the base
inkreach-teable plugin list

# Register a URL-served plugin (runtimeType=url; status published immediately)
# positions: "base"|"panel"|"view"|"dashboard"|"contextMenu"
inkreach-teable plugin register --url <url> --name <name> [--positions '["panel"]'] [--logo <url>] [--description <d>]
# Bundle (upload) plugins use a different flow — see skill guides/tables-fields.md
# or api docs: create kebab-id plugin (developer whitelist) → upload → admin publish.

# Developer whitelist (admin only)
inkreach-teable plugin dev list
inkreach-teable plugin dev allow <userIdOrEmail>   # add (userId or email)
inkreach-teable plugin dev revoke <userIdOrEmail>  # remove

# Install / uninstall (creates a base-level mount node)
inkreach-teable plugin install --plugin <pluginId> --name "My Plugin" --position base
#   ⚠️ For view/dashboard-position plugins, run `plugin config enable` BEFORE
#   install, or the install API returns 403 RESTRICTED_RESOURCE
#   'Plugin is not enabled for this base'.
inkreach-teable plugin installs        # list installs in current base
inkreach-teable plugin uninstall --install <installId>

# Enable/disable plugins
inkreach-teable plugin config enable --plugin <pluginId>
inkreach-teable plugin config disable --plugin <pluginId>

# CSP apiOrigins (external origins plugins may fetch)
inkreach-teable plugin csp list
inkreach-teable plugin csp set <pluginId> --origins '["http://192.168.x.x:8001"]'

Developer whitelist is admin-only (requires user.isAdmin=true). Routes: /api/plugin-developers (GET/POST/DELETE).

Output Modes

  • Human (default): tables / key-values, colored where supported.
  • --json: compact raw JSON on stdout. Errors in JSON mode:
    { "error": { "status": 404, "code": "NOT_FOUND", "message": "..." } }
    
    (exit code 1)

Error Troubleshooting

  1. inkreach-teable auth status — token valid? endpoint reachable?
  2. Verify IDs: table get, field get, workflow get (typo'd IDs → 404).
  3. Check permissions: token scopes + base role. 403 → role too low.
  4. --debug to see the raw HTTP request/response.