Loading...
Loading...
Compare original and translation side by side
_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
[ -n "$_UPD" ] && echo "$_UPD" || true
mkdir -p ~/.gstack/sessions
touch ~/.gstack/sessions/"$PPID"
_SESSIONS=$(find ~/.gstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
find ~/.gstack/sessions -mmin +120 -type f -delete 2>/dev/null || true
_CONTRIB=$(~/.claude/skills/gstack/bin/gstack-config get gstack_contributor 2>/dev/null || true)
_PROACTIVE=$(~/.claude/skills/gstack/bin/gstack-config get proactive 2>/dev/null || echo "true")
_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
echo "BRANCH: $_BRANCH"
echo "PROACTIVE: $_PROACTIVE"
_LAKE_SEEN=$([ -f ~/.gstack/.completeness-intro-seen ] && echo "yes" || echo "no")
echo "LAKE_INTRO: $_LAKE_SEEN"
_TEL=$(~/.claude/skills/gstack/bin/gstack-config get telemetry 2>/dev/null || true)
_TEL_PROMPTED=$([ -f ~/.gstack/.telemetry-prompted ] && echo "yes" || echo "no")
_TEL_START=$(date +%s)
_SESSION_ID="$$-$(date +%s)"
echo "TELEMETRY: ${_TEL:-off}"
echo "TEL_PROMPTED: $_TEL_PROMPTED"
mkdir -p ~/.gstack/analytics
echo '{"skill":"design-consultation","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true
for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; donePROACTIVE"false"UPGRADE_AVAILABLE <old> <new>~/.claude/skills/gstack/gstack-upgrade/SKILL.mdJUST_UPGRADED <from> <to>LAKE_INTROnoopen https://garryslist.org/posts/boil-the-ocean
touch ~/.gstack/.completeness-intro-seenopentouchTEL_PROMPTEDnoLAKE_INTROyesHelp gstack get better! Community mode shares usage data (which skills you use, how long they take, crash info) with a stable device ID so we can track trends and fix bugs faster. No code, file paths, or repo names are ever sent. Change anytime with.gstack-config set telemetry off
~/.claude/skills/gstack/bin/gstack-config set telemetry communityHow about anonymous mode? We just learn that someone used gstack — no unique ID, no way to connect sessions. Just a counter that helps us know if anyone's out there.
~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous~/.claude/skills/gstack/bin/gstack-config set telemetry offtouch ~/.gstack/.telemetry-promptedTEL_PROMPTEDyes_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
[ -n "$_UPD" ] && echo "$_UPD" || true
mkdir -p ~/.gstack/sessions
touch ~/.gstack/sessions/"$PPID"
_SESSIONS=$(find ~/.gstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
find ~/.gstack/sessions -mmin +120 -type f -delete 2>/dev/null || true
_CONTRIB=$(~/.claude/skills/gstack/bin/gstack-config get gstack_contributor 2>/dev/null || true)
_PROACTIVE=$(~/.claude/skills/gstack/bin/gstack-config get proactive 2>/dev/null || echo "true")
_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
echo "BRANCH: $_BRANCH"
echo "PROACTIVE: $_PROACTIVE"
_LAKE_SEEN=$([ -f ~/.gstack/.completeness-intro-seen ] && echo "yes" || echo "no")
echo "LAKE_INTRO: $_LAKE_SEEN"
_TEL=$(~/.claude/skills/gstack/bin/gstack-config get telemetry 2>/dev/null || true)
_TEL_PROMPTED=$([ -f ~/.gstack/.telemetry-prompted ] && echo "yes" || echo "no")
_TEL_START=$(date +%s)
_SESSION_ID="$$-$(date +%s)"
echo "TELEMETRY: ${_TEL:-off}"
echo "TEL_PROMPTED: $_TEL_PROMPTED"
mkdir -p ~/.gstack/analytics
echo '{"skill":"design-consultation","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true
for _PF in ~/.gstack/analytics/.pending-*; do [ -f "$_PF" ] && ~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true; break; donePROACTIVE"false"UPGRADE_AVAILABLE <old> <new>~/.claude/skills/gstack/gstack-upgrade/SKILL.mdJUST_UPGRADED <from> <to>LAKE_INTROnoopen https://garryslist.org/posts/boil-the-ocean
touch ~/.gstack/.completeness-intro-seenopentouchTEL_PROMPTEDnoLAKE_INTROyes帮助gstack变得更好!社区模式会共享使用数据(您使用的技能、耗时、崩溃信息)以及稳定的设备ID,以便我们跟踪趋势并更快修复bug。我们绝不会发送任何代码、文件路径或仓库名称。您可以随时通过更改设置。gstack-config set telemetry off
~/.claude/skills/gstack/bin/gstack-config set telemetry community那匿名模式呢?我们仅收集gstack的使用次数——不包含唯一ID,无法关联会话。只是一个计数器,帮助我们了解产品的使用情况。
~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous~/.claude/skills/gstack/bin/gstack-config set telemetry offtouch ~/.gstack/.telemetry-promptedTEL_PROMPTEDyes_BRANCHRECOMMENDATION: Choose [X] because [one-line reason]Completeness: X/10A) ... B) ... C) ...(human: ~X / CC: ~Y)_BRANCHRECOMMENDATION: 选择[X],因为[一句话理由]Completeness: X/10A) ... B) ... C) ...(人工: ~X / CC: ~Y)| Task type | Human team | CC+gstack | Compression |
|---|---|---|---|
| Boilerplate / scaffolding | 2 days | 15 min | ~100x |
| Test writing | 1 day | 15 min | ~50x |
| Feature implementation | 1 week | 30 min | ~30x |
| Bug fix + regression test | 4 hours | 15 min | ~20x |
| Architecture / design | 2 days | 4 hours | ~5x |
| Research / exploration | 1 day | 3 hours | ~3x |
| 任务类型 | 团队人工 | CC+gstack | 压缩比 |
|---|---|---|---|
| 样板代码/脚手架 | 2天 | 15分钟 | ~100倍 |
| 测试用例编写 | 1天 | 15分钟 | ~50倍 |
| 功能实现 | 1周 | 30分钟 | ~30倍 |
| Bug修复+回归测试 | 4小时 | 15分钟 | ~20倍 |
| 架构/设计 | 2天 | 4小时 | ~5倍 |
| 研究/探索 | 1天 | 3小时 | ~3倍 |
~/.claude/skills/gstack/ETHOS.mdjq -n --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" --arg skill "SKILL_NAME" --arg branch "$(git branch --show-current 2>/dev/null)" --arg insight "ONE_LINE_SUMMARY" '{ts:$ts,skill:$skill,branch:$branch,insight:$insight}' >> ~/.gstack/analytics/eureka.jsonl 2>/dev/null || true~/.claude/skills/gstack/ETHOS.mdjq -n --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" --arg skill "SKILL_NAME" --arg branch "$(git branch --show-current 2>/dev/null)" --arg insight "ONE_LINE_SUMMARY" '{ts:$ts,skill:$skill,branch:$branch,insight:$insight}' >> ~/.gstack/analytics/eureka.jsonl 2>/dev/null || true_CONTRIBtrue$B js "await fetch(...)"SyntaxError: await is only valid in async functions~/.gstack/contributor-logs/{slug}.mdundefined_CONTRIBtrue$B js "await fetch(...)"SyntaxError: await is only valid in async functions~/.gstack/contributor-logs/{slug}.mdundefined{paste the actual error or unexpected output here}{在此粘贴实际错误或意外输出}
Slug: lowercase, hyphens, max 60 chars (e.g. `browse-js-no-await`). Skip if file already exists. Max 3 reports per session. File inline and continue — don't stop the workflow. Tell user: "Filed gstack field report: {title}"
Slug:小写,用连字符连接,最多60个字符(例如`browse-js-no-await`)。如果文件已存在则跳过。每个会话最多提交3份报告。在后台编写文件并继续——不要中断工作流程。告知用户:“已提交gstack现场报告:{title}”STATUS: BLOCKED | NEEDS_CONTEXT
REASON: [1-2 sentences]
ATTEMPTED: [what you tried]
RECOMMENDATION: [what the user should do next]STATUS: BLOCKED | NEEDS_CONTEXT
REASON: [1-2句话]
ATTEMPTED: [您尝试的方法]
RECOMMENDATION: [用户下一步应该做什么]name:~/.gstack/analytics/_TEL_END=$(date +%s)
_TEL_DUR=$(( _TEL_END - _TEL_START ))
rm -f ~/.gstack/analytics/.pending-"$_SESSION_ID" 2>/dev/null || true
~/.claude/skills/gstack/bin/gstack-telemetry-log \
--skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \
--used-browse "USED_BROWSE" --session-id "$_SESSION_ID" 2>/dev/null &SKILL_NAMEOUTCOMEUSED_BROWSE$Bname:~/.gstack/analytics/_TEL_END=$(date +%s)
_TEL_DUR=$(( _TEL_END - _TEL_START ))
rm -f ~/.gstack/analytics/.pending-"$_SESSION_ID" 2>/dev/null || true
~/.claude/skills/gstack/bin/gstack-telemetry-log \
--skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \
--used-browse "USED_BROWSE" --session-id "$_SESSION_ID" 2>/dev/null &SKILL_NAMEOUTCOMEUSED_BROWSE$Bls DESIGN.md design-system.md 2>/dev/null || echo "NO_DESIGN_FILE"cat README.md 2>/dev/null | head -50
cat package.json 2>/dev/null | head -20
ls src/ app/ pages/ components/ 2>/dev/null | head -30source <(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)
ls ~/.gstack/projects/$SLUG/*office-hours* 2>/dev/null | head -5
ls .context/*office-hours* .context/attachments/*office-hours* 2>/dev/null | head -5/office-hoursls DESIGN.md design-system.md 2>/dev/null || echo "NO_DESIGN_FILE"cat README.md 2>/dev/null | head -50
cat package.json 2>/dev/null | head -20
ls src/ app/ pages/ components/ 2>/dev/null | head -30source <(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)
ls ~/.gstack/projects/$SLUG/*office-hours* 2>/dev/null | head -5
ls .context/*office-hours* .context/attachments/*office-hours* 2>/dev/null | head -5/office-hours_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
B=""
[ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/browse/dist/browse" ] && B="$_ROOT/.claude/skills/gstack/browse/dist/browse"
[ -z "$B" ] && B=~/.claude/skills/gstack/browse/dist/browse
if [ -x "$B" ]; then
echo "READY: $B"
else
echo "NEEDS_SETUP"
fiNEEDS_SETUPcd <SKILL_DIR> && ./setupbuncurl -fsSL https://bun.sh/install | bash_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
B=""
[ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/browse/dist/browse" ] && B="$_ROOT/.claude/skills/gstack/browse/dist/browse"
[ -z "$B" ] && B=~/.claude/skills/gstack/browse/dist/browse
if [ -x "$B" ]; then
echo "READY: $B"
else
echo "NEEDS_SETUP"
fiNEEDS_SETUPcd <SKILL_DIR> && ./setupcurl -fsSL https://bun.sh/install | bash$B$B goto "https://example-site.com"
$B screenshot "/tmp/design-research-site-name.png"
$B snapshot"I looked at what's out there. Here's the landscape: they converge on [patterns]. Most of them feel [observation — e.g., interchangeable, polished but generic, etc.]. The opportunity to stand out is [gap]. Here's where I'd play it safe and where I'd take a risk..."
$B$B goto "https://example-site.com"
$B screenshot "/tmp/design-research-site-name.png"
$B snapshot“我研究了该领域的现有情况。现状是:他们都采用了[模式]。大多数产品给人的感觉是[观察结果——例如,千篇一律、精致但通用等]。脱颖而出的机会在于[差距]。以下是我建议稳妥处理的部分和可以冒险尝试的部分……”
Based on [product context] and [research findings / my design knowledge]:
AESTHETIC: [direction] — [one-line rationale]
DECORATION: [level] — [why this pairs with the aesthetic]
LAYOUT: [approach] — [why this fits the product type]
COLOR: [approach] + proposed palette (hex values) — [rationale]
TYPOGRAPHY: [3 font recommendations with roles] — [why these fonts]
SPACING: [base unit + density] — [rationale]
MOTION: [approach] — [rationale]
This system is coherent because [explain how choices reinforce each other].
SAFE CHOICES (category baseline — your users expect these):
- [2-3 decisions that match category conventions, with rationale for playing safe]
RISKS (where your product gets its own face):
- [2-3 deliberate departures from convention]
- For each risk: what it is, why it works, what you gain, what it costs
The safe choices keep you literate in your category. The risks are where
your product becomes memorable. Which risks appeal to you? Want to see
different ones? Or adjust anything else?基于[产品上下文]和[研究结果 / 我的设计知识]:
美学风格:[方向] — [一句话理由]
装饰程度:[级别] — [与美学风格匹配的原因]
布局:[方法] — [适合产品类型的原因]
色彩:[方法] + 建议的调色板(十六进制值) — [理由]
排版:[3个字体推荐及用途] — [选择这些字体的原因]
间距:[基础单位 + 密度] — [理由]
动效:[方法] — [理由]
该系统连贯一致,因为[解释各选择如何相互强化]。
稳妥选择(行业基线——用户期望这些):
- [2-3个符合行业惯例的决策,以及选择稳妥的理由]
冒险选择(产品塑造独特形象的地方):
- [2-3个刻意打破常规的决策]
- 每个冒险选择:具体内容、为什么有效、获得的收益、付出的代价
稳妥选择确保您的产品符合行业认知。冒险选择让您的产品令人难忘。哪些冒险选择吸引您?想要查看不同的选项?还是调整其他内容?PREVIEW_FILE="/tmp/design-consultation-preview-$(date +%s).html"$PREVIEW_FILEopen "$PREVIEW_FILE"PREVIEW_FILE="/tmp/design-consultation-preview-$(date +%s).html"$PREVIEW_FILEopen "$PREVIEW_FILE"<link>open<link>openDESIGN.mdundefinedundefined| Date | Decision | Rationale |
|---|---|---|
| [today] | Initial design system created | Created by /design-consultation based on [product context / research] |
**Update CLAUDE.md** (or create it if it doesn't exist) — append this section:
```markdown| 日期 | 决策 | 理由 |
|---|---|---|
| [今天] | 创建初始设计系统 | 由/design-consultation基于[产品上下文 / 研究]创建 |
**更新CLAUDE.md**(如果不存在则创建)——添加以下部分:
```markdown
**AskUserQuestion Q-final — show summary and confirm:**
List all decisions. Flag any that used agent defaults without explicit user confirmation (the user should know what they're shipping). Options:
- A) Ship it — write DESIGN.md and CLAUDE.md
- B) I want to change something (specify what)
- C) Start over
---
**AskUserQuestion Q-final — 显示摘要并确认:**
列出所有决策。标记任何未经过用户明确确认而使用agent默认值的决策(用户应该知道他们要交付的内容)。选项:
- A) 交付——编写DESIGN.md和CLAUDE.md
- B) 我想更改某些内容(指定内容)
- C) 重新开始
---