npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

ceeteeoo

v1.3.0

Published

CTO Roleplay Training — install Cê Tê Ô skills for Claude Code, Cursor, Antigravity and more

Readme

Cê Tê Ô Skills

Roleplay training giúp dev luyện kỹ năng phản biện trước stakeholder khó tính.

Tích hợp vào Claude Code, Cursor, Antigravity, Windsurf, Copilot.


Đóng góp câu mẫu

Nghe được câu hay từ CTO? Thêm vào kho để mọi người cùng luyện.

Cách dễ nhất — không cần biết git:

👉 Tạo Issue mới → điền form → submit

Cách đầy đủ hơn — tự merge:

  1. Fork repo này
  2. Thêm vào .claude/agents/cto-quotes.md theo format:
### [CATEGORY] — <context ngắn>
> "câu nói nguyên văn"

**Hidden move:** <ý đồ thật>
**Kĩ thuật dùng:** <tên kĩ thuật>
**Phản biện:** <câu counter dùng được ngay trong họp>
  1. Tạo PR — CI sẽ tự check format

Cài đặt

Cài npm CLI một lần:

npm install -g ceeteeoo

Sau đó, trong project muốn dùng:

ceeteeoo init --ai claude      # Claude Code
ceeteeoo init --ai cursor      # Cursor
ceeteeoo init --ai antigravity # Antigravity
ceeteeoo init --ai windsurf    # Windsurf
ceeteeoo init --ai copilot     # GitHub Copilot
ceeteeoo init --ai all         # Tất cả

Cài global (dùng được trong mọi project, không cần chạy lại mỗi project):

ceeteeoo init --ai all --global

Claude Code — Global:

mkdir -p ~/.claude/agents ~/.claude/commands
curl -o ~/.claude/agents/cto.md           https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.claude/agents/cto.md
curl -o ~/.claude/agents/cto-quotes.md    https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.claude/agents/cto-quotes.md
curl -o ~/.claude/commands/cto-debate.md  https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.claude/commands/cto-debate.md
curl -o ~/.claude/commands/cto-roast.md   https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.claude/commands/cto-roast.md
curl -o ~/.claude/commands/cto-counter.md https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.claude/commands/cto-counter.md

Cursor / Windsurf — Project-local:

mkdir -p .cursor/rules
curl -o .cursor/rules/cto.mdc         https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.cursor/rules/cto.mdc
curl -o .cursor/rules/cto-debate.mdc  https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.cursor/rules/cto-debate.mdc
curl -o .cursor/rules/cto-roast.mdc   https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.cursor/rules/cto-roast.mdc
curl -o .cursor/rules/cto-counter.mdc https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.cursor/rules/cto-counter.mdc

Antigravity — Project-local:

mkdir -p .antigravity/skills
curl -o .antigravity/skills/cto.md         https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.antigravity/skills/cto.md
curl -o .antigravity/skills/cto-debate.md  https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.antigravity/skills/cto-debate.md
curl -o .antigravity/skills/cto-roast.md   https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.antigravity/skills/cto-roast.md
curl -o .antigravity/skills/cto-counter.md https://raw.githubusercontent.com/nguyenphp/ceeteeoo-skills/main/.antigravity/skills/cto-counter.md

Ví dụ

/cto-counter rồi paste đoạn hội thoại vào:

CTO: "cái bug premium này là do Duy với Kiên chứ ai, backend chưa
      golive mà tụi em đã release là sao?"
Dev: "Dạ backend đã golive từ thứ 3, em có link deploy đây anh."
CTO: "ừ thì... nhưng mà lần sau tụi em phải nói sớm hơn,
      anh không biết backend golive lúc nào đâu"

Output:


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🧑‍💼 CTO nói: "cái bug premium này là do Duy với Kiên chứ ai, backend chưa golive mà tụi em đã release là sao?"

🎯 Pattern: BLAME_NAMED + BLAME_ABSENT — 🟢 Common
🎭 Hidden move: Gọi tên cụ thể 2 người vắng mặt để pin blame trước khi có bất kỳ investigation nào — tạo "tội nhân" ngay trong cuộc họp, người còn lại không dám bênh vực.

💬 Phản biện ngay:
"Anh ơi mình tìm root cause trước — backend golive chưa, log lỗi cụ thể là gì, rồi assign action item sau. Blame trước investigate sau thì sẽ fix sai chỗ."

📚 Dẫn chứng:

  • Blameless Postmortem (Google SRE) — tìm root cause trước, không blame người — vì lỗi hệ thống thường do nhiều yếu tố, không phải 1 người. sre.google/sre-book/postmortem-culture
  • Blame sớm làm team sợ report lỗi → bug bị giấu lâu hơn → thiệt hại lớn hơn.

🔒 Câu chốt nếu ổng tiếp tục:
"Anh có thể confirm backend golive hay chưa trước không? Em có link deploy ở đây. Nếu đã golive thì root cause không phải backend — mình cần điều tra tiếp."

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🧑‍💼 CTO nói: "ừ thì... nhưng mà lần sau tụi em phải nói sớm hơn, anh không biết backend golive lúc nào đâu"

🎯 Pattern: REVERSE_BLAME — 🟢 Common
🎭 Hidden move: Acknowledge thua điểm trước (backend đã golive) nhưng ngay lập tức pivot sang blame dev vì "không communicate sớm" — thoát khỏi blame mà không cần nhận sai.

💬 Phản biện ngay:
"Dạ em có post link deploy lên channel #releases lúc 10:23 sáng thứ 3. Anh muốn tụi em notify thêm ở đâu nữa không? Tụi em làm ngay."

📚 Dẫn chứng:

  • Luôn document mọi thứ có timestamp — link deploy, message Slack, ticket update. Khi bị REVERSE_BLAME, đưa timestamp ra là kết thúc ngay.
  • Nếu chưa có record: "Dạ lần sau em sẽ tag anh trực tiếp — anh muốn notify qua Slack hay email?" — biến thành action item, không nhận blame.

🔒 Câu chốt:
"Anh ơi em có notify rồi — [link message]. Nếu format chưa đúng kỳ vọng thì mình define lại process để lần sau tụi em làm đúng ngay."

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

═══════════════════════════════════════
📋 TỔNG KẾT CHIẾN LƯỢC

Patterns đang dùng: BLAME_NAMEDBLAME_ABSENTREVERSE_BLAME
Điểm yếu: Cả 3 câu đều không có evidence — chỉ có assumption và cảm giác. Câu 2 tự mâu thuẫn với câu 1.

🎯 Nếu chỉ được nói 1 câu:
"Anh ơi backend đã golive thứ 3, em có link — mình investigate log lỗi cụ thể trước nhé?"

📌 Không nhượng bộ:
Không nhận "do tụi em không nói sớm" khi đã có evidence đã notify đúng channel. Nhận action item cải thiện process thì được — nhận blame thì không.
═══════════════════════════════════════


Cách dùng

Claude Code

| Command | Dùng khi nào | |---|---| | use cto | Roleplay trực tiếp — luyện phản biện | | /cto-debate | Chuẩn bị trước meeting — roleplay hoặc tạo report HTML | | /cto-roast | Phân tích rủi ro ticket + simulate CTO attack | | /cto-counter | Paste hội thoại thật → nhận counter-argument + dẫn chứng |

Ví dụ:

use cto

/cto-debate US-1156
/cto-debate tại sao cần thêm 3 ngày cho premium flow

/cto-roast US-1065 --challenge

/cto-counter
[paste đoạn chat vào]

Cursor / Windsurf

@cto CTO nói bug này không nghiêm trọng, lên được
@cto-debate tại sao cần thêm 3 ngày
@cto-counter [paste đoạn chat]

Antigravity

@cto deadline gấp nên phải đổi squad
@cto-debate US-1156
@cto-counter [paste đoạn chat]

Cấu hình Jira (tuỳ chọn)

/cto-debate/cto-roast tự fetch ticket nếu set env:

export JIRA_TOKEN="your_personal_token"
export JIRA_BASE_URL="https://your-company.atlassian.net"

Không có Jira thì mô tả bằng text cũng được.


Pattern hiện có

| Category | Mô tả | |---|---| | BLAME_ABSENT | Gọi tên người vắng mặt để né trách nhiệm | | BLAME_NAMED | Pin blame bằng tên cụ thể | | REVERSE_BLAME | Đổ ngược lại cho người report | | OFFICIAL_BLAME | Ghi biên bản đổ thừa | | DOWNPLAY_BUG | Dismiss bug trước khi investigate | | DOWNPLAY_TRAFFIC | Dùng traffic thấp để bypass bug | | TAUTOLOGY | Logic vòng tròn | | ATTACK_OVERTHINKER | Làm người phản biện tự nghi ngờ | | YES_BUT | Khen rồi invalidate | | OPINION_AS_FACT | Cảm giác thay cho data | | INVISIBLE_DELEGATE | Assign việc giữa cuộc họp không báo | | SCOPE_BLAME | Blame dev vì làm đúng spec | | URGENCY_OVERRIDE | Dùng deadline để bypass process | | ACCOUNTABILITY_SHIFT | Đẩy trách nhiệm xuống người implement | | COMPLEXITY_MINIMIZATION | Nhìn từ xa rồi kết luận "dễ" | | CULTURE_ABUSE | Dùng văn hóa startup để bypass process | | NODOC_SHORTCUT | "Không có thời gian document" | | REDIRECT_QUESTION | Trả lời lạc câu hỏi để né accountability | | LABEL_SILENCING | Dán nhãn để loại người phản biện | | SQUAD_COMPARE_ABSOLUTE | So sánh bug count không cùng baseline | | SQUAD_COMPARE_NARRATIVE | Dùng squad khác để dismiss | | WORKLOAD_IGNORE | Giao nhiều nhất rồi blame bug nhiều nhất |