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.
- try_professional/__init__.py +3 -0
- try_professional/_playbooks/__init__.py +0 -0
- try_professional/_playbooks/ceo.md +38 -0
- try_professional/_playbooks/manager.md +27 -0
- try_professional/_playbooks/memory-and-skills.md +20 -0
- try_professional/_playbooks/staff.md +26 -0
- try_professional/_spec/__init__.py +1 -0
- try_professional/_spec/org-v1.schema.json +278 -0
- try_professional/_spec/role-v1.schema.json +122 -0
- try_professional/_templates/README.md +31 -0
- try_professional/_templates/ecommerce-store/template.yaml +114 -0
- try_professional/_templates/general-company/template.yaml +10 -0
- try_professional/_templates/marketing-agency/template.yaml +129 -0
- try_professional/_templates/saas-startup/template.yaml +114 -0
- try_professional/_templates/youtube-shorts-studio/template.yaml +174 -0
- try_professional/adapters/__init__.py +0 -0
- try_professional/adapters/api_runner/README.md +41 -0
- try_professional/adapters/api_runner/__init__.py +0 -0
- try_professional/adapters/api_runner/clients.py +324 -0
- try_professional/adapters/api_runner/prompts.py +220 -0
- try_professional/adapters/api_runner/runner.py +432 -0
- try_professional/adapters/api_runner/scripted.py +150 -0
- try_professional/adapters/api_runner/search.py +42 -0
- try_professional/adapters/api_runner/tools.py +314 -0
- try_professional/adapters/base.py +64 -0
- try_professional/adapters/mcp/README.md +96 -0
- try_professional/adapters/mcp/__init__.py +5 -0
- try_professional/adapters/mcp/claude_code.py +135 -0
- try_professional/adapters/mcp/server.py +178 -0
- try_professional/adapters/mcp/service.py +430 -0
- try_professional/adapters/template/README.md +37 -0
- try_professional/adapters/template/__init__.py +5 -0
- try_professional/adapters/template/adapter.py +84 -0
- try_professional/bench/__init__.py +0 -0
- try_professional/bench/retrieval/__init__.py +0 -0
- try_professional/bench/retrieval/evaluate.py +91 -0
- try_professional/bench/retrieval/loadout_eval.py +105 -0
- try_professional/bench/retrieval/loadout_fixture.yaml +83 -0
- try_professional/bench/retrieval/nonsense.yaml +22 -0
- try_professional/bench/retrieval/queries/ar.yaml +46 -0
- try_professional/bench/retrieval/queries/en.yaml +46 -0
- try_professional/bench/retrieval/queries/en_fresh.yaml +29 -0
- try_professional/bench/retrieval/queries/es.yaml +46 -0
- try_professional/bench/retrieval/queries/id.yaml +52 -0
- try_professional/bench/retrieval/queries/zh.yaml +46 -0
- try_professional/bench/retrieval/skills.yaml +83 -0
- try_professional/check_model.py +503 -0
- try_professional/cli.py +1264 -0
- try_professional/config.py +276 -0
- try_professional/core/__init__.py +1 -0
- try_professional/core/artifacts/__init__.py +65 -0
- try_professional/core/artifacts/models.py +437 -0
- try_professional/core/audit.py +115 -0
- try_professional/core/brief.py +137 -0
- try_professional/core/company.py +548 -0
- try_professional/core/deliverables.py +146 -0
- try_professional/core/gates.py +53 -0
- try_professional/core/ledger.py +83 -0
- try_professional/core/lock.py +97 -0
- try_professional/core/orchestrator.py +478 -0
- try_professional/core/pipeline/__init__.py +52 -0
- try_professional/core/pipeline/machine.py +1366 -0
- try_professional/core/pipeline/state.py +326 -0
- try_professional/core/ports.py +99 -0
- try_professional/generator/__init__.py +40 -0
- try_professional/generator/architect.py +267 -0
- try_professional/generator/compiler.py +328 -0
- try_professional/generator/estimate.py +136 -0
- try_professional/generator/flow.py +389 -0
- try_professional/generator/proposal.py +173 -0
- try_professional/generator/provision.py +414 -0
- try_professional/generator/pull.py +280 -0
- try_professional/generator/review.py +132 -0
- try_professional/generator/templates.py +148 -0
- try_professional/memory/__init__.py +35 -0
- try_professional/memory/backend.py +91 -0
- try_professional/memory/embed_service.py +207 -0
- try_professional/memory/embedding.py +141 -0
- try_professional/memory/gateway.py +138 -0
- try_professional/memory/settings.py +143 -0
- try_professional/org/__init__.py +24 -0
- try_professional/org/loader.py +267 -0
- try_professional/org/model.py +164 -0
- try_professional/org/policy.py +70 -0
- try_professional/packs/__init__.py +114 -0
- try_professional/packs/engineering/pack.yaml +12 -0
- try_professional/packs/engineering/roles/backend.yaml +41 -0
- try_professional/packs/engineering/roles/devops.yaml +41 -0
- try_professional/packs/engineering/roles/frontend.yaml +41 -0
- try_professional/packs/engineering/roles/qa.yaml +40 -0
- try_professional/packs/engineering/roles/tech-lead.yaml +45 -0
- try_professional/packs/executive/pack.yaml +7 -0
- try_professional/packs/executive/roles/ceo.yaml +44 -0
- try_professional/packs/executive/roles/chief-of-staff.yaml +40 -0
- try_professional/packs/finance/pack.yaml +8 -0
- try_professional/packs/finance/roles/finance-lead.yaml +40 -0
- try_professional/packs/legal/pack.yaml +9 -0
- try_professional/packs/legal/roles/compliance-reviewer.yaml +37 -0
- try_professional/packs/legal/roles/counsel.yaml +45 -0
- try_professional/packs/marketing/pack.yaml +11 -0
- try_professional/packs/marketing/roles/content-writer.yaml +38 -0
- try_professional/packs/marketing/roles/marketing-lead.yaml +41 -0
- try_professional/packs/marketing/roles/seo.yaml +36 -0
- try_professional/packs/marketing/roles/social.yaml +36 -0
- try_professional/packs/operations/pack.yaml +9 -0
- try_professional/packs/operations/roles/ops-lead.yaml +41 -0
- try_professional/packs/operations/roles/support.yaml +36 -0
- try_professional/packs/product/pack.yaml +9 -0
- try_professional/packs/product/roles/product-manager.yaml +41 -0
- try_professional/packs/product/roles/ux-researcher.yaml +37 -0
- try_professional/packs/research/pack.yaml +9 -0
- try_professional/packs/research/roles/analyst.yaml +37 -0
- try_professional/packs/research/roles/research-lead.yaml +39 -0
- try_professional/packs/sales/pack.yaml +9 -0
- try_professional/packs/sales/roles/proposal-writer.yaml +37 -0
- try_professional/packs/sales/roles/sales-lead.yaml +39 -0
- try_professional/playbooks.py +52 -0
- try_professional/resources.py +134 -0
- try_professional/skills/__init__.py +49 -0
- try_professional/skills/catalog.py +237 -0
- try_professional/skills/loadouts.py +504 -0
- try_professional/skills/proposals.py +41 -0
- try_professional/skills/rerank.py +412 -0
- try_professional/skills/supply.py +164 -0
- try_professional/skills/trade.py +110 -0
- try_professional-0.1.0.dist-info/METADATA +268 -0
- try_professional-0.1.0.dist-info/RECORD +129 -0
- try_professional-0.1.0.dist-info/WHEEL +4 -0
- try_professional-0.1.0.dist-info/entry_points.txt +2 -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
|