codex-subagent by am-will/codex-skills
npx skills add https://github.com/am-will/codex-skills --skill codex-subagent创建自主子代理以卸载上下文密集型工作。子代理消耗自身的令牌,仅返回最终结果。
黄金法则: 如果任务及中间工作会给父上下文增加 3,000+ 个令牌 → 使用子代理。
关键:父代理必须为子代理提供成功所需的基本上下文。
❌ 差: "研究身份验证"
✅ 好: "研究此 Next.js 代码库中的身份验证。重点关注:1) 会话管理策略(JWT 与会话 cookie),2) 身份验证提供程序集成(NextAuth、Clerk 等),3) 受保护路由模式。检查 /app、/lib/auth 和中间件文件。返回包含代码示例的架构摘要。"
❌ 差: "搜索 Codex SDK"
✅ 好: "查找最新的 Codex SDK 文档并总结关键更新。重点关注:1) 安装/快速入门,2) 核心 API 方法和参数,3) 重大变更或弃用项。优先考虑 OpenAI 官方文档和发布说明。返回带有引用的简明摘要。"
❌ 差: "查找 API 端点"
✅ 好: "查找此 Express.js 应用中的所有 REST API 端点。查看 /routes、/api 和 /controllers 目录。为每个端点记录:方法(GET/POST 等)、路径、身份验证要求、请求/响应模式。以 Markdown 表格形式返回。"
[任务上下文]
你正在研究/分析 [特定主题] 在 [位置/代码库/领域] 中。
[目标]
你的目标:
1. [第一个目标,具体说明]
2. [第二个目标]
3. [第三个目标(如果需要)]
[约束]
- 关注:[特定区域/文件/来源]
- 优先考虑:[最重要的内容]
- 忽略:[需要跳过的内容]
[输出格式]
返回:[父代理所需的确切格式]
[成功标准]
完成条件:[满足特定条件]
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
仅用于纯搜索 - 收集信息后无需额外工作。
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m gpt-5.1-codex-mini -c 'model_reasoning_effort="medium"' \
"搜索网络以获取 [主题] 并总结发现"
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m gpt-5.1-codex-mini -c 'model_reasoning_effort="medium"' `
"搜索网络以获取 [主题] 并总结发现"
多步骤工作流 - 搜索 + 分析/重构/生成:
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" \
"查找身份验证文件,然后分析安全模式并提出改进建议"
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
"查找身份验证文件,然后分析安全模式并提出改进建议"
任务是否纯粹是搜索/收集?
├─ 是:收集后有任何工作吗?
│ ├─ 否 → 迷你模型
│ └─ 是 → 继承父模型
└─ 否 → 继承父模型
# 获取父会话设置(尊重活动配置文件;回退到顶层设置)
# 注意:codex-parent-settings.sh 打印两行;使用 mapfile 避免 REASONING 为空。
mapfile -t _settings < <(scripts/codex-parent-settings.sh)
MODEL="${_settings[0]}"
REASONING="${_settings[1]}"
# 创建子代理(继承父模型)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" \
"包含上下文的详细提示词"
# 更安全的提示词构建(无反引号 / 命令替换)
PROMPT=$(cat <<'EOF'
[任务上下文]
你正在分析 /path/to/repo。
[目标]
1. 执行 X
2. 执行 Y
[输出格式]
返回:路径 - 用途
EOF
)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" \
"$PROMPT"
# 纯搜索(使用迷你模型)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m gpt-5.1-codex-mini -c 'model_reasoning_effort="medium"' \
"仅搜索提示词"
# 用于解析的 JSON 输出
codex exec --dangerously-bypass-approvals-and-sandbox --json "PROMPT" | jq -r 'select(.event=="turn.completed") | .content'
# 获取父会话设置(尊重活动配置文件;回退到顶层设置)
$scriptPath = Join-Path $env:USERPROFILE ".codex\skills\codex-subagent\scripts\codex-parent-settings.ps1"
$settings = & $scriptPath
$MODEL = $settings[0]
$REASONING = $settings[1]
# 创建子代理(继承父模型)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
"包含上下文的详细提示词"
# 使用 here-string 处理多行提示词(避免转义问题)
$PROMPT = @'
[任务上下文]
你正在分析 /path/to/repo。
[目标]
1. 执行 X
2. 执行 Y
[输出格式]
返回:路径 - 用途
'@
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
$PROMPT
# 纯搜索(使用迷你模型)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m gpt-5.1-codex-mini -c 'model_reasoning_effort="medium"' `
"仅搜索提示词"
# 方法 1(推荐):使用 -o 直接输出到文件
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
-o output.txt "PROMPT"
$content = Get-Content -Path output.txt -Raw
# 方法 2:解析 JSONL 事件流
$jsonl = codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check --json "PROMPT"
$events = $jsonl -split "`n" | Where-Object { $_ } | ForEach-Object { $_ | ConvertFrom-Json }
$content = $events |
Where-Object -Property type -EQ "item.completed" |
Where-Object { $_.item.type -eq "agent_message" } |
Select-Object -ExpandProperty item |
Select-Object -ExpandProperty text
为独立任务创建多个子代理:
# 同时研究不同主题
codex exec --dangerously-bypass-approvals-and-sandbox -m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" "研究主题 A..." &
codex exec --dangerously-bypass-approvals-and-sandbox -m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" "研究主题 B..." &
wait
使用 PowerShell Jobs 进行并行执行,并使用 -o 输出到单独文件:
# 并行执行并输出到文件
$job1 = Start-Job -ScriptBlock {
param($m, $r, $out)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $m -c "model_reasoning_effort=`"$r`"" -o $out "研究主题 A..."
} -ArgumentList $MODEL, $REASONING, "output1.txt"
$job2 = Start-Job -ScriptBlock {
param($m, $r, $out)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $m -c "model_reasoning_effort=`"$r`"" -o $out "研究主题 B..."
} -ArgumentList $MODEL, $REASONING, "output2.txt"
# 等待所有作业完成
$job1, $job2 | Wait-Job | Remove-Job
# 读取结果
$result1 = Get-Content -Path output1.txt -Raw
$result2 = Get-Content -Path output2.txt -Raw
Codex CLI 提供两种捕获输出的方法:
使用 -o / --output-last-message 将最终消息直接写入文件:
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" \
-o result.txt "你的提示词"
content=$(cat result.txt)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
-o result.txt "你的提示词"
$content = Get-Content -Path result.txt -Raw
优点:
使用 --json 获取完整事件流并手动解析:
codex exec --dangerously-bypass-approvals-and-sandbox --json "PROMPT" | jq -r 'select(.event=="turn.completed") | .content'
$jsonl = codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check --json "PROMPT"
$events = $jsonl -split "`n" | Where-Object { $_ } | ForEach-Object { $_ | ConvertFrom-Json }
$content = $events |
Where-Object -Property type -EQ "item.completed" |
Where-Object { $_.item.type -eq "agent_message" } |
Select-Object -ExpandProperty item |
Select-Object -ExpandProperty text
JSONL 事件结构:
{"type":"item.completed","item":{"id":"item_3","type":"agent_message","text":"..."}}
{"type":"turn.completed","usage":{"input_tokens":24763,"output_tokens":122}}
关键字段:
type == "item.completed" 且 item.type == "agent_message" → 提取 item.texttype == "turn.completed" → 包含令牌使用统计信息主动监控 - 不要放任不管:
纯网络搜索(迷你模型):
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m gpt-5.1-codex-mini -c 'model_reasoning_effort="medium"' \
"搜索 Rust 2024 版本的最新发布说明。总结主要的重大变更、新的语言功能和迁移指南。重点关注 rust-lang.org 官方博客和文档。"
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m gpt-5.1-codex-mini -c 'model_reasoning_effort="medium"' `
"搜索 Rust 2024 版本的最新发布说明。总结主要的重大变更、新的语言功能和迁移指南。重点关注 rust-lang.org 官方博客和文档。"
代码库分析(继承父模型):
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" \
"分析此 Next.js 应用中的身份验证。检查 /app、/lib/auth、中间件。记录:会话策略、身份验证提供程序、受保护路由、安全模式。返回架构图(mermaid)+ 发现结果。"
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
"分析此 Next.js 应用中的身份验证。检查 /app、/lib/auth、中间件。记录:会话策略、身份验证提供程序、受保护路由、安全模式。返回架构图(mermaid)+ 发现结果。"
研究 + 提案(继承父模型):
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" \
"研究 WebGPU 浏览器采用情况(支持表、基准测试、框架)。然后分析其对我们 React 应用的可行性。考虑:性能提升、浏览器兼容性、实现工作量。返回包含优缺点分析的建议。"
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
"研究 WebGPU 浏览器采用情况(支持表、基准测试、框架)。然后分析其对我们 React 应用的可行性。考虑:性能提升、浏览器兼容性、实现工作量。返回包含优缺点分析的建议。"
父设置:~/.codex/config.toml
model = "gpt-5.2-codex"
model_reasoning_effort = "high" # none | minimal | low | medium | high | xhigh
profile = "yolo" # 可选;设置后,配置文件值将覆盖顶层值
每周安装次数
320
代码仓库
GitHub 星标数
817
首次出现
2026年1月23日
安全审计
安装于
codex318
opencode317
gemini-cli317
github-copilot317
amp316
kimi-cli316
Spawn autonomous subagents to offload context-heavy work. Subagents burn their own tokens, return only final results.
Golden Rule: If task + intermediate work would add 3,000+ tokens to parent context → use subagent.
Critical: Parent agent must provide subagent with essential context for success.
❌ Bad: "Research authentication"
✅ Good: "Research authentication in this Next.js codebase. Focus on: 1) Session management strategy (JWT vs session cookies), 2) Auth provider integration (NextAuth, Clerk, etc), 3) Protected route patterns. Check /app, /lib/auth, and middleware files. Return architecture summary with code examples."
❌ Bad: "Search for Codex SDK"
✅ Good: "Find the most recent Codex SDK documentation and summarize key updates. Focus on: 1) Installation/quickstart, 2) Core API methods and parameters, 3) Breaking changes or deprecations. Prioritize official OpenAI docs and release notes. Return a concise summary with citations."
❌ Bad: "Find API endpoints"
✅ Good: "Find all REST API endpoints in this Express.js app. Look in /routes, /api, and /controllers directories. For each endpoint document: method (GET/POST/etc), path, auth requirements, request/response schemas. Return as markdown table."
[TASK CONTEXT]
You are researching/analyzing [SPECIFIC TOPIC] in [LOCATION/CODEBASE/DOMAIN].
[OBJECTIVES]
Your goals:
1. [1st objective with specifics]
2. [2nd objective]
3. [3rd objective if needed]
[CONSTRAINTS]
- Focus on: [specific areas/files/sources]
- Prioritize: [what matters most]
- Ignore: [what to skip]
[OUTPUT FORMAT]
Return: [exactly what format parent needs]
[SUCCESS CRITERIA]
Complete when: [specific conditions met]
Pure search only - no additional work after gathering info.
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m gpt-5.1-codex-mini -c 'model_reasoning_effort="medium"' \
"Search web for [TOPIC] and summarize findings"
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m gpt-5.1-codex-mini -c 'model_reasoning_effort="medium"' `
"Search web for [TOPIC] and summarize findings"
Multi-step workflows - search + analyze/refactor/generate:
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" \
"Find auth files THEN analyze security patterns and propose improvements"
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
"Find auth files THEN analyze security patterns and propose improvements"
Is task PURELY search/gather?
├─ YES: Any work after gathering?
│ ├─ NO → mini model
│ └─ YES → inherit parent
└─ NO → inherit parent
# Get parent session settings (respects active profile; falls back to top-level)
# NOTE: codex-parent-settings.sh prints two lines; use mapfile to avoid empty REASONING.
mapfile -t _settings < <(scripts/codex-parent-settings.sh)
MODEL="${_settings[0]}"
REASONING="${_settings[1]}"
# Spawn subagent (inherit parent)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" \
"DETAILED_PROMPT_WITH_CONTEXT"
# Safer prompt construction (no backticks / command substitution)
PROMPT=$(cat <<'EOF'
[TASK CONTEXT]
You are analyzing /path/to/repo.
[OBJECTIVES]
1. Do X
2. Do Y
[OUTPUT FORMAT]
Return: path - purpose
EOF
)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" \
"$PROMPT"
# Pure search (use mini)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m gpt-5.1-codex-mini -c 'model_reasoning_effort="medium"' \
"SEARCH_ONLY_PROMPT"
# JSON output for parsing
codex exec --dangerously-bypass-approvals-and-sandbox --json "PROMPT" | jq -r 'select(.event=="turn.completed") | .content'
# Get parent session settings (respects active profile; falls back to top-level)
$scriptPath = Join-Path $env:USERPROFILE ".codex\skills\codex-subagent\scripts\codex-parent-settings.ps1"
$settings = & $scriptPath
$MODEL = $settings[0]
$REASONING = $settings[1]
# Spawn subagent (inherit parent)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
"DETAILED_PROMPT_WITH_CONTEXT"
# Use here-string for multi-line prompts (avoids escaping issues)
$PROMPT = @'
[TASK CONTEXT]
You are analyzing /path/to/repo.
[OBJECTIVES]
1. Do X
2. Do Y
[OUTPUT FORMAT]
Return: path - purpose
'@
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
$PROMPT
# Pure search (use mini)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m gpt-5.1-codex-mini -c 'model_reasoning_effort="medium"' `
"SEARCH_ONLY_PROMPT"
# Method 1 (Recommended): Use -o to output directly to file
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
-o output.txt "PROMPT"
$content = Get-Content -Path output.txt -Raw
# Method 2: Parse JSONL event stream
$jsonl = codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check --json "PROMPT"
$events = $jsonl -split "`n" | Where-Object { $_ } | ForEach-Object { $_ | ConvertFrom-Json }
$content = $events |
Where-Object -Property type -EQ "item.completed" |
Where-Object { $_.item.type -eq "agent_message" } |
Select-Object -ExpandProperty item |
Select-Object -ExpandProperty text
Spawn multiple subagents for independent tasks:
# Research different topics simultaneously
codex exec --dangerously-bypass-approvals-and-sandbox -m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" "Research topic A..." &
codex exec --dangerously-bypass-approvals-and-sandbox -m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" "Research topic B..." &
wait
Use PowerShell Jobs for parallel execution with -o to output to separate files:
# Parallel execution with file output
$job1 = Start-Job -ScriptBlock {
param($m, $r, $out)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $m -c "model_reasoning_effort=`"$r`"" -o $out "Research topic A..."
} -ArgumentList $MODEL, $REASONING, "output1.txt"
$job2 = Start-Job -ScriptBlock {
param($m, $r, $out)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $m -c "model_reasoning_effort=`"$r`"" -o $out "Research topic B..."
} -ArgumentList $MODEL, $REASONING, "output2.txt"
# Wait for all jobs to complete
$job1, $job2 | Wait-Job | Remove-Job
# Read results
$result1 = Get-Content -Path output1.txt -Raw
$result2 = Get-Content -Path output2.txt -Raw
Codex CLI provides two methods to capture output:
Use -o / --output-last-message to write the final message directly to a file:
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" \
-o result.txt "YOUR_PROMPT"
content=$(cat result.txt)
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
-o result.txt "YOUR_PROMPT"
$content = Get-Content -Path result.txt -Raw
Advantages:
Use --json to get the full event stream and parse manually:
codex exec --dangerously-bypass-approvals-and-sandbox --json "PROMPT" | jq -r 'select(.event=="turn.completed") | .content'
$jsonl = codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check --json "PROMPT"
$events = $jsonl -split "`n" | Where-Object { $_ } | ForEach-Object { $_ | ConvertFrom-Json }
$content = $events |
Where-Object -Property type -EQ "item.completed" |
Where-Object { $_.item.type -eq "agent_message" } |
Select-Object -ExpandProperty item |
Select-Object -ExpandProperty text
JSONL Event Structure:
{"type":"item.completed","item":{"id":"item_3","type":"agent_message","text":"..."}}
{"type":"turn.completed","usage":{"input_tokens":24763,"output_tokens":122}}
Key fields:
type == "item.completed" with item.type == "agent_message" → extract item.texttype == "turn.completed" → contains token usage statsActively monitor - don't fire-and-forget:
Pure Web Search (mini):
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m gpt-5.1-codex-mini -c 'model_reasoning_effort="medium"' \
"Search for the latest release notes of Rust 2024 edition. Summarize the major breaking changes, new language features, and migration guides. Focus on the official rust-lang.org blog and documentation."
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m gpt-5.1-codex-mini -c 'model_reasoning_effort="medium"' `
"Search for the latest release notes of Rust 2024 edition. Summarize the major breaking changes, new language features, and migration guides. Focus on the official rust-lang.org blog and documentation."
Codebase Analysis (inherit parent):
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" \
"Analyze authentication in this Next.js app. Check /app, /lib/auth, middleware. Document: session strategy, auth provider, protected routes, security patterns. Return architecture diagram (mermaid) + findings."
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
"Analyze authentication in this Next.js app. Check /app, /lib/auth, middleware. Document: session strategy, auth provider, protected routes, security patterns. Return architecture diagram (mermaid) + findings."
Research + Proposal (inherit parent):
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \
-m "$MODEL" -c "model_reasoning_effort=\"$REASONING\"" \
"Research WebGPU browser adoption (support tables, benchmarks, frameworks). THEN analyze feasibility for our React app. Consider: performance gains, browser compatibility, implementation effort. Return recommendation with pros/cons."
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check `
-m $MODEL -c "model_reasoning_effort=`"$REASONING`"" `
"Research WebGPU browser adoption (support tables, benchmarks, frameworks). THEN analyze feasibility for our React app. Consider: performance gains, browser compatibility, implementation effort. Return recommendation with pros/cons."
Parent settings: ~/.codex/config.toml
model = "gpt-5.2-codex"
model_reasoning_effort = "high" # none | minimal | low | medium | high | xhigh
profile = "yolo" # optional; when set, profile values override top-level
Weekly Installs
320
Repository
GitHub Stars
817
First Seen
Jan 23, 2026
Security Audits
Gen Agent Trust HubFailSocketFailSnykFail
Installed on
codex318
opencode317
gemini-cli317
github-copilot317
amp316
kimi-cli316
agent-browser 浏览器自动化工具 - Vercel Labs 命令行网页操作与测试
138,300 周安装
Google Ads Manager 技能:广告系列管理、关键词研究、出价优化与效果分析
311 周安装
Telegram机器人开发教程:构建AI助手、通知系统与群组自动化工具
311 周安装
AI图像生成提示词优化指南:DALL-E、Midjourney、Stable Diffusion提示工程技巧
311 周安装
AI协作头脑风暴工具 - 将想法转化为完整设计规范,支持代码模板与项目管理
311 周安装
解决 Docker 沙盒 npm 安装崩溃:sandbox-npm-install 技能详解与使用指南
311 周安装
网页设计方法论:生产级HTML/CSS构建模式与BEM命名规范
311 周安装