try-professional 0.1.0__py3-none-any.whl

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.
Files changed (129) hide show
  1. try_professional/__init__.py +3 -0
  2. try_professional/_playbooks/__init__.py +0 -0
  3. try_professional/_playbooks/ceo.md +38 -0
  4. try_professional/_playbooks/manager.md +27 -0
  5. try_professional/_playbooks/memory-and-skills.md +20 -0
  6. try_professional/_playbooks/staff.md +26 -0
  7. try_professional/_spec/__init__.py +1 -0
  8. try_professional/_spec/org-v1.schema.json +278 -0
  9. try_professional/_spec/role-v1.schema.json +122 -0
  10. try_professional/_templates/README.md +31 -0
  11. try_professional/_templates/ecommerce-store/template.yaml +114 -0
  12. try_professional/_templates/general-company/template.yaml +10 -0
  13. try_professional/_templates/marketing-agency/template.yaml +129 -0
  14. try_professional/_templates/saas-startup/template.yaml +114 -0
  15. try_professional/_templates/youtube-shorts-studio/template.yaml +174 -0
  16. try_professional/adapters/__init__.py +0 -0
  17. try_professional/adapters/api_runner/README.md +41 -0
  18. try_professional/adapters/api_runner/__init__.py +0 -0
  19. try_professional/adapters/api_runner/clients.py +324 -0
  20. try_professional/adapters/api_runner/prompts.py +220 -0
  21. try_professional/adapters/api_runner/runner.py +432 -0
  22. try_professional/adapters/api_runner/scripted.py +150 -0
  23. try_professional/adapters/api_runner/search.py +42 -0
  24. try_professional/adapters/api_runner/tools.py +314 -0
  25. try_professional/adapters/base.py +64 -0
  26. try_professional/adapters/mcp/README.md +96 -0
  27. try_professional/adapters/mcp/__init__.py +5 -0
  28. try_professional/adapters/mcp/claude_code.py +135 -0
  29. try_professional/adapters/mcp/server.py +178 -0
  30. try_professional/adapters/mcp/service.py +430 -0
  31. try_professional/adapters/template/README.md +37 -0
  32. try_professional/adapters/template/__init__.py +5 -0
  33. try_professional/adapters/template/adapter.py +84 -0
  34. try_professional/bench/__init__.py +0 -0
  35. try_professional/bench/retrieval/__init__.py +0 -0
  36. try_professional/bench/retrieval/evaluate.py +91 -0
  37. try_professional/bench/retrieval/loadout_eval.py +105 -0
  38. try_professional/bench/retrieval/loadout_fixture.yaml +83 -0
  39. try_professional/bench/retrieval/nonsense.yaml +22 -0
  40. try_professional/bench/retrieval/queries/ar.yaml +46 -0
  41. try_professional/bench/retrieval/queries/en.yaml +46 -0
  42. try_professional/bench/retrieval/queries/en_fresh.yaml +29 -0
  43. try_professional/bench/retrieval/queries/es.yaml +46 -0
  44. try_professional/bench/retrieval/queries/id.yaml +52 -0
  45. try_professional/bench/retrieval/queries/zh.yaml +46 -0
  46. try_professional/bench/retrieval/skills.yaml +83 -0
  47. try_professional/check_model.py +503 -0
  48. try_professional/cli.py +1264 -0
  49. try_professional/config.py +276 -0
  50. try_professional/core/__init__.py +1 -0
  51. try_professional/core/artifacts/__init__.py +65 -0
  52. try_professional/core/artifacts/models.py +437 -0
  53. try_professional/core/audit.py +115 -0
  54. try_professional/core/brief.py +137 -0
  55. try_professional/core/company.py +548 -0
  56. try_professional/core/deliverables.py +146 -0
  57. try_professional/core/gates.py +53 -0
  58. try_professional/core/ledger.py +83 -0
  59. try_professional/core/lock.py +97 -0
  60. try_professional/core/orchestrator.py +478 -0
  61. try_professional/core/pipeline/__init__.py +52 -0
  62. try_professional/core/pipeline/machine.py +1366 -0
  63. try_professional/core/pipeline/state.py +326 -0
  64. try_professional/core/ports.py +99 -0
  65. try_professional/generator/__init__.py +40 -0
  66. try_professional/generator/architect.py +267 -0
  67. try_professional/generator/compiler.py +328 -0
  68. try_professional/generator/estimate.py +136 -0
  69. try_professional/generator/flow.py +389 -0
  70. try_professional/generator/proposal.py +173 -0
  71. try_professional/generator/provision.py +414 -0
  72. try_professional/generator/pull.py +280 -0
  73. try_professional/generator/review.py +132 -0
  74. try_professional/generator/templates.py +148 -0
  75. try_professional/memory/__init__.py +35 -0
  76. try_professional/memory/backend.py +91 -0
  77. try_professional/memory/embed_service.py +207 -0
  78. try_professional/memory/embedding.py +141 -0
  79. try_professional/memory/gateway.py +138 -0
  80. try_professional/memory/settings.py +143 -0
  81. try_professional/org/__init__.py +24 -0
  82. try_professional/org/loader.py +267 -0
  83. try_professional/org/model.py +164 -0
  84. try_professional/org/policy.py +70 -0
  85. try_professional/packs/__init__.py +114 -0
  86. try_professional/packs/engineering/pack.yaml +12 -0
  87. try_professional/packs/engineering/roles/backend.yaml +41 -0
  88. try_professional/packs/engineering/roles/devops.yaml +41 -0
  89. try_professional/packs/engineering/roles/frontend.yaml +41 -0
  90. try_professional/packs/engineering/roles/qa.yaml +40 -0
  91. try_professional/packs/engineering/roles/tech-lead.yaml +45 -0
  92. try_professional/packs/executive/pack.yaml +7 -0
  93. try_professional/packs/executive/roles/ceo.yaml +44 -0
  94. try_professional/packs/executive/roles/chief-of-staff.yaml +40 -0
  95. try_professional/packs/finance/pack.yaml +8 -0
  96. try_professional/packs/finance/roles/finance-lead.yaml +40 -0
  97. try_professional/packs/legal/pack.yaml +9 -0
  98. try_professional/packs/legal/roles/compliance-reviewer.yaml +37 -0
  99. try_professional/packs/legal/roles/counsel.yaml +45 -0
  100. try_professional/packs/marketing/pack.yaml +11 -0
  101. try_professional/packs/marketing/roles/content-writer.yaml +38 -0
  102. try_professional/packs/marketing/roles/marketing-lead.yaml +41 -0
  103. try_professional/packs/marketing/roles/seo.yaml +36 -0
  104. try_professional/packs/marketing/roles/social.yaml +36 -0
  105. try_professional/packs/operations/pack.yaml +9 -0
  106. try_professional/packs/operations/roles/ops-lead.yaml +41 -0
  107. try_professional/packs/operations/roles/support.yaml +36 -0
  108. try_professional/packs/product/pack.yaml +9 -0
  109. try_professional/packs/product/roles/product-manager.yaml +41 -0
  110. try_professional/packs/product/roles/ux-researcher.yaml +37 -0
  111. try_professional/packs/research/pack.yaml +9 -0
  112. try_professional/packs/research/roles/analyst.yaml +37 -0
  113. try_professional/packs/research/roles/research-lead.yaml +39 -0
  114. try_professional/packs/sales/pack.yaml +9 -0
  115. try_professional/packs/sales/roles/proposal-writer.yaml +37 -0
  116. try_professional/packs/sales/roles/sales-lead.yaml +39 -0
  117. try_professional/playbooks.py +52 -0
  118. try_professional/resources.py +134 -0
  119. try_professional/skills/__init__.py +49 -0
  120. try_professional/skills/catalog.py +237 -0
  121. try_professional/skills/loadouts.py +504 -0
  122. try_professional/skills/proposals.py +41 -0
  123. try_professional/skills/rerank.py +412 -0
  124. try_professional/skills/supply.py +164 -0
  125. try_professional/skills/trade.py +110 -0
  126. try_professional-0.1.0.dist-info/METADATA +268 -0
  127. try_professional-0.1.0.dist-info/RECORD +129 -0
  128. try_professional-0.1.0.dist-info/WHEEL +4 -0
  129. try_professional-0.1.0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,3 @@
1
+ """Try Professional: a structured company of LLM agents."""
2
+
3
+ __version__ = "0.1.0"
File without changes
@@ -0,0 +1,38 @@
1
+ ---
2
+ playbook: ceo
3
+ version: 2
4
+ ---
5
+
6
+ # CEO playbook
7
+
8
+ How the root role runs every command, for any business. Only the current step's section reaches the model, so each one stays short.
9
+
10
+ ## intake
11
+
12
+ Understand the command first.
13
+ 1. Keep original_goal exactly as written. Restate it in one sentence. Record its language as user_language (a BCP 47 tag).
14
+ 2. Record constraints, and success criteria someone could check. Don't invent requirements.
15
+ 3. Set size. small: one department and one or two roles can do it. large: anything more. When unsure, choose large.
16
+ 4. If small, set route_department, and route_role if one role can do it alone, exactly as listed below.
17
+ Review happens automatically at either size.
18
+
19
+ ## plan
20
+
21
+ Use the fewest work packages that meet the command: one is often right.
22
+ 1. Activate only the departments it needs, with a reason for each.
23
+ 2. Give each package one owning department, checkable acceptance criteria, and its dependencies.
24
+ 3. Set token_budget: about 15000 for simple work, 40000 for hard work, within the run's limit.
25
+ 4. If it asks for a document or a plan, the work is to write it, not to build what it describes.
26
+ Don't plan review steps: QA and legal review happens automatically.
27
+
28
+ ## escalation
29
+
30
+ An item was escalated to you. Resume it with clear guidance, amend the plan, or abandon it. If it needs something this company can't reach, such as the web, don't wait for that: resume it, and have the work done without it, with those claims marked unverified for a person to check. Ask the person only if the decision is truly theirs, or no useful version of the work exists.
31
+
32
+ ## integrate
33
+
34
+ Assemble one deliverable from the approved work. Report on every success criterion, using its exact wording, with evidence. Say plainly what wasn't done. Write summary_in_user_language in the user's language, for someone who didn't see the work.
35
+
36
+ ## retrospective
37
+
38
+ Propose what the whole company should remember: rules, major decisions, and lessons across departments. A person approves each one, so propose few, and be specific. Leave out what only one team needs.
@@ -0,0 +1,27 @@
1
+ ---
2
+ playbook: manager
3
+ version: 3
4
+ ---
5
+
6
+ # Manager playbook
7
+
8
+ How a department head runs a work package, for any business. A head doing a task personally follows the staff playbook for it.
9
+
10
+ ## dispatch
11
+
12
+ Break this package into tasks a junior could do from the brief alone. Use the fewest: one is often right.
13
+ 1. Keep each task to one output and a few steps.
14
+ 2. Assign by the best fit of mission and skills, then by fewest open tasks. owner_role and output_type must come exactly from the list below.
15
+ 3. Write the brief: goal, context, inputs, expected_output, a checkable definition_of_done, and only the memory and skills that bear on it.
16
+ 4. Mark dependencies. Independent tasks may run in parallel.
17
+ 5. Decide any team lessons listed below: adopt_lessons or drop_lessons.
18
+ Don't add work that wasn't asked for, or review tasks: review is automatic.
19
+
20
+ ## review
21
+
22
+ Review the artifact against its definition of done and the goal. Don't rely on its evidence. Check it yourself: redo every sum, compare each fact with the brief, read all of it for language, and count any limit.
23
+ A claim of fact that the brief doesn't support and no source backs is at least major, however small or plausible. Major and blocker issues mean you send it back. Approve only what you checked. Say what's wrong, where, and what done looks like.
24
+
25
+ ## escalation
26
+
27
+ A report escalated this. Resume it with specific guidance if you can. If it needs something this company can't reach, such as the web, have the work done without it, with those claims marked unverified for a person to check. Otherwise escalate further, and say what you tried.
@@ -0,0 +1,20 @@
1
+ ---
2
+ playbook: memory-and-skills
3
+ version: 1
4
+ ---
5
+
6
+ # Memory and skill policy
7
+
8
+ What each level retrieves, and when. Code enforces the limits: a brief has a token budget, a task's memory is a few top hits from each tier, and a whole memory bank never reaches a prompt.
9
+
10
+ ## ceo
11
+
12
+ Recall memory only for a specific question.
13
+
14
+ ## manager
15
+
16
+ Recall memory only for a specific question.
17
+
18
+ ## staff
19
+
20
+ Recall memory only for a specific question. memory_write is private to you: save only what you'd want next time.
@@ -0,0 +1,26 @@
1
+ ---
2
+ playbook: staff
3
+ version: 3
4
+ ---
5
+
6
+ # Staff playbook
7
+
8
+ How any role does and reviews a task, for any business.
9
+
10
+ ## execute
11
+
12
+ Do this task and submit the result.
13
+ 1. Your brief's goal, expected output and definition of done are the job. Don't add work.
14
+ 2. If a listed skill fits, read it first.
15
+ 3. Report every item of the definition of done in done_criteria_met, word for word, with evidence. Never claim what you didn't check.
16
+ 4. In notes, record what you did, any decision or promise, and a lesson for next time. Put a lesson for your whole team in team_lesson.
17
+ If something is missing, do what you can, and mark the rest unverified with what a person must check. Call escalate only if nothing useful can be done, and say what's missing.
18
+
19
+ ## review
20
+
21
+ Review the artifact against its definition of done and the goal. Don't rely on its evidence. Check it yourself: redo every sum, compare each fact with the brief, read all of it for language, and count any limit.
22
+ A claim of fact that the brief doesn't support and no source backs is at least major, however small or plausible. Major and blocker issues mean you send it back. Approve only what you checked. Say exactly what's wrong.
23
+
24
+ ## escalation
25
+
26
+ An item was escalated to you. Decide how to resolve it, or escalate it further.
@@ -0,0 +1 @@
1
+ """Packaged copies of the canonical schemas in spec/. A test keeps them identical."""
@@ -0,0 +1,278 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://raw.githubusercontent.com/goranai/try-professional/main/spec/org-v1.schema.json",
4
+ "title": "Organization definition, spec org/v1",
5
+ "type": "object",
6
+ "required": [
7
+ "spec",
8
+ "company",
9
+ "root_role",
10
+ "departments"
11
+ ],
12
+ "additionalProperties": false,
13
+ "patternProperties": {
14
+ "^x-": {}
15
+ },
16
+ "properties": {
17
+ "spec": {
18
+ "const": "org/v1"
19
+ },
20
+ "company": {
21
+ "type": "object",
22
+ "required": [
23
+ "name"
24
+ ],
25
+ "additionalProperties": false,
26
+ "patternProperties": {
27
+ "^x-": {}
28
+ },
29
+ "properties": {
30
+ "name": {
31
+ "type": "string",
32
+ "minLength": 1
33
+ },
34
+ "description": {
35
+ "type": "string"
36
+ },
37
+ "business": {
38
+ "type": "object",
39
+ "additionalProperties": false,
40
+ "properties": {
41
+ "industry": {
42
+ "type": "string"
43
+ },
44
+ "products": {
45
+ "type": "array",
46
+ "items": {
47
+ "type": "string"
48
+ }
49
+ },
50
+ "channels": {
51
+ "type": "array",
52
+ "items": {
53
+ "type": "string"
54
+ }
55
+ }
56
+ }
57
+ }
58
+ }
59
+ },
60
+ "root_role": {
61
+ "$ref": "#/$defs/role_ref"
62
+ },
63
+ "departments": {
64
+ "type": "array",
65
+ "minItems": 1,
66
+ "items": {
67
+ "$ref": "#/$defs/department"
68
+ }
69
+ },
70
+ "gates": {
71
+ "type": "object",
72
+ "additionalProperties": false,
73
+ "patternProperties": {
74
+ "^x-": {},
75
+ "^[a-z][a-z0-9-]*$": {
76
+ "$ref": "#/$defs/gate"
77
+ }
78
+ }
79
+ },
80
+ "pipeline": {
81
+ "$ref": "#/$defs/pipeline"
82
+ },
83
+ "llm_overrides": {
84
+ "description": "Per-department or per-role model settings. A role's fields win over its department's.",
85
+ "type": "object",
86
+ "additionalProperties": false,
87
+ "patternProperties": {
88
+ "^x-": {},
89
+ "^[a-z][a-z0-9-]*(/[a-z][a-z0-9-]*)?$": {
90
+ "$ref": "#/$defs/llm_override"
91
+ }
92
+ }
93
+ }
94
+ },
95
+ "$defs": {
96
+ "id": {
97
+ "type": "string",
98
+ "pattern": "^[a-z][a-z0-9-]*$"
99
+ },
100
+ "role_ref": {
101
+ "type": "string",
102
+ "pattern": "^[a-z][a-z0-9-]*/[a-z][a-z0-9-]*$"
103
+ },
104
+ "local_or_full_ref": {
105
+ "type": "string",
106
+ "pattern": "^[a-z][a-z0-9-]*(/[a-z][a-z0-9-]*)?$"
107
+ },
108
+ "flag": {
109
+ "enum": [
110
+ "public_facing",
111
+ "touches_license",
112
+ "touches_personal_data"
113
+ ]
114
+ },
115
+ "department": {
116
+ "type": "object",
117
+ "required": [
118
+ "id",
119
+ "head",
120
+ "roles"
121
+ ],
122
+ "additionalProperties": false,
123
+ "patternProperties": {
124
+ "^x-": {}
125
+ },
126
+ "properties": {
127
+ "id": {
128
+ "$ref": "#/$defs/id"
129
+ },
130
+ "name": {
131
+ "type": "string",
132
+ "minLength": 1
133
+ },
134
+ "head": {
135
+ "$ref": "#/$defs/id"
136
+ },
137
+ "activation": {
138
+ "enum": [
139
+ "always",
140
+ "on_demand"
141
+ ],
142
+ "default": "on_demand"
143
+ },
144
+ "qa_gate": {
145
+ "type": "object",
146
+ "required": [
147
+ "reviewer"
148
+ ],
149
+ "additionalProperties": false,
150
+ "properties": {
151
+ "reviewer": {
152
+ "$ref": "#/$defs/local_or_full_ref"
153
+ }
154
+ }
155
+ },
156
+ "roles": {
157
+ "type": "array",
158
+ "minItems": 1,
159
+ "items": {
160
+ "$ref": "#/$defs/id"
161
+ }
162
+ }
163
+ }
164
+ },
165
+ "gate": {
166
+ "type": "object",
167
+ "required": [
168
+ "reviewer",
169
+ "triggers"
170
+ ],
171
+ "additionalProperties": false,
172
+ "patternProperties": {
173
+ "^x-": {}
174
+ },
175
+ "properties": {
176
+ "reviewer": {
177
+ "$ref": "#/$defs/role_ref"
178
+ },
179
+ "triggers": {
180
+ "type": "array",
181
+ "minItems": 1,
182
+ "items": {
183
+ "$ref": "#/$defs/flag"
184
+ }
185
+ },
186
+ "on_unavailable": {
187
+ "enum": [
188
+ "block",
189
+ "waive"
190
+ ],
191
+ "default": "block"
192
+ }
193
+ }
194
+ },
195
+ "pipeline": {
196
+ "type": "object",
197
+ "additionalProperties": false,
198
+ "patternProperties": {
199
+ "^x-": {}
200
+ },
201
+ "properties": {
202
+ "max_parallel_tasks": {
203
+ "type": "integer",
204
+ "minimum": 1,
205
+ "default": 4
206
+ },
207
+ "max_rework": {
208
+ "type": "integer",
209
+ "minimum": 0,
210
+ "default": 2
211
+ },
212
+ "max_invalid_outputs": {
213
+ "type": "integer",
214
+ "minimum": 0,
215
+ "default": 2
216
+ },
217
+ "working_language": {
218
+ "type": "string",
219
+ "minLength": 1,
220
+ "default": "auto"
221
+ },
222
+ "budget": {
223
+ "type": "object",
224
+ "additionalProperties": false,
225
+ "properties": {
226
+ "max_tokens_per_small_command": {
227
+ "type": "integer",
228
+ "minimum": 1
229
+ },
230
+ "max_tokens_per_run": {
231
+ "type": [
232
+ "integer",
233
+ "null"
234
+ ],
235
+ "minimum": 1,
236
+ "default": null
237
+ },
238
+ "on_exceeded": {
239
+ "enum": [
240
+ "escalate"
241
+ ],
242
+ "default": "escalate"
243
+ }
244
+ }
245
+ }
246
+ }
247
+ },
248
+ "llm_override": {
249
+ "type": "object",
250
+ "minProperties": 1,
251
+ "additionalProperties": false,
252
+ "dependentRequired": {
253
+ "base_url": [
254
+ "api_key_env"
255
+ ]
256
+ },
257
+ "properties": {
258
+ "base_url": {
259
+ "type": "string",
260
+ "description": "Must be https, or http on this machine. Requires api_key_env, so a default key can't be sent to a new endpoint.",
261
+ "pattern": "^(https://[^\\s]+|http://(localhost|127\\.0\\.0\\.1)(:[0-9]+)?(/[^\\s]*)?)$"
262
+ },
263
+ "model": {
264
+ "type": "string",
265
+ "minLength": 1
266
+ },
267
+ "api_key_env": {
268
+ "description": "The NAME of an environment variable, never the key itself. null means no key.",
269
+ "type": [
270
+ "string",
271
+ "null"
272
+ ],
273
+ "pattern": "^[A-Z][A-Z0-9_]*$"
274
+ }
275
+ }
276
+ }
277
+ }
278
+ }
@@ -0,0 +1,122 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://raw.githubusercontent.com/goranai/try-professional/main/spec/role-v1.schema.json",
4
+ "title": "Role definition, spec role/v1",
5
+ "type": "object",
6
+ "required": [
7
+ "spec",
8
+ "id",
9
+ "department",
10
+ "mission",
11
+ "responsibilities",
12
+ "inputs",
13
+ "outputs",
14
+ "allowed_tools",
15
+ "allowed_skill_categories",
16
+ "escalation",
17
+ "reviewer",
18
+ "system_prompt"
19
+ ],
20
+ "additionalProperties": false,
21
+ "patternProperties": {
22
+ "^x-": {}
23
+ },
24
+ "properties": {
25
+ "spec": {
26
+ "const": "role/v1"
27
+ },
28
+ "id": {
29
+ "$ref": "#/$defs/id"
30
+ },
31
+ "title": {
32
+ "type": "string",
33
+ "minLength": 1,
34
+ "maxLength": 60,
35
+ "description": "What people call this role, such as CTO. Changes no permission."
36
+ },
37
+ "department": {
38
+ "$ref": "#/$defs/id"
39
+ },
40
+ "mission": {
41
+ "type": "string",
42
+ "minLength": 1
43
+ },
44
+ "responsibilities": {
45
+ "$ref": "#/$defs/strings"
46
+ },
47
+ "inputs": {
48
+ "$ref": "#/$defs/strings"
49
+ },
50
+ "outputs": {
51
+ "$ref": "#/$defs/strings"
52
+ },
53
+ "allowed_tools": {
54
+ "$ref": "#/$defs/strings"
55
+ },
56
+ "allowed_skill_categories": {
57
+ "$ref": "#/$defs/strings"
58
+ },
59
+ "escalation": {
60
+ "description": "A role reference, or the literal 'human' for the root role only.",
61
+ "oneOf": [
62
+ {
63
+ "$ref": "#/$defs/role_ref"
64
+ },
65
+ {
66
+ "const": "human"
67
+ }
68
+ ]
69
+ },
70
+ "reviewer": {
71
+ "$ref": "#/$defs/role_ref"
72
+ },
73
+ "model_tier": {
74
+ "enum": [
75
+ "executive",
76
+ "standard",
77
+ "fast"
78
+ ],
79
+ "default": "standard"
80
+ },
81
+ "system_prompt": {
82
+ "type": "string",
83
+ "minLength": 1
84
+ },
85
+ "skill_needs": {
86
+ "description": "Short descriptions of the capabilities this role's skills should provide.",
87
+ "$ref": "#/$defs/strings"
88
+ },
89
+ "required_tools": {
90
+ "description": "Tools this role can't work without. Must be a subset of allowed_tools.",
91
+ "$ref": "#/$defs/strings"
92
+ },
93
+ "forbidden_tools": {
94
+ "description": "A skill that needs any of these is never matched to this role.",
95
+ "$ref": "#/$defs/strings"
96
+ },
97
+ "max_skills": {
98
+ "description": "Most skills this role's loadout may hold.",
99
+ "type": "integer",
100
+ "minimum": 1,
101
+ "maximum": 50,
102
+ "default": 8
103
+ }
104
+ },
105
+ "$defs": {
106
+ "id": {
107
+ "type": "string",
108
+ "pattern": "^[a-z][a-z0-9-]*$"
109
+ },
110
+ "role_ref": {
111
+ "type": "string",
112
+ "pattern": "^[a-z][a-z0-9-]*/[a-z][a-z0-9-]*$"
113
+ },
114
+ "strings": {
115
+ "type": "array",
116
+ "items": {
117
+ "type": "string",
118
+ "minLength": 1
119
+ }
120
+ }
121
+ }
122
+ }
@@ -0,0 +1,31 @@
1
+ # Industry templates
2
+
3
+ A template is where `trypro init "<business>"` starts. The Org Architect picks the closest one and adapts it. **Adding an industry is a good first contribution.**
4
+
5
+ ## Add one
6
+
7
+ Create `templates/<your-id>/template.yaml`. Copy `youtube-shorts-studio` and change it. Then run:
8
+
9
+ ```bash
10
+ python scripts/generate_schemas.py # copies it into the package
11
+ pytest packages/try-professional/tests/test_generator.py -k "Templates"
12
+ ```
13
+
14
+ A test compiles every template, checks it against the spec and company policy, and runs a whole company through it with no model.
15
+
16
+ ## What goes in it
17
+
18
+ | Field | What it's for |
19
+ |---|---|
20
+ | `id`, `name`, `description` | What it is |
21
+ | `examples` | Businesses it suits. Used to choose a template locally, so add a few, including in other languages |
22
+ | `departments` | The departments doing the work, each with one role of `kind: head` |
23
+
24
+ **Leave out Executive, Legal, and QA.** Every company gets them. You also can't set tools, gates, budgets, escalation, or model settings: a role's `kind` decides its tools, and a template can't express the rest. That keeps templates safe to accept from anyone.
25
+
26
+ ## Writing good roles
27
+
28
+ - **Keep it small.** Every role adds tokens on every run. Prefer 10 to 15 roles of your own.
29
+ - **`skill_needs` find skills.** Use short, concrete, English phrases, such as `write a video hook`. Vague ones find nothing.
30
+ - **Say what a role can't do.** The company produces files in v0.1. An editor writes edit notes, and doesn't edit video. It has no live data unless a person provides a file.
31
+ - **Outputs:** `PublicContent`, `ResearchReport`, `TaskReport`, or `CodeChange`. Roles that output `ResearchReport` follow the rule on current claims, and can use web search if it's on.
@@ -0,0 +1,114 @@
1
+ # Executive, Legal, and QA are added to every company, so they aren't listed.
2
+ id: ecommerce-store
3
+ name: E-commerce store
4
+ description: An online store that sources products, writes listings, markets them, and looks after customers.
5
+ examples:
6
+ - an online store selling handmade goods
7
+ - a dropshipping business
8
+ - a marketplace seller on Shopee or Amazon
9
+ - toko online yang menjual produk rumahan
10
+ departments:
11
+ - id: merchandising
12
+ name: Merchandising
13
+ roles:
14
+ - id: merchandising-lead
15
+ name: Head of Merchandising
16
+ kind: head
17
+ mission: Decide what the store sells, and how it's presented.
18
+ responsibilities:
19
+ - Choose products from research
20
+ - Review product listings
21
+ skill_needs:
22
+ - plan a product assortment
23
+ - review product listings
24
+ skill_categories: [strategy, ecommerce]
25
+ outputs: [TaskReport]
26
+ instructions: Say what evidence supports a product choice. Price and margin figures must come from files a person provides.
27
+ - id: product-researcher
28
+ name: Product Researcher
29
+ kind: worker
30
+ mission: Find out what shoppers want, and what competitors offer.
31
+ responsibilities:
32
+ - Research products and competitors
33
+ - Record a source and date for each claim
34
+ skill_needs:
35
+ - research products and market demand
36
+ - compare competitor products
37
+ skill_categories: [research, ecommerce]
38
+ outputs: [ResearchReport]
39
+ instructions: Report what sources say. Label anything without a source as unverified.
40
+ - id: listing-writer
41
+ name: Listing Writer
42
+ kind: worker
43
+ mission: Write product listings that are accurate and easy to buy from.
44
+ responsibilities:
45
+ - Write titles, descriptions, and specifications
46
+ - Flag any claim that needs proof
47
+ skill_needs:
48
+ - write product descriptions
49
+ - write marketplace listings
50
+ skill_categories: [copywriting, ecommerce]
51
+ outputs: [PublicContent]
52
+ instructions: Describe only what the product really is. Never invent materials, certifications, or reviews.
53
+ - id: marketing
54
+ name: Marketing
55
+ roles:
56
+ - id: marketing-lead
57
+ name: CMO
58
+ kind: head
59
+ mission: Bring in shoppers without misleading them.
60
+ responsibilities:
61
+ - Plan campaigns and promotions
62
+ - Review public content
63
+ skill_needs:
64
+ - plan marketing campaigns
65
+ - plan seasonal promotions
66
+ skill_categories: [marketing, strategy]
67
+ outputs: [TaskReport, PublicContent]
68
+ instructions: Every public claim needs a source. Discounts and deadlines must be real.
69
+ - id: campaign-writer
70
+ name: Campaign Writer
71
+ kind: worker
72
+ mission: Write email, social, and ad copy.
73
+ responsibilities:
74
+ - Write campaign copy for each channel
75
+ - List a source for each factual claim
76
+ skill_needs:
77
+ - write email marketing campaigns
78
+ - write social media posts
79
+ - write ad copy
80
+ skill_categories: [copywriting, social-media]
81
+ outputs: [PublicContent]
82
+ instructions: Write in the shopper's language. This company doesn't send or post anything. A person does.
83
+ - id: customer-care
84
+ name: Customer Care
85
+ roles:
86
+ - id: care-lead
87
+ name: Head of Customer Care
88
+ kind: head
89
+ mission: Make sure shoppers get clear answers and fair treatment.
90
+ responsibilities:
91
+ - Write support replies and policies
92
+ - Report recurring complaints
93
+ skill_needs:
94
+ - write customer support replies
95
+ - write return and refund policies
96
+ skill_categories: [support, documentation]
97
+ outputs: [TaskReport, PublicContent]
98
+ instructions: Treat customer data as private. Policy text goes to Legal for review.
99
+ - id: operations
100
+ name: Operations
101
+ roles:
102
+ - id: operations-lead
103
+ name: COO
104
+ kind: head
105
+ mission: Keep stock and shipping predictable.
106
+ responsibilities:
107
+ - Write stock and fulfilment plans
108
+ - State assumptions behind each plan
109
+ skill_needs:
110
+ - plan inventory and stock
111
+ - write operations procedures
112
+ skill_categories: [operations, project-management]
113
+ outputs: [TaskReport]
114
+ instructions: You have no live stock data unless a person provides a file. Mark every assumption.
@@ -0,0 +1,10 @@
1
+ # The nine departments that ship as packs, so this has no departments of its own.
2
+ id: general-company
3
+ name: General company
4
+ description: A general-purpose company with product, engineering, marketing, sales, research, finance, and operations.
5
+ examples:
6
+ - a general business
7
+ - a company with several lines of work
8
+ - a professional services firm
9
+ - a small business that needs a bit of everything
10
+ source: packs