Getting hands on
Some usefuls command in Claude Code
- Double
esc: Restore the code and/or conversation to the point before. This could help to remove context not revelant to the current task. /compact: Use this when you are feeling you are done with current task and move to next task, distinct task within the same session or your context window is getting full (60%-75% Utilization)/clear: When you feeling AI seems confused or become dumb because previous conversation "noise". Btw it's actually is fresh restart?
This image is copied from the course: Claude Code in Action

Commands
Now it is called skills. So in essence, when we type /command-name in Claude Code, it will load content of markdown file into conversation like an instruction for LLM, it is not shell script it is prompt-based. Claude Code will read and follow that fucking instruction.
Where we would define it?:
- Project:
.claude/skills/<skill-name-here>/SKILL.md - Personal (for global):
~/.claude/skills/<skill-name-here>/SKILL.md
It does support argument which already mentioned in course: $ARGUMENTS in markdown file. Example: /holy-fuck 123 will replace $ARGUMENTS to be 123. That is basic, no idea about $0, $1 right now xD
Important: Project skills override personal skills when skill name is duplicated!
Conclusion: custom command = skill = shortcut for instruction!
MCP servers with Claude Code
The most common MCP server you often see with Claude code is: playwright
Install it by: claude mcp add playwright npx @playwright/mcp@latest
Example: while writing this fucking article. I have http://127.0.0.1:8000/ is opening

Claude setting for auto allow MCP Playwright
{
"permissions": {
"allow": [
"mcp__playwright__browser_navigate",
"mcp__playwright__browser_snapshot"
]
}
}
Or even shorter
{
"permissions": {
"allow": ["mcp__playwright"],
"deny": []
}
}
Image conclusion (taken from the course), pretty helpful to understand how it works!

MCP Servers explain
Hmm, I mentioned MCP Server above but I don't understand it well enough I guess. So let's me introduce what I understand about it. MCP Server (Model Context Protocol Server)
I think it is the best to make a reflection, I want to point to Grafana Data Source.
What make they are the same?
-
They are all standard interface (seems like CNI for K8S? xD), Grafana don't give a fuck backend is VictoriaMetric or Prometheus, as long as data source plugin follows interface. Same for Claude don't need to know what is behind MCP Server, only need MCP Server expose right protocol?
-
What is right protocol? Read it here: https://modelcontextprotocol.io/specification/2025-11-25.
So for MCP Server need expose right format
- Tools - define name of tool, describe what this tool do and JSON schema for input/output. Example Playwright MCP Server define tool browser_navigate take param
urlas string type. - Message format - All messages in MCP MUST follow the JSON-RPC 2.0 specification. The protocol defines three types of messages: Request, Responses, Notification
- Transport: The protocol currently defines two standard transport mechanisms for client-server communication. stdio and Streamable HTTP
Alright, If you want to deep dive about MCP Server: Go here bro. Back to reflection...
- It is all follow plugin architecture. If you want to use new source, install new data source / MCP Server, no need to edit the fucking core.
- Allow query/interact with system ouside via middle interface.
But here is little different: Grafana data source mostly read (query metric/log/display). While MCP do both way, read (search) and write (click, navigate, create issue, send msg...) So for better reflection, MCP like data source but have ability write-back/ execution action, not read only.
I hope this reflection will help you to understand essence of MCP Server xD
Github Integration
For complete detail you can watch here: Github Integration
What I understand, so basically, everytime we call claude in PR/Issue by @claude, it will trigger Github Action workflow (we need to set it up), Claude run with full codebase access --> reply result directly in that fucking issue/pr.
Playwright MCP is optional, not really required if you don't need to test UI, no need to setup it then.
One more thing that worth to mention: auto PR review, everytime we create new fucking PR, Claude automatically review and comment without tag.
So for complete simple flow:
- Create new issue with description like:
@claude Fix this fucking login bug. It doesn't work
- Github Action trigger.
- Claude read code, analyze and fix bug.
- Claude reply result or even can create PR fix directly in that issue.
Note: Permission setup can be little confused or taking time, but only need 1 time setup.
Hooks and the SDK
Time to sleep. Still have Hooks and the SDK to do.