Search documentation

Search documentation

Dossier tools

The 27 tools that keep a record of what was decided on a project, and the document it produces.

A conversation disappears, a project runs for months. These twenty-five tools let your agent write down what was retained into a dossier you reopen, annotate and export from stratta.ch/dossiers, and read and do everything the dossier page can read and do to a question.

You don't call them by hand. Your agent does, while it works, following the policy described in get_methodology.

These tools are open to any member of the organisation, unlike the ingestion tools, which are restricted to owners and admins. A dossier is your own work, not the bureau's shared corpus.


What a dossier holds

A dossier is a set of questions to settle, for example "Can pile P38 be kept?" or "Which φ'k do we retain for the fill?". The question, not the standalone entry, is the unit of work: it is what gets assigned, reviewed and closed.

ElementWhat it isTool
QuestionWhat is still to be settledopen_question
EvidenceWhat backs an answer: a citation, a retained value, an observationsave_finding
OptionA way of settling the question, named when it is openedlisted in open_question
DecisionWhat you confirmed, and whyrecord_decision

A piece of evidence can be recorded before you even know which question it serves: it stays "unclassified", and you file it later from the app. Three kinds of evidence, and the distinction is not decoration:

KindWhat it isExpected fields
referenceWhat the norm saysnormCode, sectionPath, page
hypothesisThe value you retain, and whyvalue, detail, confidence
observationWhat the site showeddetail with the date

In structural work a retained value is the output of a formula and recomputing it settles any argument. In geotechnics it is a judgement made between three boreholes that disagree, and the only thing reviewable six months later is the reasoning. Hence confidence:

  • established: computed, or read directly from the norm
  • judgement: chosen by you between several possible values
  • to_confirm: provisional, needs a test or a check

Confusing the three is the professional fault this field exists to prevent.


list_dossiers

Lists your organisation's dossiers, most recently touched first. Each row carries the entry count and, more importantly, the count of open questions, which is what points at the dossier to pick up.

No parameters.


open_dossier

Opens a project's dossier, creating it if it does not exist yet.

namestringrequired

How you refer to the project, for example "Villa Morges, roof". This is the name you will use to resume it.

referencestring

Your organization's project number, if it has one.

Idempotent on the name. Calling it twice with the same name returns the same dossier rather than creating a second one that would split the project's history in two.

Returns { dossierId, created }.


open_question

Opens one question to settle in a dossier, before gathering evidence for it. A question is the unit of work: "Can pile P38 be kept?", "Which φ'k do we retain for the fill?". Evidence saved with save_finding and the eventual record_decision hang off it.

One question per thing to settle: never put a list of sub-questions in the body. A question that bundles eight cannot be assigned, answered or closed one at a time. Open eight questions.

dossierIdstringrequired

Returned by open_dossier or list_dossiers.

titlestringrequired

The question in one line, phrased as a question.

bodystring

What is at stake and why it is not settled, in two or three sentences. Not a list of sub-questions.

optionsarray

The ways this could be settled, when the norm or you put several forward: "abandon the pile", "recover it by re-concreting plus integrity tests", "redistribute onto P37/P39". One short name each, ten at most.

Idempotent on the title. Reopening the same wording returns the question already open, with its evidence.

Returns { questionId, created }.


list_attachments

Lists the project attachments of a dossier (site reports, borehole logs, meeting minutes, data sheets), with their extraction status. An agent reads them before answering on a project.

dossierIdstringrequired

The dossier.

attachmentsarray

id, name, mimeType, bytes, pageCount, status (pending, ready, failed), note, addedAt.


read_attachment

Reads the text of an attachment as a Markdown document, page by page, in windows.

attachmentIdstringrequired

From list_attachments or search_in_dossier.

fromnumberdefault: 1

First page.

tonumberdefault: last

Last page.

maxCharsnumberdefault: 12000

Characters per call (500 to 40000). When truncated is true, call again with from set to nextPage.

markdownstring

The pages read, each under a ## p. N heading. A scan without a text layer says so.


search_in_dossier

Full-text search over the attachments of one dossier, accents and case ignored.

dossierIdstringrequired

The dossier.

keywordstringrequired

Search terms in the language of the documents.

limitnumberdefault: 10

Maximum hits (1 to 30).

hitsarray

attachmentId, name, page, snippet.

On the local server only, add_attachment uploads a file from the user's machine (PDF, DOCX, XLSX, PNG, JPEG, TXT, MD, CSV, 25 MB at most, 20 per dossier). The remote connector has no disk: upload from the dossier page instead.


list_templates

Lists the dossier templates of the organization: checklists by type of structure, each a set of questions with the clauses they rest on. No parameter.

templatesarray

id, name, description, questions, citations.


apply_template

Opens the questions of a template in a dossier, with their options, and files every clause that resolves in the corpus as a reference entry under its question. A clause the organization cannot read is written into the question body as something to establish. Applying twice opens nothing twice.

dossierIdstringrequired

The dossier.

templateIdstringrequired

From list_templates.

resultobject

questionsOpened, referencesFiled, unresolved[] (question, normCode, sectionPath).


draft_deliverable

Opens the document a dossier produces (project basis, use agreement, geotechnical report, verification note, other) and returns its plan: one section per chapter, with its path, its title, a hint of what belongs there, its state (gap, current, stale, with the reason when a source moved) and an excerpt of what is already written. The plan is the office plan validated for that kind when there is one (Methods page), otherwise the one Stratta proposes. Also returns the decisions of the dossier with their ids, so write_section can cite them, and the site when there is one. Calling it twice on the same dossier and kind returns the same document, never a second one.

dossierIdstringrequired

The dossier.

kindstringrequired

project_basis, use_agreement, geotechnical_report, verification_note or other.

titlestring

The title, when the user named it. Default: the kind and the dossier name.

resultobject

deliverableId, created, title, kind, status, templateName, sections[] (path, title, level, hint, state, staleReason, excerpt, sourceCount), decisions[] (entryId, question, title, value, clause), openQuestions[], siteId.


write_section

Writes one section of the document: the text as it will be printed, and what it rests on. Every sentence of substance comes from a source the section lists: a decision or piece of evidence of the dossier (entry, the entry id), a site fact (fact, the fact key such as groundwater.level), a clause read (clause, "SIA 267 s. 9.5.2"), a page of an attachment (attachment, the id followed by #p12), a reading (reading). A section without a source is refused; when the dossier holds nothing for it, gap true and a body that says what is missing: the section is printed as something to establish. Replaces what the section held. A signed document is not written. When a source moves afterwards (a decision retaken, an entry deleted, a rescan of the site, a new edition), the section goes stale with the reason; rewriting it, or keeping it from the dossier page, brings it back.

deliverableIdstringrequired

From draft_deliverable.

pathstringrequired

The section path in the plan, "2" or "3.1".

bodystringrequired

The text, prose or light Markdown, up to 12,000 characters.

sourcesarrayrequired

A list of {kind, ref, label?}. At least one unless gap.

gapboolean

true when the dossier holds nothing for this section.

resultobject

state: current or gap.


save_finding

Records one piece of evidence in a dossier. Your agent calls it as it works, not in a batch at the end: evidence saved when it is found carries the reasoning that produced it.

dossierIdstringrequired

Returned by open_dossier or list_dossiers.

questionIdstring

The question this evidence serves, from open_question or load_dossier. Omit only when you do not yet know which one: the entry is saved "unclassified", and you file it later from the app.

kindstringrequired

reference, hypothesis or observation. See the table above.

titlestringrequired

The fact in one line, as you would write it in a report.

detailstring

The reasoning: why this value, what it rests on, what disagreed.

valuestring

The retained value with its unit, for example 30° or 1.25 kN/m².

confidencestring

established, judgement or to_confirm.

normCodestring

Source norm, for example SIA 267.

sectionPathstring

Exact section path, for example 9.5.2.1.

pagenumber

Page in the norm, so you can verify it in your own PDF.

normEditionstring

The edition cited, for example "2013" or "2020 + rect. 2022", when list_norms gives it.


record_decision

Records what you retained: the decision in one line, why, and the clause it rests on. Two ways to name the question: questionId when it already exists, or dossierId and question (what is settled, in one line) and the question is opened already decided, in the same call. The question leaves the open items and keeps its evidence; the decision becomes the entry a reviewer reads first.

Your agent only calls this once you have confirmed the decision, never on its own reasoning.

questionIdstring

Returned by open_question or load_dossier, when the question exists.

dossierIdstring

Without questionId: the dossier the decision belongs to.

questionstring

Without questionId: what is settled, in one line ("Friction angle of the moraine"). The same words find a question already opened.

retainedOptionstring

The option that was retained, by name, when the question listed some. An option not listed yet is created on the fly.

titlestringrequired

The decision in one line.

detailstring

The reasoning.

valuestring

The retained value with its unit, when the decision carries one.

confidencestring

established, judgement or to_confirm.

normCodestring

Source norm.

sectionPathstring

Exact section path.

pagenumber

Page in the norm.

normEditionstring

The edition cited.

Returns { entryId }.


load_dossier

Reloads everything a dossier holds: its questions with their evidence, options and decisions, then the evidence not yet filed under a question, then the comments. Open questions come first, read them before anything else and tell the user what is still open. Long texts are cut (an entry detail at 280 characters, a question body at 480): get_question gives them whole.

Just say "pick the Villa Morges dossier back up": your agent calls this before answering anything about the project, and builds on what was decided instead of deciding it again.

dossierIdstring

Preferred when the agent already has it.

namestring

The project name, when you name it rather than giving an id. Matched exactly.

One of the two is required.


resolve_question

Closes a question that stopped mattering without a decision: the variant was abandoned, the client withdrew the request, the point became moot. The question stays in the dossier, marked closed, with its evidence. To settle a question with an answer, call record_decision instead.

questionIdstringrequired

Returned by open_question or load_dossier.

resolvedboolean

Defaults to true. Pass false to reopen a question.


Reading one question at a time

load_dossier is the resume: the whole dossier, shaped small, open questions first. It is the right first call and the wrong only call. What the dossier page shows and it does not: who a question is assigned to and by when, the ids an agent needs to act on an option or an entry, an entry's citation field by field rather than as one line, the comments with their author, the history. The next four tools serve that, one page at a time: when nextCursor is present, call the tool again with its value as cursor.

list_questions

The questions of a dossier, with their status, assignee, due date, options (each with its id) and the title of the decision when there is one. The body is cut at 240 characters; get_question gives it whole.

dossierIdstringrequired

The dossier.

statusstring

open, decided or closed. Omit for all.

limitnumberdefault: 50

Questions per page (1 to 200).

cursorstring

The nextCursor of the previous page.

get_question

One question in full: its wording, status, options with their description, its decision, its evidence with every citation field (normCode, sectionPath, page, normEdition, attachmentId, attachmentPage) and the option each piece argues for, and the comments left on the question and on those entries, each with its author. Call it before adding anything to a question, so nothing is filed twice.

questionIdstringrequired

From list_questions, load_dossier or open_question.

limitnumberdefault: 50

Evidence entries per page (1 to 200).

cursorstring

The nextCursor of the previous page.

get_dossier_activity

The history of a dossier, most recent first: who did what and when, from the app or from an agent, each line with the question or the entry it concerns.

dossierIdstringrequired

The dossier.

limitnumberdefault: 15

Lines per page (1 to 200).

cursorstring

The nextCursor of the previous page.

list_exports

The verification notes and journals exported from a dossier, with their SHA-256 hash, the trusted timestamp when one was obtained and the methodology version in force. The file is downloaded from the dossier page; the tool says a note exists and lets you check a hash you were sent.

dossierIdstringrequired

The dossier.


Acting on a question

Everything the dossier page can do to a question, your agent can do too, when you ask for it. Two of these tools are irreversible: delete_question and delete_option ask for your confirmation through the client before touching anything, like record_decision.

update_question

Rewords a question, rewrites what is at stake, assigns it to a member of the organisation by e-mail address, or sets its due date. Only the fields given change; null clears the assignee or the due date. Status goes through record_decision and resolve_question.

questionIdstringrequired

The question.

titlestring

The new wording, in one line.

bodystring

What is at stake, in two or three sentences.

assigneeEmailstring | null

The address of a member of the organisation. null removes the assignee.

dueAtstring | null

An ISO day, for example 2026-10-15. null removes the due date.

add_option

Adds one way of settling the question, when a variant comes up after it was opened. Idempotent on the name: the same words return the option already listed. Ten options per question at most. Returns { optionId, created }.

questionIdstringrequired

The question.

namestringrequired

The option in a few words.

descriptionstring

What it implies, when the name is not enough.

update_option

Renames or describes an option, or marks it retained. Retaining one releases the others: a choice has one answer. Retaining here does not settle the question; record_decision does, and names the retained option itself.

optionIdstringrequired

From get_question, list_questions or load_dossier.

namestring

The new name.

descriptionstring

The new description.

retainedboolean

true to retain it, false to release it.

delete_option

Removes an option from a question. The evidence filed under it stays on the question. Irreversible: your confirmation is asked through the client, unless confirmed is true because you already gave it in the conversation.

optionIdstringrequired

The option.

confirmedboolean

true when you already confirmed in the conversation.

delete_question

Deletes a question from a dossier. Its evidence stays in the dossier, unfiled; its options, its comments and its decision go with it. A question that stopped mattering is closed with resolve_question; only a question opened by mistake is deleted, and only when you say so. Your confirmation is asked through the client.

questionIdstringrequired

The question.

confirmedboolean

true when you already confirmed in the conversation.

add_comment

Leaves a remark on the dossier, on a question or on an entry: a doubt about a value, a note for a colleague, the reason a piece of evidence was set aside. A comment is signed by the connected user and is not evidence: what the norm says goes through save_finding. A signed-off dossier still takes comments.

dossierIdstringrequired

The dossier.

bodystringrequired

The comment.

questionIdstring

The question concerned, if any.

entryIdstring

The entry concerned, if any.

update_entry

Corrects a piece of evidence or a decision in place: its wording, its value, its confidence, or the citation when the wrong clause was cited. Only the fields given change; page: null clears the page. The kind and the question do not change here.

entryIdstringrequired

From get_question or load_dossier.

titlestring

The fact in one line.

detailstring

The reasoning.

valuestring

The value with its unit.

confidencestring

established, judgement or to_confirm.

normCodestring

The norm.

sectionPathstring

The section path.

pagenumber | null

The page. null clears it.

normEditionstring

The edition cited.

attach_entry

Files a piece of evidence under a question, and optionally under one of its options, or takes it out with questionId: null. This is how the "unclassified" pile of load_dossier empties: read it, find the question it answers, file it. A decision cannot be moved: it belongs to its question.

entryIdstringrequired

The entry.

questionIdstring | nullrequired

The question to file it under, or null to leave it unfiled.

optionIdstring | null

The option of that question the entry argues for, or null.


Limits

To bound a looping agent, without any of it being billed:

LimitValue
Dossiers per organisation200
Questions per dossier200
Options per question10
Entries per dossier500
Comments per dossier500

A signed-off dossier takes no further entries or edits. Comments stay open: closing a dossier is not the end of the conversation about it.


What Stratta does not do

The dossier documents your reasoning; it does not replace it. Stratta never concludes that a structure is compliant, and an agent must not write down an assumption you have not validated.