A precise-looking total can still be wrong. An assistant may read only part of a file, skip numbers stored as text, treat blanks as zero, or apply a filter you never requested. A polished chart can make the same incomplete subset look even more convincing.
In this lesson, you use OpenCode Desktop to question one small synthetic CSV. You first structure the task, then understand the data, hire one assistant for a bounded calculation, and build a checked result. You do not need to write a program, install a package, or learn a spreadsheet formula. The command-line workflow is optional and is not used for these instructions.
OpenCode Desktop is the interface coordinating the work. A local Desktop window does not prove that the language model is local. The selected provider may process prompts and referenced file content remotely, so use only the synthetic files supplied for this exercise.
Learning objectives
After this lesson, you can:
- open a local project folder in OpenCode Desktop and identify the folder boundary;
- audit a table import before analyzing it;
- define blanks, numeric values, and a threshold precisely;
- require stable row identifiers for included and excluded records;
- delegate a bounded table check and inspect the requested file write;
- reproduce a decimal total independently and reconcile all rows;
- recognize when a partial import invalidates every later answer.
Core concepts
The project folder is the working boundary
In the installed OpenCode Desktop application, choose Open project and select the existing local table-check folder. This is an application action, not a website upload and not an installation. The folder is not a decorative detail: it defines the small body of material you intend the assistant to inspect.
For this exercise, the boundary is table-check. It contains only three files: the supplied expenses.csv, your independent check.md, and the requested assistant output assistant-check.md. Do not place personal expenses, employer records, credentials, or production exports in this practice folder.
The assistant's tools can read files and, when enabled, write files or run shell commands. Permission behavior depends on configuration. Whether or not your setup asks before every action, your rule is the same: inspect the requested action, allow only the named in-folder output, and stop if the assistant asks to read outside table-check, reveal a credential, overwrite the CSV, or run a destructive command. A refusal or stopped action is a correct result, not a failed lesson.
Count before calculating
Record the expected data-row count before asking a numerical question. Then request the imported count, exact headers, first and last IDs, duplicate IDs, missing sequential IDs, and detected column types. If the source has 12 rows and the assistant reports 11, stop. The import has failed, so every total and threshold result after it is untrustworthy. Do not repair only the final number.
For larger files, reconciliation still begins with the full file: expected rows must equal included rows plus excluded rows. Sampling rows from the beginning, middle, and end can reveal shifted columns or truncation, but sampling does not prove complete import. Reproduce the full arithmetic with an independent spreadsheet calculation or calculator.
Define words that hide choices
"Find outliers" has no single meaning. This lesson uses a fixed review rule: values strictly greater than 300.00. The word strictly matters. A value of exactly 300.00 would not qualify. A matching row does not prove fraud, error, or importance; it only meets the stated rule.
A blank, 0, N/A, and 100 EUR are different. State whether blanks are excluded, whether zero is valid, and whether text may be converted. Here, blank amount_eur cells are excluded from the sum and counted separately. They are not silently changed to zero. No text conversion is allowed.
Decimal notation also deserves care. The fixture uses a full stop as the decimal separator and two decimal places. Preserve those written values throughout the evidence trail. Some software represents decimal fractions internally with tiny binary rounding differences, while other tools may interpret commas according to locale. For this small fixture, grouping the ten visible amounts and adding them with a normal calculator gives a reproducible check without introducing code, packages, or hidden conversion rules.
Ask for an evidence trail
Every numerical answer should expose:
- the method;
- included IDs and values;
- excluded IDs and reasons;
- active filters;
- the result.
The evidence trail can itself be wrong, so compare it with the file. Its value is that silent choices become visible.
Use stable identifiers
Row numbers can change after sorting. A stable ID such as E-001 lets another person locate the record. Reject an answer that lists only “row 5” when the table already supplies a durable identifier.
Separate analysis from meaning
The calculation can show that E-005 exceeds a threshold. It cannot establish why the amount is high or whether it is allowed. Interpretation requires context, policy, and accountable people outside this exercise.
Hiring an agent means setting a small contract
At L1, "hire an agent" means delegate one clear, low-risk task to the assistant available in OpenCode. It does not mean building a multi-agent system or learning orchestration. A useful contract names the inputs, the allowed action, the output, the stopping conditions, and the evidence required.
For this exercise, the assistant may read two synthetic files and create one result file. It may not edit the source, browse unrelated folders, install software, or infer business meaning. This narrow contract makes the work easier to inspect and easier to reject safely when it crosses a boundary.
Runnable exercise
You will create a small evidence bundle rather than trust a chat answer. The final bundle contains the unchanged source, your independent reference, and the assistant's report.
1. Structure it: prepare a fresh project
Create a new folder named table-check in a location approved for course work. Open that folder in your normal file editor and create a new file named expenses.csv. Save this exact synthetic fixture:
expense_id,team,amount_eur
E-001,Support,120.00
E-002,Sales,85.50
E-003,Support,99.50
E-004,Operations,
E-005,Sales,410.00
E-006,Operations,75.00
E-007,Support,130.00
E-008,Sales,95.00
E-009,Operations,110.00
E-010,Support,
E-011,Sales,90.00
E-012,Operations,85.00
The file has 12 data records below one header row. Keep every fixture value unchanged so that your result can be compared with the course reference.
Create a second new file, check.md, in the same folder. Write this source contract before asking the assistant anything:
Expected data rows: 12
Expected headers: expense_id, team, amount_eur
Expected first and last IDs: E-001, E-012
Blank rule: exclude blank amount_eur cells from the sum; count them separately
Threshold rule: report numeric amount_eur values strictly greater than 300.00
Conversions: none
Filters: none
Data: synthetic
This contract prevents the assistant from silently deciding what a blank or threshold means. It also gives you evidence that existed before the model's answer.
In Desktop, choose Open project and select the existing local table-check folder, then choose New session for this project. Starting a fresh session avoids carrying unrelated project context into the exercise. Use the Desktop model control to select only a provider and model approved by your course or organization, and record the displayed provider and model in your evidence. If credentials or an unapproved provider are requested, stop; do not paste an API key into the conversation or invent a connection merely for practice. The provider-backed model may be remote even though Desktop is running on your computer.
2. Understand it: inspect and define the question
Open expenses.csv yourself before delegating. Check these visible facts:
- the header is
expense_id,team,amount_eur; - IDs run from
E-001throughE-012; - there are 12 data rows and no duplicate IDs;
E-004andE-010have empty amount cells;- the other ten amount cells use a full stop and two decimal places.
Do not calculate yet. First make sure the assistant receives the same files and rules you inspected. In the new session, provide both named synthetic files explicitly rather than asking the assistant to search broadly. Keep the request limited to the current project folder.
3. Hire an agent: give one bounded assignment
Enter this request in the OpenCode Desktop session:
Read the two files `expenses.csv` and `check.md` in this project. Both files are synthetic. Do not edit them.
First audit the import. Report the data-row count, exact headers, first and last IDs,
duplicate or missing IDs, detected type of each column, and every filter. Stop if the
count is not 12 or if amount_eur is not numeric except for blank cells.
If the audit passes, answer:
1. What is the sum of numeric amount_eur values, excluding blanks?
2. Which numeric values are strictly greater than 300.00?
3. Which IDs have blank amount_eur cells?
For every answer show the method, included IDs and values, excluded IDs and reasons,
and active filters. Do not convert text, treat blanks as zero, infer causes, or make a
chart. Write the result to assistant-check.md and change no other file.
This is a bounded hire: two named inputs, one named output, no source edits, and an explicit stop condition. If OpenCode presents a write action for assistant-check.md, check the path and intended content before allowing it. If the proposed action targets expenses.csv, check.md, a parent folder, credentials, or any unrelated file, do not proceed. Ask for a corrected in-folder action or end the session.
When the assistant finishes, inspect the folder yourself. Open Changes and inspect the proposed or recorded file diff. assistant-check.md should be the only new assistant-written file. Compare its claims line by line with expenses.csv; do not accept a result merely because Desktop says the task is complete. Confirm the filesystem result and the diff agree.
The known answers from the fixture are:
| Check | Expected result |
|---|---|
| Imported rows | 12 |
| Numeric rows | 10 |
| Blank rows | E-004, E-010 |
| Sum | 1300.00 |
Values greater than 300.00 | E-005 = 410.00 only |
If the report gives a different value, keep the source unchanged. Look first for an omitted row, an active filter, a blank treated as zero, text conversion, a threshold interpreted as >= 300.00, or decimal punctuation interpreted under another locale.
4. Build it: verify and complete the evidence bundle
Now verify independently. Do not ask the same assistant to check itself, because that can repeat the same mistake. Use a calculator and add the first five numeric values in source order:
120.00 + 85.50 + 99.50 + 410.00 + 75.00 = 790.00
Add the remaining five:
130.00 + 95.00 + 110.00 + 90.00 + 85.00 = 510.00
Then combine the two subtotals:
790.00 + 510.00 = 1300.00
The split is deliberate. It exposes two smaller subtotals that are easier to repeat than one opaque final number. Reconcile the file: 10 included numeric rows plus 2 excluded blank rows equals all 12 expected rows. Scan every numeric cell against > 300.00; only 410.00 qualifies, so its stable ID E-005 must be named. Check the beginning (E-001), middle (E-006), and end (E-012) against the assistant's evidence to help catch a shifted or truncated range.
Return to your existing check.md and add this table below the source contract. This is your write, not another assistant task:
| Check | Assistant claim | Independent evidence | Pass or fail |
|---|---|---|---|
| Import | 12 source rows, headers and IDs checked | ||
| Sum | calculator total 1300.00 | ||
| Threshold | row scan finds E-005 only | ||
| Blanks | E-004 and E-010 |
Fill the Assistant claim cells from assistant-check.md. Mark each row Pass only when the claim matches the independent evidence. If the assistant imported fewer than 12 rows, used a filter, omitted IDs, changed a source file, or silently converted a value, mark the run failed. Correct the boundary or request and repeat the whole check from import audit onward; do not patch the reported number alone.
Finish with this explain-it-back checkpoint in your own words: "The sum is defensible because every expected row is either included or named as excluded, and an independent calculation reproduces the result. The threshold flags a row; it does not explain or condemn it."
Use the T10-L01 companion result viewer as a reference and checking aid. It is not an app you need to build. The companion page will provide the actual synthetic input files and inspectable reference outputs as downloads.

The image shows the course-authored browser result viewer for this synthetic exercise. It is not the OpenCode interface and is not proof of an autonomous OpenCode session.
Exit check
You pass with unchanged expenses.csv, the assistant's evidence in assistant-check.md, and a completed check.md. Check all of these conditions:
- the project contains the expected three files and no unexplained assistant output;
expenses.csvstill has the exact 12 synthetic records;- the report names 10 numeric rows and blank IDs
E-004andE-010; - the independently reproduced sum is
1300.00; - the strict threshold result is only
E-005 = 410.00; - included and excluded rows reconcile to all 12 records;
- active filters are reported as none;
- no chart, confidence statement, or polished prose substitutes for row evidence.
Fail the exercise if any expected row disappears, if a blank is silently converted, if the result lacks stable IDs, or if the assistant changes anything beyond assistant-check.md. Recovery means returning to the unchanged source and rerunning the whole audit with a corrected request or configuration. It does not mean editing the evidence until it resembles the answer key.
Explain what you would do with a 2,000-row file. A sound answer begins with whole-file count reconciliation, checks types and filters, samples beginning/middle/end for structural problems, and independently reproduces the full arithmetic. It does not claim that a small sample proves completeness.
Source notes
- The prior public lesson supplied the retained import audit, row evidence, mixed-type warning, independent recount, larger-file reconciliation, and synthetic 12-row expense fixture: https://curriculum.32dots.de/api/books?where%5BbookId%5D%5Bequals%5D=T10-L01&depth=0&limit=1&draft=false (opens in a new tab)
- OpenCode Desktop provides the verified Open project, New session, and Changes actions; the Desktop model control is configuration-sensitive. See the approved source packet:
editorial/research/l1-desktop-start.md. - OpenCode's official download page lists Desktop downloads for Windows, macOS, and Linux: https://opencode.ai/download (opens in a new tab)
- OpenCode's English locale is the source for the shared Desktop labels: https://github.com/anomalyco/opencode/blob/dev/packages/app/src/i18n/en.ts (opens in a new tab)
- The expense data, names, IDs, rules, expected outputs, companion viewer, and image in this lesson are course-authored synthetic materials.
Unknowns and limitations
No live OpenCode Desktop exercise run or spreadsheet recalculation was performed as part of this manuscript revision; the expected values are reproducible directly from the shown synthetic rows. A model may not analyze CSV consistently, and available models, tools, write behavior, Changes presentation, and permission prompts depend on local configuration. The companion viewer is a checking aid, not evidence that a particular model produced the result.
This clean 12-row fixture does not cover locale-specific decimal separators, quoted newlines, duplicate headers, multiple sheets, malformed exports, file-size limits, or performance on large tables. Beginning/middle/end sampling can reveal some structural errors in a larger file but cannot prove full-file completeness. The arithmetic has no accounting, policy, or fraud meaning. Real, private, or production data requires explicit approval and a reviewed provider/data-handling path before it enters any model context.
How this book was made
Sol revised the manuscript, preserving the original synthetic fixture, expected results, permanent ID, baseline checksum, and source provenance. Luna inspected content gaps and prepares the companion materials. The coordinator integrates the manuscript and verifies the companion page and image before publication. Publication and final exercise execution are separate from authorship; this section does not claim a completed OpenCode run, independent approval, or publication.