@@ -121,6 +121,51 @@ export const renderEntrypointMcpPlaywright = (config: TemplateConfig): string =>
121121 . replaceAll ( "__CODEX_HOME__" , config . codexHome )
122122 . replaceAll ( "__SERVICE_NAME__" , config . serviceName )
123123
124+ const entrypointProjectCodexSkillsSyncTemplate = String . raw `# Mirror project-owned Codex skill trees into CODEX_HOME without overwriting global skills.
125+ docker_git_sync_project_codex_skills() {
126+ local codex_home="${ "$" } {CODEX_HOME:-__CODEX_HOME__}"
127+ local project_dir="${ "$" } {TARGET_DIR:-}"
128+ local project_skills_root="$codex_home/skills/.docker-git-project"
129+ local linked=0
130+ local spec=""
131+ local mount_name=""
132+ local relative_path=""
133+
134+ if [[ -z "$project_dir" || ! -d "$project_dir" ]]; then
135+ return 0
136+ fi
137+
138+ mkdir -p "$codex_home/skills"
139+ rm -rf "$project_skills_root"
140+ mkdir -p "$project_skills_root"
141+
142+ # Priority goes from generic/shared skill trees -> Codex-specific trees.
143+ for spec in \
144+ "10-root-skills::.skills" \
145+ "20-agents-skills::.agents/skills" \
146+ "30-agents-dot-skills::.agents/.skills" \
147+ "80-codex-skills::.codex/skills" \
148+ "90-codex-dot-skills::.codex/.skills"; do
149+ mount_name="${ "$" } {spec%%::*}"
150+ relative_path="${ "$" } {spec#*::}"
151+
152+ if [[ -d "$project_dir/$relative_path" ]]; then
153+ ln -sfn "$project_dir/$relative_path" "$project_skills_root/$mount_name"
154+ chown -h 1000:1000 "$project_skills_root/$mount_name" 2>/dev/null || true
155+ linked=1
156+ fi
157+ done
158+
159+ chown 1000:1000 "$codex_home/skills" "$project_skills_root" 2>/dev/null || true
160+
161+ if [[ "$linked" -eq 1 ]]; then
162+ echo "[codex-skills] linked project skill trees into $project_skills_root"
163+ fi
164+ }`
165+
166+ export const renderEntrypointProjectCodexSkillsSync = ( config : TemplateConfig ) : string =>
167+ entrypointProjectCodexSkillsSyncTemplate . replaceAll ( "__CODEX_HOME__" , config . codexHome )
168+
124169const entrypointAgentsNoticeTemplate = String . raw `# Ensure global AGENTS.md exists for container context
125170AGENTS_PATH="__CODEX_HOME__/AGENTS.md"
126171LEGACY_AGENTS_PATH="/home/__SSH_USER__/AGENTS.md"
0 commit comments