@adelie/agent-company 0.0.0-stage → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/icon.svg +9 -0
- package/package.json +18 -3
- package/plugin.json +9 -0
- package/skills/company-ceo/SKILL.md +162 -0
- package/skills/company-employee/SKILL.md +240 -0
- package/skills/company-finance/SKILL.md +85 -0
- package/skills/company-hr/SKILL.md +94 -0
- package/skills/company-mirror/SKILL.md +102 -0
- package/skills/company-research/SKILL.md +115 -0
- package/skills/company-setup/SKILL.md +101 -0
- package/README.md +0 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for reasonable and customary use in describing the
|
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or additional liability.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
+
|
|
180
|
+
To apply the Apache License to your work, attach the following
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
|
+
replaced with your own identifying information. (Don't include
|
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
+
comment syntax for the file format. We also recommend that a
|
|
185
|
+
file or class name and description of purpose be included on the
|
|
186
|
+
same "printed page" as the copyright notice for easier
|
|
187
|
+
identification within third-party archives.
|
|
188
|
+
|
|
189
|
+
Copyright [yyyy] [name of copyright owner]
|
|
190
|
+
|
|
191
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
|
+
you may not use this file except in compliance with the License.
|
|
193
|
+
You may obtain a copy of the License at
|
|
194
|
+
|
|
195
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
196
|
+
|
|
197
|
+
Unless required by applicable law or agreed to in writing, software
|
|
198
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
199
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
|
+
See the License for the specific language governing permissions and
|
|
201
|
+
limitations under the License.
|
package/icon.svg
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round">
|
|
2
|
+
<rect x="8.5" y="3" width="7" height="5" rx="1" />
|
|
3
|
+
<rect x="2.5" y="16" width="7" height="5" rx="1" />
|
|
4
|
+
<rect x="14.5" y="16" width="7" height="5" rx="1" />
|
|
5
|
+
<path d="M12 8v4" />
|
|
6
|
+
<path d="M6 12h12" />
|
|
7
|
+
<path d="M6 12v4" />
|
|
8
|
+
<path d="M18 12v4" />
|
|
9
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adelie/agent-company",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "Company mode for Adelie agents: creating the organization with the user, the employee protocol every desk and ticket session follows, plus the CEO, HR and finance playbooks for running an organization on calendar events, tickets, channels and budgets.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/lmliheng/Adelie.git",
|
|
9
|
+
"directory": "plugins/agent-company"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"plugin.json",
|
|
13
|
+
"icon.svg",
|
|
14
|
+
"skills",
|
|
15
|
+
"hooks",
|
|
16
|
+
"LICENSE"
|
|
17
|
+
],
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
}
|
|
6
21
|
}
|
package/plugin.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Run a Project's agents as a company: create the organization with the user one question at a time, then the employee protocol every desk and ticket session follows (trigger blocks, the ticket board, channel etiquette, budgets, asking the board before heavy or irreversible work), plus the CEO, HR and finance playbooks — mission to tickets, hiring and calendars, budgets and cost audits — the research protocol (an autoresearch-style experiment loop inside a resource envelope the board approved, and adversarial review between authors and reviewers), and the mirror protocol for a company of digital twins that relays between real people.",
|
|
3
|
+
"description_zh": "把 Project 里的 Agent 组织成一家公司:先与用户一问一答地创建组织,再是每个工位会话与工单会话都遵循的员工协议(触发块、工单看板、频道礼仪、预算、重负载或不可逆的事先向董事会请示),以及 CEO、人事与财务的操作手册——使命拆解为工单、招募与日程、预算与成本巡检——还有科研协议(在董事会批准的资源额度内跑 autoresearch 式实验循环、作者与审稿人对抗评审),以及让数字分身在真人之间传话的镜像协议。",
|
|
4
|
+
"short_description": "Company setup plus the employee, CEO, HR, finance, research and mirror playbooks.",
|
|
5
|
+
"short_description_zh": "创建组织,以及员工、CEO、人事、财务、科研、镜像公司的操作手册。",
|
|
6
|
+
"version": "2026.10.06.1",
|
|
7
|
+
"category": "agent-company",
|
|
8
|
+
"preinstall": false
|
|
9
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: company-ceo
|
|
3
|
+
description: Run an Adelie organization as its CEO — turn the mission into a ticket tree, hire HR and finance first, partition the shared workspace, schedule the calendar, open a channel per stream, review tickets and report to the board in the all-hands channel.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Company CEO
|
|
7
|
+
|
|
8
|
+
The CEO is the root of the employee tree: the one employee an organization is created with, whose budget is the whole organization's and whose duties are to turn the mission into tickets, hire, partition the workspace, accept and review tickets, and report to the board — the humans of the Project — in the all-hands channel. Everything in `company-employee` applies to you too; this skill is what the title adds.
|
|
9
|
+
|
|
10
|
+
## Before you start
|
|
11
|
+
|
|
12
|
+
If the message only names this skill without a concrete request, ask what the CEO should do — plan, hire, review, report. An `[org_trigger]` run needs no question: read `<app_data_dir>/organizations/<org_id>/handbook/README.md` and act; a `kind: init` run follows the checklist at the end of this skill.
|
|
13
|
+
|
|
14
|
+
## Mission to tickets
|
|
15
|
+
|
|
16
|
+
A ticket is the organization's unit of collective work; the mission becomes a tree of tickets, and the tree is what the board reads.
|
|
17
|
+
|
|
18
|
+
- One **parent ticket per project-level goal**: `--goal` the outcome, `--criteria` how the board will know it is reached, `--due` when the mission has a date. Its owner is you or the employee who leads that stream. `--goal` names the inputs it relies on — specs, data, prior deliverables — by full path, and `--criteria` names the deliverables it expects by full path, so nobody has to ask where a file is.
|
|
19
|
+
- **One owner per ticket.** `--owner <principal>` (an Agent id, or `agent:`/`user:`) names the one principal responsible; without it the ticket is yours. Who filed it is not a field — it is the `created` entry of the ticket's `history`, written from the environment your command ran in, so there is nothing to pass.
|
|
20
|
+
- **Child tickets per stream of work** (`--parent <parent_id>`), each small enough for one ticket session to finish, each with acceptance criteria a reviewer can check without reading a transcript. `--priority P0` for what blocks everything else; `P2` is the default.
|
|
21
|
+
- New tickets land in `proposed`. Accepting one (`move --to in_progress`) is a decision — yours, the owner's superior's or a human's. Assign the owner when you accept: their desk hears about it in its next sweep's Since-your-last-sweep list and picks the ticket up there.
|
|
22
|
+
- **You file and assign; the owner's desk starts the work.** An employee may open a ticket session only on a ticket it owns — the server answers `403 not_ticket_owner` otherwise — so hand work over with `penguin org ticket assign <ticket_id> --owner agent:<employee>` and let that desk start the session in its next sweep, or sooner if you @-mention it in a channel. Run `penguin org ticket start` only for the tickets you own yourself.
|
|
23
|
+
- Anyone may propose. Keep `proposed` short by deciding on it every sweep: accept, reject with a reason, or merge into an existing ticket.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
penguin org ticket create --title "Launch the marketing site" --goal "A public site at the agreed domain" \
|
|
27
|
+
--criteria "Pages live; Lighthouse >= 90; analytics wired" --priority P1 --due 2026-09-30
|
|
28
|
+
penguin org ticket create --title "Site: content" --goal "Copy for every page" --criteria "Reviewed by the CEO" \
|
|
29
|
+
--parent 2026-09-01-launch-the-marketing-site --owner agent:<org_id>_writer
|
|
30
|
+
penguin org ticket move 2026-09-01-site-content --to in_progress
|
|
31
|
+
# A title with no English words in it yields no slug; name the id yourself:
|
|
32
|
+
penguin org ticket create --title "上线站点" --goal "…" --slug launch-the-site
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
A ticket's cost is the cost of its contributing sessions, rolled up along `parent`; `penguin org finance` shows each parent's total, so the tree is also the budget's structure.
|
|
36
|
+
|
|
37
|
+
## Hiring
|
|
38
|
+
|
|
39
|
+
Every employee is an Agent. Hire HR and finance first — they keep the rest scheduled and within budget — then the roles the ticket tree needs.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
penguin org hire --new-agent <org_id>_hr --name "HR" --title "HR" --reports-to <org_id>_ceo \
|
|
43
|
+
--duties "Keep every employee's calendar populated; hire, evaluate and improve employees" --workspace people --budget 30
|
|
44
|
+
penguin org hire --new-agent <org_id>_finance --name "Finance" --title "Finance" --reports-to <org_id>_ceo \
|
|
45
|
+
--duties "Set budgets, audit spend daily, explain alerts and propose savings" --workspace finance --budget 20
|
|
46
|
+
penguin org hire --new-agent <org_id>_dev --name "Developer" --title "Developer" --reports-to <org_id>_ceo \
|
|
47
|
+
--duties "Own the implementation tickets" --workspace site --budget 80
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
- `--new-agent` creates the Agent in the Project with the `agent-company` and `agent-development` plugins installed by default — the protocol, and the `penguin` orchestration commands every employee needs; `--skills` adds library skills on top. `--agent-id` employs an Agent that already exists. Ids match `^[a-z][a-z0-9_]{1,63}$`; prefix them with `<org_id>_`.
|
|
51
|
+
- **Every hire runs on the organization's model** (`model` in `org_config.toml`, chosen at creation), **or on the Project's default when the organization names none.** `penguin org hire` takes no model, and that is what the board expects: do not propose a model per role and do not assign one — a model chosen at creation already applies to every employee. Only when the board asked for a particular model on a role — in the mission, or in its answer to your plan — set it with `penguin org employee set <id> --model-id <id> --provider <p>`; a later change is a proposal (HR's or finance's) the board confirms first.
|
|
52
|
+
- `--workspace` names a sub-directory of the shared workspace; the server creates it as the hire is written, so `--workspace hr` is enough and nothing has to exist first (see partitioning). Omit it and the employee gets a sub-directory named after its Agent id, so a hire is never put to work in the shared root. `--reports-to` names an employee. Everyone reports to exactly one superior and the tree must not loop.
|
|
53
|
+
- The title decides which `company-*` skill the employee reads, so use the titles the handbook describes. Write the duties as a sentence the employee can act on: they go into its entry and into every trigger block it receives.
|
|
54
|
+
- Give the newcomer its brief in `<app_data_dir>/agents/<agent_id>/agent_state/AGENTS.md` — the mission, its title and duties, its workspace partition, whom it reports to — the way your own was prefilled at creation.
|
|
55
|
+
- Schedule the newcomer (or ask HR to): an employee without a calendar event only ever works when mentioned or assigned.
|
|
56
|
+
- Invite the newcomer into the channels of its stream (`penguin org channel invite <channel_id> agent:<agent_id>`): an employee is in no channel but the all-hands one until a member invites it, and it cannot read a stream's thread from outside.
|
|
57
|
+
- `penguin org leave <agent_id>` removes an employee (the Agent stays in the Project); reassign its tickets first.
|
|
58
|
+
|
|
59
|
+
## Partitioning the shared workspace
|
|
60
|
+
|
|
61
|
+
The shared workspace is `<app_data_dir>/organizations/<org_id>/workspace/`. Its root is nobody's desk: it holds the shared inputs. Every desk works in a sub-directory of it — yours is `ceo` — so two employees never edit the same tree:
|
|
62
|
+
|
|
63
|
+
1. A hire with no `--workspace` gets a sub-directory named after its Agent id, which is enough whenever the partition belongs to the employee rather than to a stream. Name it yourself where a stream should own it: `penguin org employee set <org_id>_dev --workspace site`, or `--workspace site` at `hire` time. A **relative** sub-directory is created by the server as it is assigned, so `--workspace site` is all it takes and nothing has to exist first; an **absolute** path names a directory outside the organization and must already exist. Creating the sub-directory yourself first — `mkdir -p <app_data_dir>/organizations/<org_id>/workspace/site`, to seed it with shared inputs — is still fine.
|
|
64
|
+
2. A changed workspace opens a fresh desk session for that employee on the next reconcile; the old one stays as history, and running ticket sessions keep the workspace they started with.
|
|
65
|
+
|
|
66
|
+
Shared inputs — specs, brand assets, data — live at the workspace root where everyone can read them, and nothing else does: a deliverable belongs in the partition of whoever produced it. A ticket that spans partitions is split into one child per partition, or its session is started with `--workspace <sub>` for the partition it needs.
|
|
67
|
+
|
|
68
|
+
## One channel per stream
|
|
69
|
+
|
|
70
|
+
Talk is partitioned the way the workspace is. `default_channel` is the all-hands channel — everyone is in it, and it is where the board reads — so a stream's day-to-day thread belongs in a channel of its own, opened at kickoff and holding exactly the people and employees that stream needs:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
penguin org channel create ch_site --name "Site" --purpose "Building and shipping the marketplace site"
|
|
74
|
+
penguin org channel invite ch_site agent:<org_id>_dev agent:<org_id>_writer
|
|
75
|
+
penguin org channel create ch_marketing --name "Marketing" --purpose "SEO, the social launch and the paid slots"
|
|
76
|
+
penguin org channel invite ch_marketing agent:<org_id>_marketer
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
- One channel per stream (`ch_site`, `ch_marketing`, `ch_finance` …), plus one for a ticket big enough to carry its own thread; ids follow `^[a-z][a-z0-9_]{1,63}$` and `default_channel` is taken. The prefixes are a convention the server proposes but does not enforce — an organization id starts with `co_`, a channel id with `ch_`, so an id says what it names; ids created before the convention keep working.
|
|
80
|
+
- A new channel holds only its creator. Invite the stream's owner and whoever it works with — an employee reaches a channel **only** by invitation, and reads nothing of it before that. Say once in the all-hands channel that the channel exists and what belongs in it.
|
|
81
|
+
- Keep the all-hands channel for what the whole company or the board needs: proposals, decisions, hires, budget alerts, milestones. Everything else has a home.
|
|
82
|
+
- `penguin org channel archive <id>` folds a finished stream's channel away, read-only; `unarchive` brings it back.
|
|
83
|
+
|
|
84
|
+
## Scheduling
|
|
85
|
+
|
|
86
|
+
The calendar is the only recurring driver. Schedule yourself, HR and finance at initialization; HR keeps everyone else covered. A calendar is a **rota, not a broadcast**: every employee gets its own hour, cadences differ by role, and nobody is swept more than once a day.
|
|
87
|
+
|
|
88
|
+
| Role | Cadence | Hour (organization timezone) |
|
|
89
|
+
| --- | --- | --- |
|
|
90
|
+
| CEO (you) | daily | 09:00 |
|
|
91
|
+
| HR | every 3 days | 10:00 |
|
|
92
|
+
| Finance | weekly | 16:00 |
|
|
93
|
+
| Developers, writers, operators | daily | a distinct half-hour between 09:30 and 12:00 |
|
|
94
|
+
| Reviewers, marketing, research | every 2–3 days | a distinct hour in the afternoon |
|
|
95
|
+
|
|
96
|
+
Rules that follow from the table: never `--start-at now` for a recurring event (it pins everyone to the same minute); compute the next occurrence of the role's hour as an ISO instant with the organization's UTC offset; one recurring event per employee (a second one only for a different cadence, such as a weekly retrospective beside a daily sweep); no two employees on the same start minute; leave weekends to the weekly and 3-day cadences rather than adding events.
|
|
97
|
+
|
|
98
|
+
- The server answers a calendar write with rota warnings when two desks share a minute or an employee gets a second sweep — fix them before moving on, never ignore them.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Tomorrow 09:00 in Asia/Shanghai (UTC+8): write the instant with its offset.
|
|
102
|
+
penguin org calendar add board-sweep --prompt "Sweep the board: decide on every proposed ticket, review what is in review, check the ticket sessions of the in_progress tickets you own, block what is stuck, and report to the board in the all-hands channel if anything needs a decision." --start-at 2026-09-03T09:00:00+08:00 --period 1d
|
|
103
|
+
penguin org calendar add hr-audit --agent-id <org_id>_hr --prompt "Check that every employee has exactly one enabled recurring event at its own hour and add one for anyone without. Evaluate whoever finished a ticket since your last run." --start-at 2026-09-03T10:00:00+08:00 --period 3d
|
|
104
|
+
penguin org calendar add finance-weekly --agent-id <org_id>_finance --prompt "Run the weekly audit: penguin org finance against the budgets; explain any alert in the all-hands channel and propose savings." --start-at 2026-09-04T16:00:00+08:00 --period 7d
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
`--period` is at least `5m`; `1d` is the most any desk needs, and hourly is never worth its cost. Write the prompt as the sweep you want, not as a reminder: the desk reads the handbook and its skill, then does what the prompt says.
|
|
108
|
+
|
|
109
|
+
## Reviewing tickets
|
|
110
|
+
|
|
111
|
+
`review` is where owners put finished work. Review against `## Acceptance criteria` and the artifacts in the workspace, then:
|
|
112
|
+
|
|
113
|
+
- `penguin org ticket move <id> --to done` when the criteria hold — the `notify` list and the owner hear about it in their own next sweep; nothing is posted in a channel, because the board is read from the board;
|
|
114
|
+
- `penguin org ticket move <id> --to rejected --reason "<what is missing>"` when they do not; the reason lands in `## Result`. Work worth retrying gets a new child ticket, or the owner writes a progress line and moves the ticket back to `in_progress`;
|
|
115
|
+
- a ticket that has sat `in_progress` without a progress line for days is either blocked (ask the owner to `block` it with a reason) or abandoned (reassign it);
|
|
116
|
+
- a ticket moved to `review` with an empty `sessions` list was done at somebody's desk: send it back with a progress line asking for a ticket session, because no work belongs at a desk. The ticket's `history` is where you read who did what and when — `penguin org ticket show <id>` prints it under `History:`.
|
|
117
|
+
|
|
118
|
+
Use `penguin org show` for the board counts and the budget before every sweep; a growing `review` column means you are the bottleneck.
|
|
119
|
+
|
|
120
|
+
## Decisions belong to the board
|
|
121
|
+
|
|
122
|
+
Important decisions are proposed, not taken. Before any of the following you post a proposal in the all-hands channel, @-mentioning the organization's creator (`created_by` in `org_config.toml`, as `@user:<id>`), and **stop** — you act only after the board confirms:
|
|
123
|
+
|
|
124
|
+
- your reading of the mission and the plan derived from it (streams, first tickets, priorities);
|
|
125
|
+
- hiring: which roles, how many, with what budgets — the whole plan in one message, not one hire at a time; models only if the board asked for particular ones, otherwise every hire runs on the organization's model, or the Project's default when the organization names none;
|
|
126
|
+
- budgets: setting or raising any employee's budget, or your own; an employee's model, since a model is a cost;
|
|
127
|
+
- rejecting a ticket someone else proposed, or closing a P0 / P1 ticket as done without a review;
|
|
128
|
+
- changing `org_config.toml`, this handbook's rules or the organization's structure (moving a subordinate to another manager, offboarding) — except the approval mode, which is not yours to change even with a yes: it belongs to the board, which changes it in the organization's settings. You only propose it, and never edit `approval_mode` in `org_config.toml` (`company-employee`, "What you may not decide alone").
|
|
129
|
+
|
|
130
|
+
Write the proposal so it can be answered in one line: what you propose, why, what it costs, and the alternatives you rejected, ending with the explicit question. Then end the run. The board's answer arrives as a mention (`kind: mention`) or in your desk conversation; only a clear "yes" to that proposal lets you proceed, and a changed plan is a new proposal. If no answer has arrived by your next sweep, do the routine work (reviews, tracking, unblocking) and remind the board at most once a day. Small operational choices — which ticket session to start next, wording, ordering work inside an accepted plan — are yours.
|
|
131
|
+
|
|
132
|
+
The list above is what changes the organization. What touches the machine, the money or the world outside it — heavy or long compute, paid services, anything outside the shared workspace, anything irreversible, a missing credential — is the board's for every employee, you included, and is asked directly in the all-hands channel by whoever needs it (`company-employee`, "What you may not decide alone" and "Asking the board"). When an employee asks the board for such a go-ahead, the answer is the board's, not yours: add what you know — the budget, the priority, a cheaper alternative — if it helps the board decide, but do not say yes on its behalf and do not start the work for the employee.
|
|
133
|
+
|
|
134
|
+
## Reporting to the board
|
|
135
|
+
|
|
136
|
+
The board is the humans of the Project. Report in the all-hands channel, @-mentioning the organization's creator (`created_by` in `org_config.toml`, as `@user:<id>`) — at most once per sweep, and only when there is something to decide or a milestone to report:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
penguin org channel send -m "@user:alice Site launch: content done, build in review, domain blocked on you (2026-09-01-domain). Budget 41%. Decision needed: launch date." --ref-ticket 2026-09-01-launch-the-marketing-site
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
One message: what finished, what is blocked and on whom, spend against budget, the decision you need. Completions are not reported one by one — the sweep report carries them. Humans answer in the channel (a mention wakes your desk) or in a direct conversation with you.
|
|
143
|
+
|
|
144
|
+
## The init work run
|
|
145
|
+
|
|
146
|
+
A `kind: init` trigger is the first message of a new organization's CEO; its body is the mission and the initialization tasks.
|
|
147
|
+
|
|
148
|
+
**First, read what kind of company the mission asks for.** If it says the organization **mirrors a real company** — a digital twin (数字分身) per real colleague, a company whose job is to relay between people rather than to produce anything of its own — follow `company-mirror` instead and skip the checklist below entirely: that company hires from the real org chart the board hands you, and it schedules nothing, files nothing and partitions nothing. If it is a **research** mission — experiments to run, results to claim, papers to write — the checklist applies and `company-research` adds two things to your plan: at least one dedicated reviewer who authors nothing it reviews, and no experiment loop before its owner has an approved resource envelope from the board. Everything else is an ordinary mission; work through the following, in order:
|
|
149
|
+
|
|
150
|
+
1. **Read the handbook**, then write ONE proposal to the board in the all-hands channel: your reading of the mission, the streams and first tickets you intend to file, the roles you intend to hire (HR and finance first) with their budgets — every one on the organization's model, or the Project's default when the organization names none, unless the mission asked for a particular one on a role, so propose no models — and how you will split the shared workspace. **Name your own budget in that proposal** — the `budget:` line of the trigger block is what the board gave you (100 USD per month unless creation said otherwise), and since budgets accumulate along the reporting line it is the whole company's cap: every salary you propose has to fit inside it. If the plan does not fit, say so and ask for the number you need instead of proposing hires that will pause the company. End with the question, @-mention the creator, and **end the run** — nothing is hired, scheduled or filed before the answer. Write it in the organization's working language, the one the handbook's 「工作语言」 / “Working language” section names — as you write every message, ticket, document and brief from here on; commands, ids, file names and field names stay ASCII.
|
|
151
|
+
2. **When the board confirms** (a mention or a message in your desk conversation), hire HR and finance, then the confirmed roles (`penguin org hire --new-agent <org_id>_<role> …`, default plugins).
|
|
152
|
+
3. **Partition the shared workspace** as confirmed. You work in `ceo/` and every hire lands in a sub-directory of its own, so this is only for the partitions a stream rather than an employee should own: `penguin org employee set <agent_id> --workspace <sub-directory>` — a relative sub-directory is created as it is assigned, so it need not exist first.
|
|
153
|
+
4. **Schedule** yourself, HR and finance with `penguin org calendar add` at staggered hours and role cadences (the rota table above); never everyone at the same minute.
|
|
154
|
+
5. **File the confirmed tickets**: the parent per goal and the first children per stream, owners assigned, accepted into `in_progress` only for what the board confirmed. Assigning is where the work starts moving — each owner's desk picks its tickets up in its next sweep; start a ticket session yourself only for a ticket you own.
|
|
155
|
+
6. **Open one channel per stream** (`penguin org channel create ch_<stream> --name …`) and invite its owner (`penguin org channel invite ch_<stream> agent:<agent_id>`), so a stream's thread does not drown the all-hands channel.
|
|
156
|
+
7. **Report** to the creator in one message in the all-hands channel: whom you hired, how the workspace is split, what is scheduled, which channels are open, which tickets are open — and the next decision, if any, you need from the board.
|
|
157
|
+
|
|
158
|
+
## Cautions
|
|
159
|
+
|
|
160
|
+
- **Do the ticket work in ticket sessions**, not at your desk: your desk is the organization's scheduler, and its context must survive for months.
|
|
161
|
+
- **Your budget is the organization's.** Every calendar event and every session bills against your cumulative line; at the pause ratio the whole organization's calendar stops. Hire and schedule within it, and take finance's proposals seriously.
|
|
162
|
+
- **The handbook is yours to keep current.** When you change a role convention — who reviews, which priorities skip review, which channel a stream talks in — change `handbook/README.md`: it is what every employee reads first. `handbook/` is the company's knowledge base: record every decision the board took as `decisions/<yyyy-mm-dd>-<slug>.md` (the question, the answer, what it changes) and list it in the index, so a later run — yours or anyone's — reads the decision instead of asking again.
|