After loading the workflow, resolve the references/、scripts/、templates/、examples/ relative paths according to the
workflow.md directory they are in; when executing scripts, use the resolved actual paths and do not rely on the current shell directory.
Routing
| Intent | Read file |
|---|---|
| Sheet filter views and conditions, dropdown menus, floating images / cell images, batch styles, and the decision points for all sheet commands | references/workflows/sheet/workflow.md |
Sheet creation and metadata, read/write/append,table-get / table-put type fidelity, row/column and subtable management, find and replace, filtering, protection, Markdown conversion both ways |
references/workflows/sheet/workflow.md, then read references/workflows/sheet/references/basic-commands.md |
| Bitable/Base link parsing (resolve, block), tables, fields, records (including attachments, batch, pagination), views and view configuration, data-query | references/workflows/bitable/workflow.md |
| Bitable roles and collaborators, advanced permissions, workflows, dashboards and chart blocks, forms and sharing | references/workflows/bitable/workflow.md |
Execution rules
/wiki/For links or tokens of unknown type, first usedrive inspect --urlto parse; for Bitable links usebitable resolve(?table=is not necessarily a data table,/record/, and form share links also cannot be split directly)./sheets/is a Sheet,/base/is a Bitable.- Table parameters and
--base-tokencan both be passed links directly (including/spreadsheets/, knowledge base/wiki/)。 - Identity: when Sheet does not pass
--as, User is preferred; if unavailable, warn and fall back to Bot; Bitable defaults to--as auto. For cron / unattended, explicitly--as bot;--as botreporting 91403 means the Bot is not a collaborator; add the Bot as a collaborator according to the workflow, and do not repeatedly switch tokens. - The Sheet range prefix can be written as sheetId or subtable name (
Sheet1!A1); with multiple subtables, the prefix or--sheet-id/--sheet-namemust be included. Row/column commands--range "3:5"are 1-based and inclusive on both ends,--start/--endis 0-based and excludes end; before deleting rows/columns/subtables, first--dry-runto verify the actual row numbers. - Write long IDs and leading-zero encodings as JSON strings (numbers over about 15 digits will be rounded);
table-putfor numeric columns, dtype usesint64/float64(numberis invalid and will be written as text).sheet find/replacemust include--range。 - Bitable writes use the base/v3 structure: field JSON top level
type, do not wrapfield/property;record batch-createusecreate_recordsorfields+rows, not v1'srecords. Before writing, first verify field types and options with a small number of records. - Boolean flags are written as
--flagor--flag=false, do not write--flag false(it will be treated as true). Deleting tables/fields/records/views has no confirmation gate, and takes effect immediately upon execution;form field deleteby default deletes the field together with the entire column of data; to remove only the question, use--keep-field。 - Sheet cell images use
sheet image write-image(single) /write-batch(batch), do not use=IMAGE()formulas or Markdown image syntax.
When delete or overwrite commands return exit code 10, confirm the target and impact with the user, then append the global --yes Rerun, do not add on your own. For identity or scope errors (such as 99991663/99991668/99991672/99991679), read ../feishu-cli-platform/references/workflows/auth/references/identity.md; to determine success or failure, write scripts, or handle confirmation gates, read ../feishu-cli-platform/references/workflows/auth/references/agent-contract.md。