cofounder-crew 0.1.11 → 0.1.13

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/dist/src/setup.js CHANGED
@@ -15,11 +15,11 @@ export function formatCodexSetup(options = {}) {
15
15
 
16
16
  Preferred from npm registry:
17
17
 
18
- codex mcp add cofounder -- npx -y --package ${packageName} -- cofounder mcp
18
+ codex mcp add cofounder -- npx -y --package ${packageName} -- cofounder serve mcp
19
19
 
20
20
  After npm link or global install:
21
21
 
22
- codex mcp add cofounder -- cofounder mcp
22
+ codex mcp add cofounder -- cofounder serve mcp
23
23
 
24
24
  Direct checkout fallback after npm run build:
25
25
 
@@ -33,8 +33,11 @@ Then open Codex from a configured project:
33
33
  }
34
34
  export async function installCodexMcp(options = {}) {
35
35
  const packageName = options.packageName ?? DEFAULT_PUBLISHED_PACKAGE;
36
- const args = ["mcp", "add", "cofounder", "--", "npx", "-y", "--package", packageName, "--", "cofounder", "mcp"];
36
+ const args = ["mcp", "add", "cofounder", "--", "npx", "-y", "--package", packageName, "--", "cofounder", "serve", "mcp"];
37
37
  try {
38
+ await execFileAsync("codex", ["mcp", "remove", "cofounder"], {
39
+ maxBuffer: 10 * 1024 * 1024
40
+ }).catch(() => undefined);
38
41
  await execFileAsync("codex", args, {
39
42
  maxBuffer: 10 * 1024 * 1024
40
43
  });
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AAM1D,MAAM,UAAU,gBAAgB,CAAC,UAA6B,EAAE;IAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,yBAAyB,CAAC;IACrE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC9C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;QAC9D,CAAC,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,OAAO;;;;gDAIuC,WAAW;;;;;;;;oCAQvB,aAAa;;;;;;CAMhD,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA6B,EAAE;IACnE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,yBAAyB,CAAC;IACrE,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAChH,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC5B,CAAC,CAAC;QACH,OAAO,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,cAAc,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AAM1D,MAAM,UAAU,gBAAgB,CAAC,UAA6B,EAAE;IAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,yBAAyB,CAAC;IACrE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC9C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;QAC9D,CAAC,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,OAAO;;;;gDAIuC,WAAW;;;;;;;;oCAQvB,aAAa;;;;;;CAMhD,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA6B,EAAE;IACnE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,yBAAyB,CAAC;IACrE,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACzH,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE;YAC3D,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC5B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1B,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC5B,CAAC,CAAC;QACH,OAAO,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,cAAc,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { LoadedProject, MemberSettings } from "./types.js";
2
+ export type SkillMode = "inherit" | "none" | "allowlist" | "isolated";
3
+ export interface PreparedSkill {
4
+ id: string;
5
+ name: string;
6
+ description: string;
7
+ source: "from_project" | "from_main" | "team";
8
+ path: string;
9
+ materialized_path: string | null;
10
+ }
11
+ export interface PreparedSkills {
12
+ mode: SkillMode;
13
+ from_project: string[];
14
+ from_main: string[];
15
+ team: string[];
16
+ skills: PreparedSkill[];
17
+ disabled_project_skill_paths: string[];
18
+ requires_member_home: boolean;
19
+ agent_skill_root: string | null;
20
+ codex_skill_root: string | null;
21
+ }
22
+ export declare function prepareSkills(project: LoadedProject, settings: MemberSettings, memberHomeAbsolutePath: string | null): Promise<PreparedSkills>;
@@ -0,0 +1,283 @@
1
+ import { cp, mkdir, readdir, readFile, rm, stat, symlink, writeFile } from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { CofounderError } from "./errors.js";
5
+ import { pathExists } from "./paths.js";
6
+ export async function prepareSkills(project, settings, memberHomeAbsolutePath) {
7
+ const mode = normalizeSkillMode(settings);
8
+ const fromProject = settings.skills?.from_project ?? [];
9
+ const fromMain = settings.skills?.from_main ?? [];
10
+ const team = settings.skills?.team ?? [];
11
+ validateSkillSettings(mode, fromProject, fromMain, team);
12
+ if (mode === "inherit") {
13
+ return {
14
+ mode,
15
+ from_project: [],
16
+ from_main: [],
17
+ team: [],
18
+ skills: [],
19
+ disabled_project_skill_paths: [],
20
+ requires_member_home: false,
21
+ agent_skill_root: null,
22
+ codex_skill_root: null
23
+ };
24
+ }
25
+ if (!memberHomeAbsolutePath) {
26
+ throw new CofounderError(`skills.mode = "${mode}" requires a member home directory`);
27
+ }
28
+ const [projectSkillScope, mainSkills, teamSkills] = await Promise.all([
29
+ loadProjectSkillScope(project, fromProject),
30
+ mode === "none" ? [] : loadMainSkills(project, settings, fromMain),
31
+ loadTeamSkills(project, team)
32
+ ]);
33
+ const skills = [...projectSkillScope.skills, ...mainSkills, ...teamSkills];
34
+ const roots = await materializeSkills(project, memberHomeAbsolutePath, skills);
35
+ return {
36
+ mode,
37
+ from_project: fromProject,
38
+ from_main: fromMain,
39
+ team,
40
+ skills: skills.map((skill) => ({
41
+ ...skill,
42
+ materialized_path: skill.source === "from_project"
43
+ ? null
44
+ : path.relative(project.projectRoot, path.join(roots.agentSkillRoot, safeSkillFolderName(skill.id)))
45
+ })),
46
+ disabled_project_skill_paths: projectSkillScope.disabledSkillPaths,
47
+ requires_member_home: true,
48
+ agent_skill_root: path.relative(project.projectRoot, roots.agentSkillRoot),
49
+ codex_skill_root: path.relative(project.projectRoot, roots.codexSkillRoot)
50
+ };
51
+ }
52
+ function normalizeSkillMode(settings) {
53
+ if (!settings.skills?.mode &&
54
+ ((settings.skills?.from_project?.length ?? 0) > 0 ||
55
+ (settings.skills?.from_main?.length ?? 0) > 0 ||
56
+ (settings.skills?.team?.length ?? 0) > 0)) {
57
+ return "isolated";
58
+ }
59
+ return settings.skills?.mode ?? "inherit";
60
+ }
61
+ function validateSkillSettings(mode, fromProject, fromMain, team) {
62
+ if (!["inherit", "none", "allowlist", "isolated"].includes(mode)) {
63
+ throw new CofounderError(`Unsupported skill mode: ${mode}`);
64
+ }
65
+ if ((mode === "inherit" || mode === "none") && (fromProject.length > 0 || fromMain.length > 0 || team.length > 0)) {
66
+ throw new CofounderError(`skills.from_project, skills.from_main, and skills.team can only be used when skills.mode = "isolated" or "allowlist"`);
67
+ }
68
+ for (const skill of [...fromProject, ...fromMain, ...team]) {
69
+ if (!/^[A-Za-z0-9_.:-]+$/.test(skill) || skill === "." || skill === "..") {
70
+ throw new CofounderError(`Unsupported skill id: ${skill}`);
71
+ }
72
+ }
73
+ }
74
+ async function loadProjectSkillScope(project, requested) {
75
+ const candidates = await loadSkillCandidates(projectSkillRoots(project));
76
+ const selectedPaths = new Set();
77
+ const skills = requested.map((id) => {
78
+ const candidate = resolveSkillCandidate(candidates, id);
79
+ if (!candidate) {
80
+ throw new CofounderError(`Project skill not found: ${id}`);
81
+ }
82
+ selectedPaths.add(candidate.path);
83
+ return {
84
+ id,
85
+ name: candidate.name,
86
+ description: candidate.description,
87
+ source: "from_project",
88
+ path: candidate.path,
89
+ materialized_path: null
90
+ };
91
+ });
92
+ const disabledSkillPaths = uniqueSkillPaths(candidates)
93
+ .filter((skillPath) => !selectedPaths.has(skillPath));
94
+ return { skills, disabledSkillPaths };
95
+ }
96
+ async function loadMainSkills(project, settings, requested) {
97
+ if (requested.length === 0) {
98
+ return [];
99
+ }
100
+ const roots = (settings.skills?.roots ?? mainSkillRoots()).map((root) => resolveUserPath(root, project.projectRoot));
101
+ const candidates = await loadSkillCandidates(roots);
102
+ return requested.map((id) => {
103
+ const candidate = resolveSkillCandidate(candidates, id);
104
+ if (!candidate) {
105
+ throw new CofounderError(`Main skill not found: ${id}`);
106
+ }
107
+ return {
108
+ id,
109
+ name: candidate.name,
110
+ description: candidate.description,
111
+ source: "from_main",
112
+ path: candidate.path,
113
+ materialized_path: null
114
+ };
115
+ });
116
+ }
117
+ async function loadSkillCandidates(roots) {
118
+ const candidates = new Map();
119
+ for (const root of roots) {
120
+ if (!(await pathExists(root))) {
121
+ continue;
122
+ }
123
+ for (const candidate of await findSkillCandidates(root)) {
124
+ candidates.set(candidate.id, candidate);
125
+ candidates.set(candidate.name, candidate);
126
+ candidates.set(path.basename(path.dirname(candidate.path)), candidate);
127
+ if (candidate.name.includes(":")) {
128
+ candidates.set(candidate.name.split(":").at(-1) ?? candidate.name, candidate);
129
+ }
130
+ }
131
+ }
132
+ return candidates;
133
+ }
134
+ function resolveSkillCandidate(candidates, id) {
135
+ return candidates.get(id) ?? candidates.get(id.split(":").at(-1) ?? id);
136
+ }
137
+ async function loadTeamSkills(project, requested) {
138
+ const skills = [];
139
+ for (const id of requested) {
140
+ const skillPath = path.join(project.configRoot, "skills", id, "SKILL.md");
141
+ if (!(await pathExists(skillPath))) {
142
+ throw new CofounderError(`Team skill not found: .cofounder/skills/${id}/SKILL.md`);
143
+ }
144
+ const metadata = await readSkillMetadata(skillPath);
145
+ skills.push({
146
+ id,
147
+ name: metadata.name || id,
148
+ description: metadata.description,
149
+ source: "team",
150
+ path: skillPath,
151
+ materialized_path: null
152
+ });
153
+ }
154
+ return skills;
155
+ }
156
+ async function materializeSkills(project, memberHomeAbsolutePath, skills) {
157
+ const agentSkillRoot = path.join(memberHomeAbsolutePath, ".agents", "skills");
158
+ const codexSkillRoot = path.join(memberHomeAbsolutePath, "skills");
159
+ await resetDir(agentSkillRoot);
160
+ await resetDir(codexSkillRoot);
161
+ const seen = new Set();
162
+ for (const skill of skills) {
163
+ if (skill.source === "from_project") {
164
+ continue;
165
+ }
166
+ const folderName = safeSkillFolderName(skill.id);
167
+ if (seen.has(folderName)) {
168
+ throw new CofounderError(`Duplicate materialized skill folder: ${folderName}`);
169
+ }
170
+ seen.add(folderName);
171
+ const sourceDir = path.dirname(skill.path);
172
+ await linkSkillDirectory(sourceDir, path.join(agentSkillRoot, folderName));
173
+ await linkSkillDirectory(sourceDir, path.join(codexSkillRoot, folderName));
174
+ }
175
+ await writeSkillReadme(project, memberHomeAbsolutePath, skills);
176
+ return { agentSkillRoot, codexSkillRoot };
177
+ }
178
+ function uniqueSkillPaths(candidates) {
179
+ return Array.from(new Set(Array.from(candidates.values()).map((candidate) => candidate.path)));
180
+ }
181
+ async function resetDir(dir) {
182
+ await rm(dir, { recursive: true, force: true });
183
+ await mkdir(dir, { recursive: true });
184
+ }
185
+ async function linkSkillDirectory(sourceDir, targetDir) {
186
+ try {
187
+ await symlink(sourceDir, targetDir, "dir");
188
+ }
189
+ catch {
190
+ await cp(sourceDir, targetDir, { recursive: true });
191
+ }
192
+ }
193
+ async function writeSkillReadme(project, memberHomeAbsolutePath, skills) {
194
+ const lines = [
195
+ "# Cofounder Skill Scope",
196
+ "",
197
+ "Generated by Cofounder for this member runtime.",
198
+ "Codex discovers these skills natively from this member home at startup.",
199
+ ""
200
+ ];
201
+ if (skills.length === 0) {
202
+ lines.push("No Cofounder-managed skills are assigned to this member.");
203
+ }
204
+ else {
205
+ for (const skill of skills) {
206
+ lines.push(`- ${skill.id} (${skill.source}): ${path.relative(project.projectRoot, skill.path)}`);
207
+ }
208
+ }
209
+ const readmePath = path.join(memberHomeAbsolutePath, "skills.README.md");
210
+ await mkdir(path.dirname(readmePath), { recursive: true });
211
+ await writeFile(readmePath, `${lines.join("\n")}\n`, "utf8");
212
+ }
213
+ async function findSkillCandidates(root) {
214
+ const found = [];
215
+ await walk(root, async (filePath) => {
216
+ if (path.basename(filePath) !== "SKILL.md") {
217
+ return;
218
+ }
219
+ const metadata = await readSkillMetadata(filePath);
220
+ found.push({
221
+ id: metadata.name || path.basename(path.dirname(filePath)),
222
+ name: metadata.name || path.basename(path.dirname(filePath)),
223
+ description: metadata.description,
224
+ path: filePath
225
+ });
226
+ });
227
+ return found;
228
+ }
229
+ async function walk(dir, onFile) {
230
+ const entries = await readdir(dir, { withFileTypes: true });
231
+ for (const entry of entries) {
232
+ const filePath = path.join(dir, entry.name);
233
+ if (entry.isDirectory() || await isDirectorySymlink(filePath, entry.isSymbolicLink())) {
234
+ await walk(filePath, onFile);
235
+ }
236
+ else if (entry.isFile()) {
237
+ await onFile(filePath);
238
+ }
239
+ }
240
+ }
241
+ async function isDirectorySymlink(filePath, isSymlink) {
242
+ if (!isSymlink) {
243
+ return false;
244
+ }
245
+ try {
246
+ return (await stat(filePath)).isDirectory();
247
+ }
248
+ catch {
249
+ return false;
250
+ }
251
+ }
252
+ async function readSkillMetadata(skillPath) {
253
+ const raw = await readFile(skillPath, "utf8");
254
+ const frontmatter = /^---\s*\n([\s\S]*?)\n---/.exec(raw)?.[1] ?? raw.slice(0, 1200);
255
+ return {
256
+ name: frontmatter.match(/^name:\s*(.+)$/m)?.[1]?.trim() ?? "",
257
+ description: frontmatter.match(/^description:\s*(.+)$/m)?.[1]?.trim() ?? ""
258
+ };
259
+ }
260
+ function projectSkillRoots(project) {
261
+ return [path.join(project.projectRoot, ".agents", "skills")];
262
+ }
263
+ function mainSkillRoots() {
264
+ return [
265
+ path.join(os.homedir(), ".agents", "skills"),
266
+ "/etc/codex/skills",
267
+ path.join(os.homedir(), ".codex", "skills"),
268
+ path.join(os.homedir(), ".codex", "plugins", "cache")
269
+ ];
270
+ }
271
+ function safeSkillFolderName(value) {
272
+ return value.replace(/[^A-Za-z0-9_.-]/g, "_");
273
+ }
274
+ function resolveUserPath(filePath, baseDir) {
275
+ if (filePath === "~") {
276
+ return os.homedir();
277
+ }
278
+ if (filePath.startsWith("~/")) {
279
+ return path.join(os.homedir(), filePath.slice(2));
280
+ }
281
+ return path.isAbsolute(filePath) ? filePath : path.resolve(baseDir, filePath);
282
+ }
283
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/skills.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export interface ProjectTemplate {
6
6
  codexInstructions: string;
7
7
  projectInstructions: string;
8
8
  teamYaml: string;
9
+ mcp: Record<string, string>;
9
10
  prompts: Record<string, string>;
10
11
  settings: Record<string, string>;
11
12
  }
@@ -30,6 +30,9 @@ function buildTemplate(name, description, teamId, teamName, backendWriteMode) {
30
30
  codexInstructions: codexInstructions(),
31
31
  projectInstructions: projectInstructions(),
32
32
  teamYaml: teamYaml(teamId, teamName),
33
+ mcp: {
34
+ cofounder: cofounderMcp()
35
+ },
33
36
  prompts: Object.fromEntries(members.map((member) => [member, memberPrompt(member)])),
34
37
  settings: {
35
38
  lead: memberSettings("lead", "direct"),
@@ -38,6 +41,14 @@ function buildTemplate(name, description, teamId, teamName, backendWriteMode) {
38
41
  }
39
42
  };
40
43
  }
44
+ function cofounderMcp() {
45
+ return `command = "npx"
46
+ args = ["-y", "--package", "cofounder-crew", "--", "cofounder", "serve", "mcp"]
47
+ cwd = "{project_root}"
48
+ startup_timeout_sec = 20
49
+ tool_timeout_sec = 120
50
+ `;
51
+ }
41
52
  function codexInstructions() {
42
53
  return `# Cofounder Crew
43
54
 
@@ -72,12 +83,16 @@ Cofounder configuration lives in plain files:
72
83
  - .cofounder/team.yaml defines members, responsibilities, and delegation rules.
73
84
  - .cofounder/project.md defines shared project instructions for delegated teammates.
74
85
  - .cofounder/members/<member>/prompt.md defines each member's role instructions.
75
- - .cofounder/members/<member>/settings.toml defines model, sandbox, MCP, memory, and write-mode settings.
86
+ - .cofounder/members/<member>/settings.toml defines model, sandbox, MCP, native Codex skills, memory, and write-mode settings.
87
+ - .cofounder/mcp/<server>.toml defines project-owned MCP servers that can be assigned to specific members.
88
+ - .cofounder/skills/<skill>/SKILL.md defines project-owned skills that Cofounder links into assigned members' runtime homes for native Codex skill loading.
89
+ - .agents/skills/<skill>/SKILL.md defines normal project skills visible to the primary Codex session; assign selected ones to members with skills.from_project.
76
90
  - .cofounder/memory/ stores project and member memory notes.
77
91
  - .cofounder/runs/ stores task records, logs, prompts, and results.
78
92
  - .cofounder/.gitignore keeps generated runs, worktrees, and member runtime home files out of project diffs.
79
93
 
80
94
  When the team needs to change, edit these files directly and keep the structure simple.
95
+ Do not simulate member skills by pasting SKILL.md paths into delegated task prompts; assign them in settings.toml so Codex discovers them at startup.
81
96
 
82
97
  ## If Cofounder Tools Are Missing
83
98
 
@@ -95,7 +110,7 @@ function projectInstructions() {
95
110
 
96
111
  Cofounder did not find existing project rules to derive worker context from yet.
97
112
 
98
- When AGENTS.md contains project rules, run \`cofounder sync project\` to refresh this file automatically with worker-safe context.
113
+ When AGENTS.md contains project rules, run \`cofounder context sync\` to refresh this file automatically with worker-safe context.
99
114
 
100
115
  Worker-relevant project rules include:
101
116
 
@@ -207,7 +222,8 @@ Responsibilities:
207
222
  }
208
223
  function memberSettings(member, writeMode) {
209
224
  const effort = member === "reviewer" ? "medium" : "high";
210
- const mcpMode = member === "reviewer" ? "none" : "inherit";
225
+ const mcpMode = member === "reviewer" ? "none" : "isolated";
226
+ const mcpTeam = member === "reviewer" ? "[]" : "[\"cofounder\"]";
211
227
  return `model = "gpt-5.5"
212
228
  sandbox = "workspace-write"
213
229
  approval = "never"
@@ -219,7 +235,14 @@ mode = "${writeMode}"
219
235
 
220
236
  [mcp]
221
237
  mode = "${mcpMode}"
222
- allow = []
238
+ from_main = []
239
+ team = ${mcpTeam}
240
+
241
+ [skills]
242
+ mode = "isolated"
243
+ from_project = []
244
+ from_main = []
245
+ team = []
223
246
 
224
247
  [memory]
225
248
  project = true
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/templates.ts"],"names":[],"mappings":"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"}
@@ -44,11 +44,21 @@ export interface MemberSettings {
44
44
  mode?: WorkMode;
45
45
  };
46
46
  mcp?: {
47
- mode?: "inherit" | "none" | "allowlist";
47
+ mode?: "inherit" | "none" | "allowlist" | "isolated";
48
48
  allow?: string[];
49
+ from_main?: string[];
50
+ team?: string[];
49
51
  config_path?: string;
50
52
  include_inline_env?: boolean;
51
53
  };
54
+ skills?: {
55
+ mode?: "inherit" | "none" | "allowlist" | "isolated";
56
+ from_project?: string[];
57
+ from_main?: string[];
58
+ team?: string[];
59
+ roots?: string[];
60
+ max_bytes?: number;
61
+ };
52
62
  memory?: {
53
63
  project?: boolean;
54
64
  member?: boolean;
package/docs/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # Cofounder Crew Docs
2
+
3
+ These docs cover the details that should not live in the main README.
4
+
5
+ | Topic | Link |
6
+ | --- | --- |
7
+ | Codex bootstrap prompt | [prompts/bootstrap-codex.md](prompts/bootstrap-codex.md) |
8
+ | Team configuration, AGENTS.md, context, MCP, and skills | [configuration.md](configuration.md) |
9
+ | CLI commands | [cli.md](cli.md) |
10
+ | Delegation runtime, worktrees, logs, and interrupts | [runtime.md](runtime.md) |
11
+ | Practical examples | [examples.md](examples.md) |
12
+ | FAQ | [faq.md](faq.md) |
13
+ | Updating an existing project | [updating.md](updating.md) |
14
+ | Local development | [development.md](development.md) |
15
+ | Maintainer release flow | [releasing.md](releasing.md) |
package/docs/cli.md ADDED
@@ -0,0 +1,137 @@
1
+ # CLI
2
+
3
+ The CLI has two shapes:
4
+
5
+ - guided commands for humans
6
+ - deterministic commands for Codex, scripts, and CI
7
+
8
+ Run help:
9
+
10
+ ```bash
11
+ cofounder help
12
+ cofounder help member
13
+ cofounder help mcp
14
+ cofounder help skill
15
+ cofounder help task
16
+ ```
17
+
18
+ The default install is global:
19
+
20
+ ```bash
21
+ npm install -g cofounder-crew@latest
22
+ ```
23
+
24
+ If the global command is not available, prefix commands with:
25
+
26
+ ```bash
27
+ npx -y --package cofounder-crew -- cofounder
28
+ ```
29
+
30
+ ## Onboarding
31
+
32
+ ```bash
33
+ cofounder start
34
+ cofounder start --template worktree --setup-codex --yes
35
+ cofounder doctor
36
+ cofounder update --yes
37
+ cofounder pin
38
+ cofounder self update
39
+ ```
40
+
41
+ `start` initializes missing project files, checks the local setup, optionally installs the Codex MCP entry, and prints next steps.
42
+
43
+ `doctor` checks Node, npm, Codex, Git, `.cofounder/`, `AGENTS.md`, team config, runtime ignores, and the Codex MCP entry.
44
+
45
+ `update` repairs the Codex MCP entry by default and runs doctor for the current project. Use `--no-setup-codex` to skip MCP repair.
46
+
47
+ `pin` adds or updates `cofounder-crew` as a project-local dev dependency. This is optional and mainly useful when a repo wants to record a fixed Cofounder runtime.
48
+
49
+ `self update` updates the globally installed `cofounder` command.
50
+
51
+ ## Team
52
+
53
+ ```bash
54
+ cofounder team
55
+ cofounder member list
56
+ cofounder member show backend
57
+ cofounder member add designer --title "Product Designer" --model gpt-5.5 --write-mode worktree
58
+ cofounder member set designer --model gpt-5.5 --reasoning high --sandbox workspace-write
59
+ cofounder member remove designer
60
+ ```
61
+
62
+ ## MCP
63
+
64
+ ```bash
65
+ cofounder mcp list
66
+ cofounder mcp add pencil --url https://example.com/mcp --assign designer
67
+ cofounder mcp add local-tool --command node --arg ./mcp/server.js --cwd "{project_root}"
68
+ cofounder mcp assign github backend --source main
69
+ cofounder mcp remove pencil
70
+ ```
71
+
72
+ `--source team` assigns a project-owned MCP server from `.cofounder/mcp/`.
73
+
74
+ `--source main` assigns a selected MCP server from the primary Codex config.
75
+
76
+ ## Skills
77
+
78
+ ```bash
79
+ cofounder skill list
80
+ cofounder skill add api-workflow --scope project --assign backend
81
+ cofounder skill add design-review --scope team --assign designer
82
+ cofounder skill assign uncodixfy designer --scope main
83
+ cofounder skill remove design-review --scope team --delete-files
84
+ ```
85
+
86
+ Skill scopes:
87
+
88
+ | Scope | Location |
89
+ | --- | --- |
90
+ | `project` | `.agents/skills/` |
91
+ | `team` | `.cofounder/skills/` |
92
+ | `main` | Existing user/global skill roots |
93
+
94
+ ## Context
95
+
96
+ ```bash
97
+ cofounder context show
98
+ cofounder context mode auto
99
+ cofounder context mode manual
100
+ cofounder context sync
101
+ ```
102
+
103
+ Use `auto` for derived worker context from `AGENTS.md`. Use `manual` when `.cofounder/project.md` should be curated explicitly.
104
+
105
+ ## Tasks
106
+
107
+ ```bash
108
+ cofounder task run backend "inspect this repo"
109
+ cofounder task delegate backend "implement the focused change"
110
+ cofounder task list
111
+ cofounder task status <task_id>
112
+ cofounder task logs <task_id> --tail 80
113
+ cofounder task watch <task_id>
114
+ cofounder task result <task_id>
115
+ cofounder task diff <task_id>
116
+ cofounder task apply <task_id>
117
+ cofounder task cancel <task_id>
118
+ cofounder task interrupt <task_id> "new steering instructions"
119
+ ```
120
+
121
+ These are CLI fallbacks. The intended daily interface is Codex using the Cofounder MCP tools.
122
+
123
+ ## Codex MCP
124
+
125
+ Install or repair the MCP entry:
126
+
127
+ ```bash
128
+ cofounder setup codex --install
129
+ ```
130
+
131
+ Print setup commands:
132
+
133
+ ```bash
134
+ cofounder setup codex
135
+ ```
136
+
137
+ Restart Codex after changing MCP configuration.