Companies
The unit of governance that owns your agents, work, budgets and audit trail.
A company is the container for everything in SAT. It has a name, a mission, a task key prefix and a monthly budget, and it owns its agents, goals, projects, tasks, runs, approvals, routines and activity log. People get access to a company through membership. Every company-scoped API path starts with /api/companies/{company_id}, and nothing in one company is visible from another.
How it works
- When you create a company you become its
owner. The API records acreatedentry in the company's activity log. - The mission is shown to agents: the runner puts it in every agent's system prompt ("Company mission: …").
- The task prefix forms task keys. With prefix
NF, tasks are numberedNF-1,NF-2and so on. Numbers come from a per-company counter, so they never repeat within a company. - The monthly budget is stored in integer cents;
0means no limit. The dashboard and the costs screen show company spend against it. - Membership is the only access check. A signed-in user who is not a member of a company gets
404 NOT_FOUNDfor every path under it, so company ids cannot be probed.
The company budget is not enforced
SAT pauses agents that reach their own monthly budget (see Budgets and costs). The company-level monthly_budget_cents is reported on the dashboard and costs screen, but no rule stops work when the company total is reached.
Members and roles
| Role | Who has it | What it adds |
|---|---|---|
owner | The user who created the company | Same powers as admin |
admin | Not assignable through the API yet | May change the company (PATCH /api/companies/{company_id}) |
member | Not assignable through the API yet | Everything else: hire agents, create tasks, decide approvals, and so on |
Only the company update endpoint checks the role. Every other company endpoint, including hiring, terminating agents and deciding approvals, is open to any member.
Fields
Returned by GET /api/companies and GET /api/companies/{company_id} (CompanyOut).
Prop
Type
Members (GET /api/companies/{company_id}/members, MemberOut):
Prop
Type
Use it
Create a company. Right after you sign up, SAT opens Start your company. Later, use New company in the company switcher at the top of the sidebar. Fill in:
- Company name, for example
NoteFlow. - Mission, for example "Build the #1 AI note-taking app and reach $1M ARR."
- Task prefix, for example
NF. The field upper-cases what you type. - Monthly budget (USD). Leave it empty for no limit.
Create company takes you to Agents with the hire dialog open.
Change a company. Open Settings. Owners and admins can edit name, mission and monthly budget; for other members the fields are read-only. Task prefix is always read-only ("Set when the company was created"). The Members section lists everyone with access, their role and when they joined.
Permissions
| Action | Who |
|---|---|
| Create a company | Any signed-in user |
| List companies | Returns only companies you are a member of |
| Read a company, list members | Any member |
| Update name, mission, budget | owner or admin; other members get 403 FORBIDDEN |
| Anything under the company | Any member; non-members get 404 NOT_FOUND |
Events
| Event | When |
|---|---|
company.updated | PATCH changed at least one field |
Creating a company writes an activity log entry but publishes no live event (nobody is subscribed to a company that did not exist yet).
Limits and known gaps
- Membership management is not available yet. There are no endpoints, CLI commands or screens to invite people, add or remove members, change a member's role or leave a company. A company has exactly one member, its owner, unless rows are added directly in the database.
- Deleting a company is not available yet.
task_prefixcannot be changed after creation, because existing task keys depend on it.- The company monthly budget is informational. Only agent budgets pause work.
- Name: 1 to 120 characters. Prefix: 1 to 8 characters, an uppercase letter followed by uppercase letters or digits. Validation errors return
422.