Skip to content

Commit aff4981

Browse files
authored
Start a new deployment with two coworkers instead of twelve (#756)
The example package loaded every file in examples/fintech/agents/, so a fresh deployment opened with General Assistant, Knowledge and ten more coworkers at once. The ten move to examples/fintech/catalog/, which the loader does not read, and agents/ keeps a README saying how to copy one back in. A new deployment now starts with General Assistant and Knowledge; Risk Analyst and the picked harness still register only when their endpoints are configured. A test pins that default roster, so the package cannot quietly grow again: with the catalog copied back into agents/ it fails with ten extra coworkers. Existing deployments keep the ten. Package sync retires only remote coworkers with a blank endpoint, so a row dropped from the package stays listed and protected from delete. The changelog and configuration.md say so and say how to retire them.
1 parent 59e2889 commit aff4981

17 files changed

Lines changed: 82 additions & 18 deletions

‎CHANGELOG.md‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,20 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged.
88

99
## Unreleased
1010

11+
### A new deployment starts with two coworkers, not twelve
12+
13+
The example package loaded every coworker in `examples/fintech/agents/`, so a fresh deployment opened
14+
with General Assistant, Knowledge and ten more at once. The ten now live in `examples/fintech/catalog/`,
15+
which is not loaded, and a new deployment starts with General Assistant and Knowledge. Risk Analyst
16+
and the picked harness still register when their endpoints are configured. To keep any of the ten,
17+
copy its file from `catalog/` into `agents/`.
18+
19+
A deployment that already registered them keeps them. A coworker dropped from the package is not
20+
retired on the next boot: its row stays, still listed and still refused by delete as protected,
21+
because only a remote coworker with a blank endpoint is retired automatically. To remove the ten
22+
from such a deployment, set `deleted_at` on their `agent_profiles` rows after upgrading (see
23+
[configuration.md](docs/configuration.md#agents)).
24+
1125
## 0.1.2
1226

1327
### CopilotKit 1.77 and AG-UI 1.0

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ your own machine.
4646

4747
An agent platform that runs inside your own infrastructure. Docker Compose brings up every part of it, the data sits in your PostgreSQL, and the model is yours to choose: no model ships in the box, and an administrator supplies the credential, which is encrypted at rest and never logged.
4848

49-
Thirteen coworkers ship in the example package, and they are configuration rather than code: **General Assistant** for everyday work and **Knowledge** for company questions, a **Risk Analyst** reached as an endpoint, and ten in `examples/fintech/agents/` that each do one job — reading an expense claim against the policy as written, turning a meeting note into the follow-ups actually in it, drafting release notes from what shipped, triaging a ticket, answering a new starter from the handbook, writing a brief that names what it could not find, writing up an interview, handing an on-call shift over, assembling what is known before a renewal, and grouping customer feedback into themes it can cite. Add your own by dropping a file in that directory, by editing `agents.yaml`, or from `/agents` in the UI.
49+
A deployment starts with two coworkers, and they are configuration rather than code: **General Assistant** for everyday work and **Knowledge** for company questions. A **Risk Analyst** joins them once its endpoint is configured, and ten more wait in `examples/fintech/catalog/`, each doing one job — reading an expense claim against the policy as written, turning a meeting note into the follow-ups actually in it, drafting release notes from what shipped, triaging a ticket, answering a new starter from the handbook, writing a brief that names what it could not find, writing up an interview, handing an on-call shift over, assembling what is known before a renewal, and grouping customer feedback into themes it can cite. Copy one into `examples/fintech/agents/` to add it, write your own there or in `agents.yaml`, or make one from `/agents` in the UI.
5050

5151
Anything a Bot does to a computer, a file, an MCP server or a component goes through one gateway that decides and records it. That is the difference between an agent that can use your tools and an agent you can let near them.
5252

‎docs/configuration.md‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -831,7 +831,8 @@ examples/fintech/
831831
├── model.yaml
832832
├── knowledge.yaml
833833
├── skills.yaml (optional)
834-
└── agents/ (optional)
834+
├── agents/ (optional, one coworker per file)
835+
└── catalog/ (not loaded: coworkers to copy into agents/)
835836
└── expense-review.yaml
836837
```
837838

@@ -913,8 +914,12 @@ message saying which file wanted it, rather than leaving a Bot pointed at an add
913914
A coworker may also be one file of its own, in an `agents/` directory beside `agents.yaml`. Both are
914915
read, and a package that keeps every coworker in `agents.yaml` is unchanged.
915916

917+
The shipped package starts with two coworkers, General Assistant and Knowledge, both in `agents.yaml`.
918+
Its other two entries, Risk Analyst and the picked harness, register only when their endpoints are
919+
configured. Ten more are in `catalog/`, which is not read. Copy one into `agents/` to add it:
920+
916921
```yaml
917-
# examples/fintech/agents/expense-review.yaml
922+
# examples/fintech/agents/expense-review.yaml, copied from catalog/
918923
id: expense-review
919924
name: Expense Review
920925
title: Finance Operations
@@ -938,6 +943,12 @@ should not depend on what a directory listing happened to return.
938943
The directory is in the package checksum, so adding, editing or deleting a coworker there is a
939944
package change like any other and a running deployment notices it on the next boot.
940945

946+
**Deleting a file does not remove the Bot from a deployment that already registered it.** The next
947+
boot stops declaring it, but its row stays, still owned by the package, so it is still listed and
948+
still refused by delete as protected. Only a remote coworker whose `endpoint` is blank is retired
949+
automatically. Retire one that is gone from the package by setting `deleted_at` on its
950+
`agent_profiles` row, which is what delete does for a Bot somebody made.
951+
941952
### `channels.yaml`
942953

943954
```yaml

‎examples/fintech/agents/README.md‎

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,7 @@
33
A file in here declares one coworker, and the loader reads it alongside `../agents.yaml`. Both work,
44
and a package that keeps everything in `agents.yaml` is unchanged.
55

6-
The point of the directory is that a coworker becomes a thing you can handle: copy one in, delete
7-
one you do not want, send one to somebody. Nothing here is a grant. A coworker names skills, a skill
8-
names tools, and what it may actually call is what an administrator has granted it — so a file
9-
dropped in here adds an instruction and no capability.
10-
11-
These ten are meant to give you somewhere to start rather than to cover a matrix, and they are
12-
deliberately unlike each other: finance, meetings, releases, support, onboarding, research, hiring,
13-
reliability, procurement and product feedback. The part worth
14-
copying is the shape of `role_description`: it says what the job is, what the coworker must not do,
15-
and what to say when it cannot find something. A one-line description gets you a coworker that
16-
answers vaguely.
17-
18-
More of them, outside this repository and not inherited by your clone:
19-
[awesome-openbot-agents](https://github.com/jerelvelarde/awesome-openbot-agents).
6+
The package starts with two coworkers from `../agents.yaml`, General Assistant and Knowledge, so a
7+
fresh deployment opens on a short roster rather than a dozen Bots nobody asked for. Its other two
8+
entries register only when their endpoints are configured. To add one, copy a file in from
9+
[`../catalog`](../catalog), or write your own in the same shape. To remove one, delete its file.

‎examples/fintech/catalog/README.md‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Coworkers to copy in
2+
3+
Nothing in this directory is loaded. Each file declares one coworker, in the shape `../agents/`
4+
reads: copy a file into `../agents/` and the next start registers it. They used to load by
5+
default, which put a dozen Bots in front of every new deployment at once.
6+
7+
The point of one file per coworker is that a coworker becomes a thing you can handle: copy one in,
8+
delete one you do not want, send one to somebody. Nothing here is a grant. A coworker names skills,
9+
a skill names tools, and what it may actually call is what an administrator has granted it, so a
10+
file copied into `../agents/` adds an instruction and no capability.
11+
12+
These ten are meant to give you somewhere to start rather than to cover a matrix, and they are
13+
deliberately unlike each other: finance, meetings, releases, support, onboarding, research, hiring,
14+
reliability, procurement and product feedback. The part worth
15+
copying is the shape of `role_description`: it says what the job is, what the coworker must not do,
16+
and what to say when it cannot find something. A one-line description gets you a coworker that
17+
answers vaguely.
18+
19+
More of them, outside this repository and not inherited by your clone:
20+
[awesome-openbot-agents](https://github.com/jerelvelarde/awesome-openbot-agents).
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)