RolitRolit Docs
Rolit CLI

Decision support

Classify, score, or filter every row of a file with typed questions, then analyze the results.

Decision support answers a question about every row of a file, such as "what does this searcher want?" or "is this lead relevant?". Each row gets a label or a probability, so you can sort, filter, and group a large file without reading it row by row.

A decision is a probability, never an approval. Acting on one, such as excluding a search term, emailing a lead, or publishing, is a separate step under your normal approval mode.

Question types

TypeReturnsUse it to
choiceOne of the labels you declare, with a probabilityClassify, route, or tag
scoreA position on an ordered scale (2 to 20 levels)Rank urgency or quality
noulThe probability that a statement is trueGate or filter, for example "is this relevant?"

A file can have up to 8 questions per run. You write the questions, and the rows only supply the data.

Run it from the command line

Supported files are .csv, .ndjson or .jsonl, and .json arrays of objects.

Write the questions in a workspace JSON file:

{
  "columns": ["search_term"],
  "key": "term_id",
  "questions": {
    "intent": {
      "type": "choice",
      "instructions": "What does the person searching want?",
      "criteria": {
        "buyer": "Ready to purchase or compare vendors.",
        "researcher": "Learning about the topic, not buying yet.",
        "other": "Unrelated or unclear."
      }
    },
    "relevant": {
      "type": "noul",
      "instructions": "Is this term relevant to a CRM product?"
    }
  }
}

Preview first. plan makes no network request and costs nothing:

rolit decide plan data/search-terms.csv --questions-file questions.json

Then run it with a spending limit:

rolit decide run data/search-terms.csv --questions-file questions.json --max-credits 10
OptionMeaning
--questions-fileWorkspace JSON file with the questions, and optionally columns and key
--columnsComma-separated columns the model may read for each row
--keyColumn that identifies a row in the result. Defaults to the row number.
--outWorkspace-relative result file. Defaults to a path under the GTM output directory.
--max-creditsStops before the next batch once this many credits are used
--brandWhich named brand's project and output directory to use
--dry-runReports what would happen without running
--jsonWrites one rolit.job.v1 envelope to stdout

rolit decide models lists the decision models your plan offers, with credit rates.

Run it from chat

With the Decision setting on, the agent can apply questions to a file itself. It's on by default. Check it with /settings, or turn it off with /settings decision off.

ToolWhat it does
decision.applyApplies the agent's questions to every row of a workspace file
decision.statusShows progress of a run started in this session
decision.cancelStops a run. Batches already finished are kept.

The agent never reads your rows. It gets counts, the spread of answers, and the path to a result file. Long runs go to the background, and the conversation is told when one finishes. rolit decide always works, whatever the setting.

Read the results

The result is a file with one line per input row and no source text.

ColumnMeaning
row_keyYour key column value, or the zero-based row number
<question>choice: the picked label. score: the expected level, starting at 0. noul: the probability of true.
<question>_pFor choice, the probability of the picked label
<question>_marginFor choice, how far ahead the picked label is of the runner-up
<question>_statusok or failed
statusok, failed, skipped (with a reason), or unprocessed (the run stopped early)

Counts always add up: rows = judged + failed + skipped + unprocessed. An invalid or missing answer is marked failed, never guessed.

To analyze the results, load the file and join it to your data. In chat, the agent can do this with DuckDB:

SELECT intent, count(*) AS terms, round(avg(relevant), 2) AS avg_relevance
FROM search_intent d JOIN search_terms t ON t.term_id = d.row_key
WHERE d.relevant >= 0.8
GROUP BY intent ORDER BY terms DESC;

Filter your file first when you can, because only rows you send cost credits.

Cost and interruptions

Decision runs spend credits without a prompt and have no default limit. Use --max-credits on large files, and run plan first.

  • Resume. Progress is checkpointed next to the result file. Running the same command again continues with the unfinished batches and doesn't charge for finished ones. Changing the input or the questions starts over.
  • Credit cap, out of credits, or a service outage. The run ends as partial with everything finished saved. rolit decide run still exits 0 and reports state: "partial" with a warning, so check the state field in scripts rather than the exit code.

Privacy

  • Only the columns you name leave your machine. The key column and all others stay local.
  • Email addresses and phone numbers are masked in those columns before sending (for example j***@acme.com), and secret-shaped text is replaced.
  • Empty or oversized rows are skipped with a reason, and never truncated. Each row can carry up to 32,000 bytes.
  • Paths are sandboxed to your workspace.
  • Free text in a named column can still contain personal data that isn't an email or phone number. Choose columns carefully.

When not to use it

Don't use decision support to write content, to count or do date arithmetic (do that in code), or for a handful of rows you can read yourself. A row's own text can sway its answer, which is another reason a decision never authorizes an action.

On this page