Data and files
Collections: the live data layer
Collections in table form, field types, adding records and bulk actions, stopping the same record being written twice, and turning a collection into a screen.
Collections are the live data layer where agent output accumulates and can be queried. Instead of text that stays in a chat window, you get structured records you can work on.
The Collections page
Collections in the left menu lists every collection in the workspace. Once the list gets crowded, three tools make it manageable:
- The search box filters collections by name and by their purpose text.
- The Sort box orders them by name (A→Z / Z→A), record count or creation date.
- A long list is paginated; the bar below it moves between pages.
All three are for your screen only and do not change your teammate's list.
Collection folders
You can split collections into folders, and this is optional too. If you never create a folder, the list stays flat as it is today.
- The New folder button creates a folder where you are. Folders sit at the top of the list; click one to go inside and use the path bar at the top to go back.
- Drag a collection onto a folder or onto a step of the path bar. If you would rather not drag, the Move to folder button on the row lets you pick the target folder from a list. Folders nest the same way.
- A collection you create while inside a folder lands in that folder.
- A folder is only for order. The collection's name and its
@collectionlink do not change. Deleting a folder does not delete the collections; they move out of the folder. - Search is not limited by folder. When you type a search every collection is searched, and each result row says which folder it sits in.
- Collection folders are separate from file folders; the folders of the Files screen do not appear here. They nest up to 5 levels deep, and a folder only holds collections of its own space.
- Agents use them too.
list_collectionsshows each collection's folder and the folder tree,create_collectioncreates a collection straight in a folder, andmove_to_foldermoves it. An agent names a folder by its path (for exampleSales/Leads) and does not delete folders.
Schemaless start, then structured mode
- Schemaless (quick) mode. Every collection starts with a minimum of "Title + Content". An agent can start writing immediately, without defining any schema.
- Structured mode. The moment you add a column, the collection turns into a full CRUD screen with a table, filters, sorting, pagination and export.
This order is deliberate. Getting the schema right up front is hard, and you see which fields you need once data starts to build up.
Field types
| Group | Types |
|---|---|
| Text | text (short) · textarea (long) · html (rich text) · url · email · phone |
| Number and date | number · currency (with a currency) · percent · rating (stars) · date · checkbox |
| Choice | enum (one value from a closed list) · tags (several, free-form) |
| Attachment and link | file (a document) · image (shows as a thumbnail) · user (a workspace member) · relation (records from another collection) |
| Generated | ai, where an agent produces the value |
A few distinctions are worth having.
enumversustagscomes down to "how many values". A record has one status (enum) and can have several topics (tags). While you type a tag, the ones you used before are suggested, so the same thing does not end up saved under two spellings. In the table and on cards the first three tags are shown and the rest fold into a "+N" badge; hover it to read them all. When the record is opened, every tag is laid out side by side.fileandimageare uploaded to the same place and read differently. Of a file you ask "which document", of an image "what does it look like". An image becomes a thumbnail in the table and gives the gallery view its cover.number,currency,percentandratingall store the same number. They differ in how it is written and totalled.- You choose how a
datefield is written. The default is30.01.2026. In the field settings you can pick30 January 2026,01.2026,January 2026or just2026— showing a day in a founding year is a detail nobody asked for. The choice changes only how the value reads; what is stored is always a full date, so sorting and filtering stay correct. You do not have to match the format while writing either:30.01.2026,30 January 2026and1998are all accepted and turned into a date. Values written by agents go through the same path.
While you add a field, extra settings appear depending on the type, such as decimal places, the currency, the number of stars, how the date is written, whether the time is kept along with it, and the target collection for a relation.
Changing the type of a field
The type can be changed later, but not blindly. When you press the type-change button next to the field on the Settings screen, you pick the new type and Orbi looks at the whole column and tells you how many values survive in the new type, how many will be emptied, and a few examples of the ones that will be emptied. If anything is lost, the conversion does not start until you tick the confirmation box.
The conversion carries over the values that can really be converted. "7,5" becomes a number and
"1.250,50 TRY" becomes an amount, while "abc" does not become a number and that cell is
emptied. When you move to a type with a choice list (single choice or tags), the list is built
from the existing values, so you do not have to type it out again.
Some fields do not convert, namely person, relation, file, image and the agent column. Their value is not a text but the identity of another record, and an identity turned into text has no way back.
Relation field
A relation field links a record to other records, answering questions like "which company
does this lead belong to" or "who is the customer for this deal". Once the link is made, you can
filter by that field.
The target can be the collection itself. When you want to link two records in the same collection, you pick that collection from the target list. The Turkish and the English record of one article, the parent of a record, or records related to each other are all linked this way. A record cannot link to itself, and it does not appear in its own picker. If you want the link to go both ways, fill in the field on both records, because Orbi does not write the reverse direction by itself.
Agents make the link by writing a mention such as @collection.companies.12. The system turns
it into the right record, and the agent does not have to learn anything new.
Required field
If you mark a field required, a record cannot be written with that field left empty. The rule holds for agents too, and it goes to them together with the schema.
There is no uniqueness rule. To stop the same record being written twice, the collection has its own duplicate protection setting, described below.
The agent column
You do not write the value of an ai field, an agent you pick produces it. As you add the
field, you write which agent will run and what it should produce.
"Looking at the company's name and industry, score how well this lead fits us from 0 to 100. Write only the number."
The agent sees the other fields on the row. Filling is started by hand. The ✨ above the cell does one row, and "Fill the visible rows" in the column menu does all the ones on screen. Doing it by hand is deliberate, because sending a whole table to a model without noticing spends credit for nothing. You can correct the value it produces afterwards.
Write down what a field is for
You can add a purpose description to every field (the pencil icon next to the field title). That description is what an agent uses when it decides what to write in the field.
For example, writing "A 1-2 sentence summary of the record, not the full content" for a
summary field stops the agent copying the whole article into it. One small sentence fixes a
repeating mistake for good.
CRUD and listing
- Agents and users add, update and delete records directly.
- Every record keeps its created and updated time and who updated it last. The two timestamps are always visible at the bottom of the record panel. To open them as columns in the table, pick them under Columns → Record details (Views, filters and the table). The updated time moves when the record itself is edited, whether one by one, in bulk, or when an agent column fills it in. Renaming a field, deleting one or converting its type are operations on the collection's structure, and they do not change the records' updated time.
- Every record carries a human-readable number inside the collection (
#42), and you can use it in a mention. - The list is server-side and offers search, filters, multi-key sorting and pagination. More in Views, filters and the table.
- If you delete a column, its values are cleared, and the interface asks first.
In the record modal you can move between neighbouring records with the ← and → keys and edit
the fields in place.
When a record is open, long text reads as formatted text: headings, lists, tables, quotes and
code appear the way they were written. In the table the same text stays on one plain line — there,
every row has to be the same height. If a record runs long, drag the small handle in the middle
of the drawer's left edge to widen it; it works from the keyboard too (with the handle selected, the
left and right arrows resize, Shift takes a bigger step and Home restores the default). The
width you choose is remembered, and a double-click restores the default.
Bulk actions and import/export
- Bulk delete and bulk update work on the selected records.
- Import runs from the Import / Export button in the screen header. Pick a CSV or an Excel (.xlsx) file (the first sheet is read for Excel); both are added by uploading a file, there is no text paste. The first row has to be the field names and each row becomes a record. Every import reserves a contiguous block of numbers, so the numbering does not get tangled.
- Export runs from the same dialog. Download the whole collection as CSV or Excel or save it straight to Files. The columns are the field names, and the output matches exactly what the import expects, so you can export it and load it back. If you also want the created and updated times, tick the box in the dialog. Those two columns are added at the end, and the file is then no longer an exact fit for import.
- A new collection from a file opens with the Create from CSV/Excel button on the Collections page. The first row becomes the field names, the field types (number, date, URL, text) are worked out automatically from the data in the columns, and the rows are imported as records.
Semantic duplicate prevention
This solves the most annoying problem in repeating automation, which is the same data being written a second time.
A classic "unique field" rule is not enough here. "Apple introduced the new iPhone" and "Apple's new iPhone was announced" are different texts but the same piece of news, and a text comparison does not catch that.
Orbi looks at similarity of meaning instead.
flowchart LR
A["The agent wants to write a record"] --> B["The record's embedding is produced"]
B --> C["Similarity comparison<br/>against the existing records"]
C --> D{"Is the threshold passed?"}
D -->|"yes"| E["Duplicate, the write is blocked"]
D -->|"no"| F["The record is written"]
E -.->|"force_write"| F
The setting is yours to manage. Under Duplicate protection on the collection's Settings screen you can turn the protection off or choose how tight it is. The options are Loose, Normal and Strict. The tighter the protection, the more records are blocked. Loose stops only near-identical records, while Strict stops records that are merely close in subject as well. To decide how tight it should be, look at a single question. Can this collection hold records that are similar but different? If there are legitimate similarities, such as two platform versions of the same post, a strict setting blocks them too, so pick loose there. For anyone who wants finer control, the threshold value is open as well. The higher the threshold, the looser the protection, because a write is blocked only when the similarity passes it.
You pick which field the comparison looks at in the same place. Only text fields are listed, because the comparison looks at the meaning of the text.
- Embeddings are produced server-side with Ollama, and no API key is needed for it.
- An HNSW index speeds up the vector search, so it does not slow down as the collection grows.
- When a record is updated, its embedding is updated automatically.
- The check is built into the
write_recordtool, so an agent cannot "forget" this step. - If an agent decides it really does have to write a similar but different record, it can pass
deliberately with
force_write.
Source URLs cannot be fabricated
When an agent does research and cites a source, the address it gives has to actually exist. A language model can also produce an address it never saw, and such an address reads perfectly well, because the domain is familiar and the format is tidy.
Orbi solves this with a gate rather than a rule. Across a run, the addresses appearing in every text the agent did not write itself are collected. That covers what you wrote in the task text and in your comments, plus the results the search and page-reading tools returned. If the agent tries to write an address that is not on that list, the write does not happen. It sees the error and either finds and copies the real address, or writes the source it actually read, or drops the link and says what is missing in its output.
In practice this means that when an agent saves a piece of news confirmed by two sources, it shows the source it opened and read, not the better-known publication it did not read and only knows by name.
The check runs not only on a source field but on every text the agent leaves behind for good.
- Every field of a collection record, including a link buried inside a text such as
summary - Task comments, deliverables, the descriptions of the tasks it opens and step summaries
- The content of the files it writes and its channel posts
There are a few details worth knowing.
- This is not a uniqueness rule. You can keep the same address in as many records as you like, and the only thing looked at is whether the agent really saw that address.
- The comparison looks at the meaningful part of the address. A
www.prefix, a trailing/and anything after a#make no difference. What comes after a question mark is kept, because it can point to a different page. - The check is only for agent writes. Nothing like it runs when you type an address in by hand or bring one in through an import.
- Whether the address opens at that moment is not looked at. The question is not "is this page up", it is "did you really see this address somewhere".
- Example addresses (
example.com) and local addresses (localhost) do not count as a source claim and are free. Domain names that appear in prose withouthttps://are not checked either.
Turning a collection into an app screen
A collection can be added to the menu as a permanent app screen (Admin only).
For example, the "Lead Generation" collection becomes a full mini-CRM screen with a list, editing, export and bulk actions. Agents keep writing to it, and your team uses it like a normal app.
Schema suggestion with AI is available too. Write "I want to track leads with name, email, company and status" and the schema is suggested for you.
How many screens you get depends on your plan, described in Plans and security.
Scope: project or workspace?
Collections can be per project or workspace-wide. The rule for deciding is simple.
- If the data belongs to one project and means nothing in another, pick project.
- If the data is shared across projects (a customer list, a brand guide, a glossary), pick workspace.
The scope can be changed later. Pick a project under Scope on the Settings screen, or leave it workspace-wide.
The Settings screen
Using a table and designing a table are different jobs, and the second one sits behind the Settings button in the screen header. You find these together there.
- General holds the name, the purpose description, the menu icon and the collection's mention address.
- Scope picks a project or workspace-wide.
- Duplicate protection holds the on/off state, how tight it is, and the compared field.
- Fields covers the order (by dragging the handle, or by focusing the handle and using the arrow keys), adding a field, editing, changing the type and deleting.
- Copy sends the collection's schema (fields and views) into a new collection using the Duplicate button; records are not moved, the copy is born empty. The same button also sits on the collection list rows.
- Cannot be undone is where deleting the collection lives.
Changing the field order here changes the order of the schema, and it applies to everyone. The column order in the table is separate, because that one belongs to the view you have open (Views, filters and the table).
File fields
You can put a file or an image into a file field. The interface renders each one correctly for
its type, so an image gets a preview, code gets highlighting and the rest get a download. For the
whole file system, see Files and artifacts.
Showing a collection to people outside the team
The Share button in the header bar of the collection screen lets anyone holding the link open the collection read-only in a browser. Every record, every column and every view is visible, and editing is off. For the details and the security notes, see External sharing.