/crystallize
Distils repeating patterns from session logs and lessons.md into draft skill files. Run after ≥10 sessions to extract durable knowledge. Output: draft skills/ files + promotion report.
$ npx -y skills add avelikiy/great_cto --skill crystallize --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/crystallize
Context preview
The summary Claude sees to decide when to auto-load this skill.
Distils repeating patterns from session logs and lessons.md into draft skill files. Run after ≥10 sessions to extract durable knowledge. Output: draft skills/ files + promotion report.
SKILL.md
crystallize.SKILL.mdname: crystallize
description: "Distils repeating patterns from session logs and lessons.md into draft skill files. Run after ≥10 sessions to extract durable knowledge. Output: draft skills/ files + promotion report."
when_to_use: |
Apply when:
- CTO says /crystallize, "crystallize", or "extract knowledge"
- Session count in .great_cto/logs/ reaches a multiple of 10 (auto-suggest)
- User asks "what have we learned?" or "turn lessons into skills"
effort: high
allowed-tools: Read, Write, Glob, Grep, Bash, Agent
paths:
- ".great_cto/logs/**"
- ".great_cto/lessons.md"
- "~/.great_cto/decisions.md"
- "skills/**"
Crystallize — distil session patterns into reusable skills
Invoke when the CTO says `/crystallize`, "crystallize", "extract knowledge", or "what have we learned?". Also auto-suggested when session count is a multiple of 10 (the session-end hook checks `.great_cto/.last-crystallize`).
The `knowledge-extractor` agent (Opus) does the heavy lifting. This skill orchestrates the workflow and emits the final report.
**Session-end hint integration:** The session-end hook checks `.great_cto/.last-crystallize` and suggests running `/crystallize` when the session count exceeds `last_sessions + 10`. Run this skill after ≥10 sessions to keep extracted skills current.
---
Step 1 — Gather raw material
# Count sessions
SESSION_COUNT=$(ls .great_cto/logs/session-*-end.md 2>/dev/null | wc -l | tr -d ' ')
echo "Sessions: $SESSION_COUNT"
# Read lessons
cat .great_cto/lessons.md 2>/dev/null || echo "(no lessons yet)"
# Read cross-project decisions
cat ~/.great_cto/decisions.md 2>/dev/null | head -200 || echo "(none)"
# Find patterns that appear in ≥3 sessions
grep -h "^## pattern:" .great_cto/logs/session-*-end.md 2>/dev/null | sort | uniq -c | sort -rn | head -20
# Recent git log for context
git log --oneline --since="30 days ago" | head -30
If `SESSION_COUNT` is 0, tell the CTO: "No session logs found in `.great_cto/logs/`. Run at least 10 sessions before crystallizing." Exit.
If `SESSION_COUNT` < 10, tell the CTO: "Only `{N}` sessions found. Patterns are more reliable after ≥10 sessions. Proceed anyway? [yes/no]" Wait for confirmation before continuing.
---
Step 2 — Cluster patterns (via knowledge-extractor agent)
Spawn the `knowledge-extractor` agent with the gathered data as context:
Agent: knowledge-extractor
Task: |
Read .great_cto/lessons.md and all files in .great_cto/logs/.
Cluster lesson entries by pattern slug.
For each cluster with ≥3 occurrences, write a draft skill file to
skills/{domain}/SKILL.md (status: draft in frontmatter).
If a skill for that domain already exists, append a new ## section instead
of replacing the file.
Infer domain from the pattern slug and its archetype tags.
Return a structured summary: clusters found, drafts written, already-covered.Wait for the agent to complete before proceeding to Step 3.
---
Step 3 — Emit promotion report
After the agent completes, print:
CRYSTALLIZE REPORT
════════════════════════════════════════
Sessions analysed: {SESSION_COUNT}
Lessons found: {LESSON_COUNT}
Clusters: {CLUSTER_COUNT}
Draft skills: {DRAFT_COUNT} (in skills/{domain}/SKILL.md)
Already covered: {COVERED_COUNT} (pattern already in existing skill)
════════════════════════════════════════
Draft files:
{list of paths and brief description per draft}
Next: review drafts, remove `status: draft` when satisfied.
Run /crystallize again after 10 more sessions.
════════════════════════════════════════---
Step 4 — Write .last-crystallize marker
After emitting the report, write the marker file:
SESSION_COUNT=$(ls .great_cto/logs/session-*-end.md 2>/dev/null | wc -l | tr -d ' ')
DRAFT_COUNT={P} # from agent output
mkdir -p .great_cto
node -e "
const fs = require('fs');
fs.writeFileSync('.great_cto/.last-crystallize', JSON.stringify({
ts: new Date().toISOString(),
sessions: parseInt('$SESSION_COUNT') || 0,
drafts: parseInt('$DRAFT_COUNT') || 0
}) + '\n');
"---
Step 5 — Auto-run cadence suggestion
If `SESSION_COUNT` is a multiple of 10 (and > 0), append to the report:
Auto-suggestion: you've completed {SESSION_COUNT} sessions. Consider running
`/crystallize` every 10 sessions to keep skills current.Read more
name: crystallize description: "Distils repeating patterns from session logs and lessons.md into draft skill files. Run after ≥10 sessions to extract durable knowledge. Output: draft skills/ files + promotion report." when_to_use: | Apply when: - CTO says /crystallize, "crystallize", or "extract knowledge" - Session count in .great_cto/logs/ reaches a multiple of 10 (auto-suggest) - User asks "what have we learned?" or "turn lessons into skills" effort: high allowed-tools: Read, Write, Glob, Grep, Bash, Agent paths: - ".great_cto/logs/**" - ".great_cto/lessons.md" - "~/.great_cto/decisions.md" - "skills/**"
Crystallize — distil session patterns into reusable skills
Invoke when the CTO says `/crystallize`, "crystallize", "extract knowledge", or "what have we learned?". Also auto-suggested when session count is a multiple of 10 (the session-end hook checks `.great_cto/.last-crystallize`).
The `knowledge-extractor` agent (Opus) does the heavy lifting. This skill orchestrates the workflow and emits the final report.
**Session-end hint integration:** The session-end hook checks `.great_cto/.last-crystallize` and suggests running `/crystallize` when the session count exceeds `last_sessions + 10`. Run this skill after ≥10 sessions to keep extracted skills current.
---
Step 1 — Gather raw material
# Count sessions SESSION_COUNT=$(ls .great_cto/logs/session-*-end.md 2>/dev/null | wc -l | tr -d ' ') echo "Sessions: $SESSION_COUNT" # Read lessons cat .great_cto/lessons.md 2>/dev/null || echo "(no lessons yet)" # Read cross-project decisions cat ~/.great_cto/decisions.md 2>/dev/null | head -200 || echo "(none)" # Find patterns that appear in ≥3 sessions grep -h "^## pattern:" .great_cto/logs/session-*-end.md 2>/dev/null | sort | uniq -c | sort -rn | head -20 # Recent git log for context git log --oneline --since="30 days ago" | head -30
If `SESSION_COUNT` is 0, tell the CTO: "No session logs found in `.great_cto/logs/`. Run at least 10 sessions before crystallizing." Exit.
If `SESSION_COUNT` < 10, tell the CTO: "Only `{N}` sessions found. Patterns are more reliable after ≥10 sessions. Proceed anyway? [yes/no]" Wait for confirmation before continuing.
---
Step 2 — Cluster patterns (via knowledge-extractor agent)
Spawn the `knowledge-extractor` agent with the gathered data as context:
Agent: knowledge-extractor
Task: |
Read .great_cto/lessons.md and all files in .great_cto/logs/.
Cluster lesson entries by pattern slug.
For each cluster with ≥3 occurrences, write a draft skill file to
skills/{domain}/SKILL.md (status: draft in frontmatter).
If a skill for that domain already exists, append a new ## section instead
of replacing the file.
Infer domain from the pattern slug and its archetype tags.
Return a structured summary: clusters found, drafts written, already-covered.Wait for the agent to complete before proceeding to Step 3.
---
Step 3 — Emit promotion report
After the agent completes, print:
CRYSTALLIZE REPORT
════════════════════════════════════════
Sessions analysed: {SESSION_COUNT}
Lessons found: {LESSON_COUNT}
Clusters: {CLUSTER_COUNT}
Draft skills: {DRAFT_COUNT} (in skills/{domain}/SKILL.md)
Already covered: {COVERED_COUNT} (pattern already in existing skill)
════════════════════════════════════════
Draft files:
{list of paths and brief description per draft}
Next: review drafts, remove `status: draft` when satisfied.
Run /crystallize again after 10 more sessions.
════════════════════════════════════════---
Step 4 — Write .last-crystallize marker
After emitting the report, write the marker file:
SESSION_COUNT=$(ls .great_cto/logs/session-*-end.md 2>/dev/null | wc -l | tr -d ' ')
DRAFT_COUNT={P} # from agent output
mkdir -p .great_cto
node -e "
const fs = require('fs');
fs.writeFileSync('.great_cto/.last-crystallize', JSON.stringify({
ts: new Date().toISOString(),
sessions: parseInt('$SESSION_COUNT') || 0,
drafts: parseInt('$DRAFT_COUNT') || 0
}) + '\n');
"---
Step 5 — Auto-run cadence suggestion
If `SESSION_COUNT` is a multiple of 10 (and > 0), append to the report:
Auto-suggestion: you've completed {SESSION_COUNT} sessions. Consider running
`/crystallize` every 10 sessions to keep skills current.Don't buy software. Get the work done. GreatCTO ships AI autopilots that run a whole business function — medical coding, legal docs, procurement, accounting, IT, tax — from intake to outcome. A qualified human signs only the judgment calls. Live connectors, built-in compliance.
Repo: avelikiy/great_cto
Other skills on great-cto.
- /anti-patterns
Catalogue of known SDLC anti-patterns that great_cto agents must actively reject when reviewing architecture, plans, code, or post-mortems. Used by architect (pre-impl), pm (planning), senior-dev (impl), l3-support (post-incident).
Open skill - /anydesign
Analyze images, websites, and Figma files to extract their design and generate a `design.md` with token system, component inventory, and reconstruction notes. Use this skill whenever the user wants to understand, document, replicate, or audit the design of something visual: a
Open skill - /archetype-review-base
Shared review framework that every domain reviewer (pci, oracle, gov, edtech, healthcare, mlops, etc.) MUST follow. Defines the output artifact (TM-{slug}.md), mandatory sections, severity scale, verdict format, the workflow scaffold (when-invoked, Step-0 read-inputs, HANDOFF),
Open skill - /brainstorming
Structured idea generation + multi-LLM debate for the product-owner stage. Diverge (generate genuinely different bets), debate (a 4-persona panel on 4 models argues over 2 rounds), converge (synthesize a recommendation). Used by product-owner before architect; available to
Open skill - /cost-model
Standardized cost-estimation framework for great_cto plans. Forces explicit LLM cost, infra cost, human-supervision time, and the (defensible) human-equivalent comparison. Output format is parsable by the board's /api/cost path — must follow exactly.
Open skill - /decision-eval
Spawns the decision-scorer agent after architect proposes 2+ variants in an ADR. Produces a weighted scoring table and recommended choice saved to docs/decisions/.
Open skill

