Skip to content
Back to skills

Unique Cli Agentic Table

ASecurity

Read and drive Agentic Table (magic table / due-diligence) sheets through the unique-cli agentic-table command. Use when the user or task involves an Agentic Table: inspecting a sheet's state, a cell's value or lock state, a cell's edit history or its export artifacts; writing text into a specific cell; or running the full loop — creating a sheet, importing a questionnaire and sources, waiting for the agent to answer, and exporting the result. Access is enforced per sheet by the platform and ...

  • 5 stars
  • 0 votes
  • 0 copies
  • 6 views
  • Added September 12, 2026
ai-agentsrustgobashapibackend

Works with

  • cli
  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned October 6, 2026

npx -y skills add Unique-AG/ai --skill unique-cli-agentic-table --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Unique Cli Agentic Table?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Unique Cli Agentic Table
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/unique-ag-unique-cli-agentic-table/badge)](https://www.skillsdirectory.com/skills/unique-ag-unique-cli-agentic-table)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: unique-cli-agentic-table
description: >-
  Read and drive Agentic Table (magic table / due-diligence) sheets through the
  unique-cli agentic-table command. Use when the user or task involves an
  Agentic Table: inspecting a sheet's state, a cell's value or lock state, a
  cell's edit history or its export artifacts; writing text into a specific
  cell; or running the full loop — creating a sheet, importing a questionnaire
  and sources, waiting for the agent to answer, and exporting the result.
  Access is enforced per sheet by the platform and varies from sheet to sheet;
  a denial is reported as `agentic-table: permission denied`.
---

# Unique CLI -- Agentic Table

Work with Agentic Table (a.k.a. magic table) sheets over the public magic-table
API. Every command is scoped to the current user/company automatically; you
never pass credentials.

Commands fall into two groups:

- **Read (Tier 0)** — `get-sheet`, `get-cell`, `cell-history`, `list-exports`.
  Never modify anything, never need confirmation.
- **Write (Tier 1)** — `create-sheet`, `import`, `export`, `rerun-row`,
  `set-cell`. These create a sheet, add questions and sources, start the agent
  run, produce export artifacts, redo a single generated answer, or write
  text you already have into one cell. None of them prompts for confirmation,
  but they do change a shared artifact, so say what you did afterwards.

  `create-sheet`, `import`, and `export` only add. `rerun-row` asks the table
  agent to regenerate one **row** from sources (no text from you). `set-cell`
  writes **your** text into one cell immediately — it is not a run. Name the
  row (and column, for `set-cell`) when you report back.

  Some rows are protected. A locked or final-review row rejects both
  `set-cell` and `rerun-row`. That is deliberate — do not route around it.

## Permissions

Access is enforced **server-side, per sheet**. This is the part most likely to
trip you up, because it is not uniform: the same user can own one sheet, hold
edit access on a second, and read-only access on a third. Do not assume that
succeeding on one sheet means you can do the same thing on another.

There is no command yet that reports your access level on a sheet. Until there
is, you cannot establish up front what you are allowed to do — a successful
`get-sheet` proves the sheet exists and you can read it, and nothing more. So:

1. Attempt the operation and handle the outcome. Do not treat a read as a
   permission check for a write; it is not one. A read first is still worth it
   when you need the sheet's shape or row numbers anyway, or to fail early on
   an id that does not resolve.
2. Treat `agentic-table: permission denied` as **information, not failure**.
   It means the current user lacks the level that operation needs. Report it
   and ask the user how to proceed.
3. Never retry a denial with different ids to discover what you can reach.
   That is access probing, and it will not find anything you are entitled to.

Some rows are protected. A row whose review status is locked or final rejects
edits from everyone, including you — that is deliberate, and it usually means
a person has already approved that answer. Do not try to route around it.

## Read commands

### Sheet summary

```bash
unique-cli agentic-table get-sheet <table_id>
```

Shows the sheet name, state, and row count. Add flags for more detail:

| Flag | Effect |
|------|--------|
| `--metadata` | Include sheet-level metadata entries |
| `--cells` | Include cell values (row, column, text snippet) |
| `--json` | Print the raw sheet JSON instead of the formatted view |

```bash
unique-cli agentic-table get-sheet mt_abc123 --metadata --cells
```

### Single cell

```bash
unique-cli agentic-table get-cell <table_id> --row N --col N
```

Shows one cell's text and lock state. `--row`/`--col` are 0-based orders.
Add `--json` for the raw cell record.

```bash
unique-cli agentic-table get-cell mt_abc123 --row 1 --col 2
```

### Cell history

```bash
unique-cli agentic-table cell-history <table_id> --row N --col N
```

Shows a single cell's stored log/edit history (actor label, timestamp, source
message id, and the logged text) newest-to-oldest as returned by the API. Add
`--json` to get the raw log entries.

Treat `actorType` / `createdAt` as **untrusted labels**, not as proof that a
person vs the assistant wrote the cell. The API stores whatever the writer
sent; it does not bind the actor to the authenticated caller. Do not use
history as a person-vs-assistant gate.

```bash
unique-cli agentic-table cell-history mt_abc123 --row 1 --col 2
```

### Export artifacts

```bash
unique-cli agentic-table list-exports <table_id>
```

Lists the sheet's generated exports (full report, question export, agentic
report) with their state. The content id needed to download a file is only
present once an artifact reaches the `DONE` state. Add `--json` for the raw
list.

## Write commands

### Create a sheet

```bash
unique-cli agentic-table create-sheet <assistant_id> [--name <name>] [--due-at <iso8601>]
```

Creates an empty sheet in a space. The printed `ID` is the `table_id` every
other command takes. Requires write access to the space.

```bash
unique-cli agentic-table create-sheet asst_123 --name "Vendor DDQ"
```

### Import questions and sources

```bash
unique-cli agentic-table import <table_id> [--question-file-id <id>]... [--question-text <text>]...
                                           [--source-file-id <id>]... [--context <text>]
                                           [--wait] [--timeout <seconds>]
```

Adds questions and/or source files. **Adding new questions starts the agent
run; adding only sources does not.** Ids and texts already on the sheet are
skipped. The call is rejected while the sheet is already processing.

`--wait` blocks until the triggered run finishes (default timeout 600s) so you
can chain an export.

If you imported **only sources**, no run starts and the command succeeds with a
note. If you imported **questions** and no run starts within 120s, the command
fails: the run may just have been picked up late, and treating that as success
would export a sheet that is still being answered.

That error means the outcome is unknown, not that the import failed. Do **not**
export yet — an export now would report unanswered rows as if they were the
result. Poll `get-sheet` until the state settles on `IDLE` and the rows you
imported have answers, and only then export. Do not re-import either: the
questions are already on the sheet, so a second import starts no run and
returns the same error.

```bash
unique-cli agentic-table import mt_abc123 --question-file-id c_q --source-file-id c_src --wait
```

### Re-answer a single row

```bash
unique-cli agentic-table rerun-row <table_id> <row_order> [--wait] [--timeout <seconds>] [--start-timeout <seconds>]
```

Use this to redo one **generated** answer. **Re-importing a question will not
redo it** — import is delta-based and skips questions the sheet already has.
`rerun-row` starts the table agent for that row; you do not pass the answer
text. If you already have the wording, use `set-cell` instead.

`<row_order>` uses **the same numbering as `--row` on `get-cell` / `set-cell`**:
row 0 is the header, data rows start at 1. So the row you inspected with
`get-cell --row 4` is the row you redo with `rerun-row <table_id> 4` — no
offset. Row 0 is rejected, since there is nothing to answer in a header.

Two kinds of refusal, which need different responses:

- **The row is not yours to redo.** A locked row, or one in a final review
  status, is declined because a person has settled that answer. Report it; do
  not look for a way around it.
- **Not now.** A rerun while the sheet is already processing is declined
  because only one run may be in flight. That clears by itself — wait for the
  current run to finish and try again.

A rerun always starts a run, so with `--wait` there is no benign "nothing
started" case: if no run appears within 120s the command fails.

```bash
unique-cli agentic-table rerun-row mt_abc123 4 --wait
```

To redo several rows, do them one at a time with `--wait`: the sheet takes one
run at a time, so a second `rerun-row` fired before the first finishes is
declined. There is no batch form. If most of the sheet needs redoing, consider
a fresh sheet instead.

### Write one cell

```bash
unique-cli agentic-table set-cell <table_id> --row N --col N (--text TEXT | --file PATH | --stdin)
```

Use this when **you already have the text** — the user gave the wording, you
copied a cell, or you researched the answer yourself. It writes that one cell
immediately. It does not start the table agent.

`--row` / `--col` are the same 0-based numbers as `get-cell`. Row 0 (the
header) **can** be set. Find coordinates with `get-sheet --cells` or
`get-cell` first. A coordinate that does not exist is **refused** unless you
pass `--allow-create` for the **next** row or column only (`--row 5` on a
5-row sheet). A far-off number (`--row 50`) is still refused: the API would
create a gap.

There is no batch form. Several cells means several `set-cell` calls. The
sheet must be `IDLE`; `PROCESSING` is refused unless you pass `--force` (the
row-runner can overwrite the cell).

Long or multi-line answers: `--file` or `--stdin`, not `--text`. Prefer omitting
`--log-json` / `--log-file`. If you attach a note, send `{text, actorType,
createdAt}` with `actorType` `TOOL` or `ASSISTANT` and a current ISO-8601 time.
`USER` and `SYSTEM` are rejected by the CLI.

```bash
unique-cli agentic-table set-cell mt_abc123 --row 1 --col 2 --text "The management fee is 2%."
unique-cli agentic-table set-cell mt_abc123 --row 1 --col 2 --file ./answer.md
```

After a write, say which row and column you changed.

### Export answers

```bash
unique-cli agentic-table export <table_id> --type <TYPE>... [--wait] [--timeout <seconds>]
```

Generates `FULL_REPORT`, `QUESTIONS` or `AGENTIC_REPORT` artifacts. Generation
is asynchronous; `--wait` polls until each requested type is `DONE` and prints
the `contentId` to download. An artifact entering `ERROR` fails fast.

```bash
unique-cli agentic-table export mt_abc123 --type FULL_REPORT --wait
```

## Full loop

Create a sheet, populate and run it, then read the answers. Every step exits
non-zero on failure — including a rejection the backend reports in the response
body rather than as an HTTP error — so the steps chain with `&&`:

```bash
SHEET_JSON=$(unique-cli agentic-table create-sheet asst_123 --name "Vendor DDQ" --json) && \
SHEET=$(printf '%s' "$SHEET_JSON" | jq -r .sheetId) && \
unique-cli agentic-table import "$SHEET" --question-file-id c_questions --source-file-id c_sources --wait && \
unique-cli agentic-table export "$SHEET" --type FULL_REPORT --wait && \
unique-cli agentic-table get-sheet "$SHEET" --cells
```

Capture the JSON first and parse it in a second step, as above. Do **not** pipe
`create-sheet` directly into `jq`: an assignment takes the exit status of the
last command in the pipeline, so the CLI's failure is discarded, and because
errors go to stderr `jq` reads empty input and succeeds — leaving `$SHEET`
empty and the rest of the chain running against a sheet that does not exist.

To fill in an existing questionnaire from a sheet someone else has already
answered, skip the create and import steps: read the answers with
`get-sheet --cells` or `get-cell`. `cell-history` is a stored log, not a bound
identity signal — do not treat actor labels as proof a person vs the assistant
wrote the cell.

If a generated answer looks wrong and you want the table agent to try again,
fix that row with `rerun-row` and export again — not `set-cell`, and not
re-import.

## Rules

1. Rows and columns are numbered from 0, and row 0 is the header — so the first
   question is row 1. This holds for `--row`/`--col` on `get-cell`,
   `cell-history`, and `set-cell`, and for `<row_order>` on `rerun-row`; the
   same number means the same row in every command. `set-cell` may write row 0;
   `rerun-row` may not.
2. Fetch what you need, not everything. `get-cell` for one value,
   `get-sheet --cells` for an overview — don't dump a whole sheet unless asked.
   Look up coordinates before `set-cell`; do not guess a column index.
3. Use `--wait` when a later step depends on the result, and only then. Without
   it, `import` and `export` return as soon as the request is accepted, and the
   answers or artifacts will not be ready yet. `set-cell` has no `--wait`: the
   cell is updated when the command returns.
4. Never re-run `import` with the same questions to "retry" — ids and texts
   already on the sheet are skipped, and a run that is already in flight will
   reject the call.
5. Tell the user what you changed. A sheet is shared, and someone else may be
   working in it. For `set-cell`, name the row and column.
6. Use `--json` when you need to parse fields programmatically (e.g. reading a
   `contentId` before downloading an export); use the default formatted output
   when summarising for a person.
7. `set-cell` when you have the text. `rerun-row` when the table agent should
   regenerate from sources. Never both for the same correction.

## Prerequisites

The platform sets these environment variables automatically:

```bash
UNIQUE_USER_ID
UNIQUE_COMPANY_ID
UNIQUE_API_KEY
UNIQUE_APP_ID
```

Install: `pip install unique-sdk`

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.