<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>PCS Vietnam Blog</title>
        <link>https://pcs.io.vn/en/blog</link>
        <description>PCS Vietnam Blog</description>
        <lastBuildDate>Sun, 05 Apr 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[How to Enforce Browser Policies Without a MDM]]></title>
            <link>https://pcs.io.vn/en/blog/browser-policy-without-mdm</link>
            <guid>https://pcs.io.vn/en/blog/browser-policy-without-mdm</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Most Vietnamese SMBs don't have Intune or SCCM. They have a mix of domain-joined PCs, workgroup machines, and sometimes both on the same floor. But you can still enforce consistent browser policies across all of them — using nothing but registry keys and a PowerShell script.]]></description>
            <content:encoded><![CDATA[<p>Most Vietnamese SMBs don't have Intune or SCCM. They have a mix of domain-joined PCs, workgroup machines, and sometimes both on the same floor. But you can still enforce consistent browser policies across all of them — using nothing but registry keys and a PowerShell script.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-browser-policy-matters">Why Browser Policy Matters<a href="https://pcs.io.vn/en/blog/browser-policy-without-mdm#why-browser-policy-matters" class="hash-link" aria-label="Direct link to Why Browser Policy Matters" title="Direct link to Why Browser Policy Matters">​</a></h2>
<p>Your browser is the #1 attack surface for most office workers. Phishing links, malicious extensions, HTTP sites that look legitimate — all of these land in the browser first.</p>
<p>The good news: Chrome and Edge both respect Windows Registry policies. You don't need a full MDM to lock them down. You just need the right registry keys and a way to deploy them.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-it-works">How It Works<a href="https://pcs.io.vn/en/blog/browser-policy-without-mdm#how-it-works" class="hash-link" aria-label="Direct link to How It Works" title="Direct link to How It Works">​</a></h2>
<p>Both Chrome and Edge read from:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">HKLM\SOFTWARE\Policies\Google\Chrome\</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">HKLM\SOFTWARE\Policies\Microsoft\Edge\</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Any value you write there overrides the browser's default behavior — and the user can't change it from the Settings UI. It's enforced silently, survives browser updates, and works identically whether the machine is on a domain or not.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="15-policies-worth-deploying">15 Policies Worth Deploying<a href="https://pcs.io.vn/en/blog/browser-policy-without-mdm#15-policies-worth-deploying" class="hash-link" aria-label="Direct link to 15 Policies Worth Deploying" title="Direct link to 15 Policies Worth Deploying">​</a></h2>
<p>Here's what I recommend as a baseline for any organization:</p>
<table><thead><tr><th>Policy</th><th>What it does</th><th>Risk level without it</th></tr></thead><tbody><tr><td><code>HomepageLocation</code></td><td>Force internal portal as homepage</td><td>Low — UX only</td></tr><tr><td><code>DefaultSearchProviderEnabled</code></td><td>Lock default search engine</td><td>Medium — data leakage</td></tr><tr><td><code>SafeBrowsingEnabled</code></td><td>Enable phishing/malware protection</td><td>High</td></tr><tr><td><code>PasswordManagerEnabled</code></td><td>Disable built-in password manager</td><td>High (if using enterprise password manager)</td></tr><tr><td><code>ExtensionInstallBlocklist</code></td><td>Block all extensions by default</td><td>High</td></tr><tr><td><code>ExtensionInstallAllowlist</code></td><td>Whitelist approved extensions</td><td>Required with blocklist</td></tr><tr><td><code>SSLErrorOverrideAllowed</code></td><td>Prevent users bypassing SSL errors</td><td>High</td></tr><tr><td><code>IncognitoModeAvailability</code></td><td>Disable incognito/InPrivate</td><td>Medium</td></tr><tr><td><code>AutofillCreditCardEnabled</code></td><td>Disable credit card autofill</td><td>Medium</td></tr><tr><td><code>AutofillAddressEnabled</code></td><td>Disable address autofill</td><td>Low</td></tr><tr><td><code>TranslateEnabled</code></td><td>Control Google Translate</td><td>Low</td></tr><tr><td><code>DeveloperToolsAvailability</code></td><td>Restrict DevTools</td><td>Medium (prevents JS injection)</td></tr><tr><td><code>SyncDisabled</code></td><td>Disable browser account sync</td><td>High (data residency)</td></tr><tr><td><code>BrowserSignin</code></td><td>Control sign-in behavior</td><td>High</td></tr><tr><td><code>MetricsReportingEnabled</code></td><td>Control telemetry</td><td>Low — compliance only</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="deploying-via-powershell">Deploying via PowerShell<a href="https://pcs.io.vn/en/blog/browser-policy-without-mdm#deploying-via-powershell" class="hash-link" aria-label="Direct link to Deploying via PowerShell" title="Direct link to Deploying via PowerShell">​</a></h2>
<p>Each policy maps to a single registry value. A basic Set script looks like this:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">#Requires -RunAsAdministrator</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">function Ensure-RegistryPath {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    param([string]$Path)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    if (-not (Test-Path $Path)) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        New-Item -Path $Path -Force | Out-Null</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ChromePath = "HKLM:\SOFTWARE\Policies\Google\Chrome"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$EdgePath   = "HKLM:\SOFTWARE\Policies\Microsoft\Edge"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Ensure-RegistryPath $ChromePath</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Ensure-RegistryPath $EdgePath</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># Enable Safe Browsing</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Set-ItemProperty -Path $ChromePath -Name "SafeBrowsingEnabled" -Value 1 -Type DWord</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Set-ItemProperty -Path $EdgePath   -Name "SmartScreenEnabled"  -Value 1 -Type DWord</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>And every Set script should have a matching Remove script that cleans up the keys:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">#Requires -RunAsAdministrator</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ChromePath = "HKLM:\SOFTWARE\Policies\Google\Chrome"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$EdgePath   = "HKLM:\SOFTWARE\Policies\Microsoft\Edge"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Remove-ItemProperty -Path $ChromePath -Name "SafeBrowsingEnabled" -ErrorAction SilentlyContinue</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Remove-ItemProperty -Path $EdgePath   -Name "SmartScreenEnabled"  -ErrorAction SilentlyContinue</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>This is the Set/Remove pattern — for every policy you deploy, you have a clean rollback path.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="deploy-via-action1">Deploy via Action1<a href="https://pcs.io.vn/en/blog/browser-policy-without-mdm#deploy-via-action1" class="hash-link" aria-label="Direct link to Deploy via Action1" title="Direct link to Deploy via Action1">​</a></h2>
<p>If you're using Action1 (free up to 200 endpoints — the right choice for Vietnamese SMBs), deployment is straightforward:</p>
<ol>
<li>Upload the <code>.ps1</code> to Action1 → Scripts</li>
<li>Create a Policy, target by OU or tag</li>
<li>Set scheduled enforcement (weekly re-run to catch new machines)</li>
</ol>
<p>The scripts run as SYSTEM with elevation, so no UAC prompts, no user interaction.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="skip-gpo-if-you-can">Skip GPO If You Can<a href="https://pcs.io.vn/en/blog/browser-policy-without-mdm#skip-gpo-if-you-can" class="hash-link" aria-label="Direct link to Skip GPO If You Can" title="Direct link to Skip GPO If You Can">​</a></h2>
<p>GPO works, but it has friction: you need a DC, you need the ADMX templates imported, and workgroup machines are excluded entirely. Registry-based PowerShell scripts work everywhere — domain, workgroup, Azure AD joined, hybrid. Same behavior, zero dependencies.</p>
<p>The only thing GPO gives you that scripts don't is real-time enforcement on policy change. For most SMBs, a weekly re-run schedule covers that gap.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="use-the-generator">Use the Generator<a href="https://pcs.io.vn/en/blog/browser-policy-without-mdm#use-the-generator" class="hash-link" aria-label="Direct link to Use the Generator" title="Direct link to Use the Generator">​</a></h2>
<p>Rather than writing these scripts by hand, I built a tool that generates ready-to-deploy Set and Remove <code>.ps1</code> scripts for all 15 policies above:</p>
<p><strong><a href="https://pcs.io.vn/tools/browser-policy" target="_blank" rel="noopener noreferrer">Browser Policy Manager → pcs.io.vn/tools/browser-policy</a></strong></p>
<p>Select the policies you want, configure the values, and download two files: <code>Set-BrowserPolicy.ps1</code> and <code>Remove-BrowserPolicy.ps1</code>. Upload directly to Action1.</p>
<p>The tool covers Chrome and Edge simultaneously — one script pair, both browsers.</p>]]></content:encoded>
            <category>browser-policy</category>
            <category>chrome</category>
            <category>edge</category>
            <category>windows</category>
            <category>powershell</category>
            <category>security</category>
        </item>
        <item>
            <title><![CDATA[Everything Claude Code: What's Worth Taking (And What Isn't)]]></title>
            <link>https://pcs.io.vn/en/blog/everything-claude-code-review</link>
            <guid>https://pcs.io.vn/en/blog/everything-claude-code-review</guid>
            <pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Everything Claude Code is an Anthropic Hackathon-winning repo with 50K+ stars. It ships 156 skills, 72 commands, 38 agents, and a full hooks system for Claude Code. Here's my honest breakdown after auditing it for my own stack.]]></description>
            <content:encoded><![CDATA[<p><a href="https://github.com/affaan-m/everything-claude-code" target="_blank" rel="noopener noreferrer">Everything Claude Code</a> is an Anthropic Hackathon-winning repo with 50K+ stars. It ships 156 skills, 72 commands, 38 agents, and a full hooks system for Claude Code. Here's my honest breakdown after auditing it for my own stack.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-actually-in-here">What's Actually In Here<a href="https://pcs.io.vn/en/blog/everything-claude-code-review#whats-actually-in-here" class="hash-link" aria-label="Direct link to What's Actually In Here" title="Direct link to What's Actually In Here">​</a></h2>
<p>The repo is structured around four core components:</p>
<table><thead><tr><th>Component</th><th>Count</th><th>What it does</th></tr></thead><tbody><tr><td><code>skills/</code></td><td>156</td><td>Workflow definitions — domain knowledge bundled into reusable prompts</td></tr><tr><td><code>commands/</code></td><td>72</td><td>Slash command shims (mostly <code>/tdd</code>, <code>/plan</code>, <code>/code-review</code>, etc.)</td></tr><tr><td><code>agents/</code></td><td>38</td><td>Subagent configs for delegating specific tasks</td></tr><tr><td><code>hooks/</code></td><td>12+</td><td>Lifecycle automations (PreToolUse, Stop, SessionStart, etc.)</td></tr></tbody></table>
<p>Plus language-specific rules for TypeScript, Python, Go, Java, Kotlin, Swift, C++, Rust, Perl, PHP, and more.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="claude-only-vs-cross-agent">Claude-Only vs Cross-Agent<a href="https://pcs.io.vn/en/blog/everything-claude-code-review#claude-only-vs-cross-agent" class="hash-link" aria-label="Direct link to Claude-Only vs Cross-Agent" title="Direct link to Claude-Only vs Cross-Agent">​</a></h2>
<p>The first thing to understand: most of this is Claude Code-specific.</p>
<p><strong>Claude Code only:</strong></p>
<ul>
<li><code>~/.claude/skills/</code> — only Claude Code reads these</li>
<li><code>~/.claude/commands/</code> — slash command definitions</li>
<li><code>~/.claude/agents/</code> — subagent configs</li>
<li>Hooks in <code>settings.json</code> — lifecycle events Claude Code fires</li>
</ul>
<p><strong>Cross-agent (works with Gemini, Cursor, etc.):</strong></p>
<ul>
<li><code>rules/common/*.md</code> — security and style guidelines any AI can follow</li>
<li><code>mcp-configs/</code> — MCP server JSON configs, client-agnostic</li>
<li>Any rule content you paste into a shared CLAUDE.md / AGENTS.md</li>
</ul>
<p>If you run multiple AI environments (I use Claude Code + Antigravity/Gemini), the rules folder is the most transferable investment.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-hooks-problem">The Hooks Problem<a href="https://pcs.io.vn/en/blog/everything-claude-code-review#the-hooks-problem" class="hash-link" aria-label="Direct link to The Hooks Problem" title="Direct link to The Hooks Problem">​</a></h2>
<p>The hooks look powerful on paper:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"PreToolUse"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"matcher"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Bash"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"hooks"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"type"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"command"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"command"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"npx block-no-verify@1.1.2"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"description"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Block --no-verify on git commits"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>But 90% of them reference <code>${CLAUDE_PLUGIN_ROOT}/scripts/hooks/*.js</code> — Node.js scripts that only exist inside the installed plugin. You cannot cherry-pick the hooks JSON without installing the full package.</p>
<p>The simpler hooks (like <code>block-no-verify</code>) work standalone. The rest require <code>install.ps1 --profile full</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-i-actually-kept-cloudflarereact-stack">What I Actually Kept (Cloudflare/React Stack)<a href="https://pcs.io.vn/en/blog/everything-claude-code-review#what-i-actually-kept-cloudflarereact-stack" class="hash-link" aria-label="Direct link to What I Actually Kept (Cloudflare/React Stack)" title="Direct link to What I Actually Kept (Cloudflare/React Stack)">​</a></h2>
<p>My stack is JavaScript, React/Docusaurus, and Cloudflare Workers — not Python or Java. Out of 156 skills, about 8 are directly relevant:</p>
<p><strong>Skills worth keeping:</strong></p>
<table><thead><tr><th>Skill</th><th>Why</th></tr></thead><tbody><tr><td><code>security-review</code></td><td>Auth endpoints, API keys, worker security</td></tr><tr><td><code>mcp-server-patterns</code></td><td>Building MCP servers on Cloudflare Workers</td></tr><tr><td><code>api-design</code></td><td>REST conventions for multi-tenant APIs</td></tr><tr><td><code>frontend-patterns</code></td><td>React component patterns</td></tr><tr><td><code>deployment-patterns</code></td><td>Cloudflare Pages/Workers deploy flow</td></tr><tr><td><code>database-migrations</code></td><td>D1 schema management</td></tr><tr><td><code>git-workflow</code></td><td>Branch strategy and commit conventions</td></tr></tbody></table>
<p><strong>Commands worth keeping:</strong></p>
<table><thead><tr><th>Command</th><th>Why</th></tr></thead><tbody><tr><td><code>/code-review</code></td><td>Pre-push quality check</td></tr><tr><td><code>/security-scan</code></td><td>Before deploying auth code</td></tr><tr><td><code>/build-fix</code></td><td>When Docusaurus build breaks</td></tr><tr><td><code>/plan</code></td><td>Implementation planning on complex features</td></tr></tbody></table>
<p><strong>Agents worth keeping:</strong></p>
<table><thead><tr><th>Agent</th><th>Why</th></tr></thead><tbody><tr><td><code>code-reviewer.md</code></td><td>Delegate review to subagent</td></tr><tr><td><code>security-reviewer.md</code></td><td>Dedicated security analysis</td></tr></tbody></table>
<p><strong>Rules worth merging into CLAUDE.md:</strong></p>
<ul>
<li><code>rules/common/security.md</code> — solid baseline checklist</li>
<li><code>rules/common/coding-style.md</code> — immutability, file organization</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-i-skipped">What I Skipped<a href="https://pcs.io.vn/en/blog/everything-claude-code-review#what-i-skipped" class="hash-link" aria-label="Direct link to What I Skipped" title="Direct link to What I Skipped">​</a></h2>
<ul>
<li>All Python, Java, Kotlin, Swift, Android, Rust, PHP, Perl skills (not my stack)</li>
<li>The full hooks system (requires Node.js environment + full install)</li>
<li>Agent harness orchestration (overkill for a solo operator)</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-install-selectively">How to Install Selectively<a href="https://pcs.io.vn/en/blog/everything-claude-code-review#how-to-install-selectively" class="hash-link" aria-label="Direct link to How to Install Selectively" title="Direct link to How to Install Selectively">​</a></h2>
<p>The repo ships <code>install.ps1</code> / <code>install.sh</code> with <code>--profile full</code> or per-language flags:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># Install only what you need</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">.\install.ps1 typescript     # TypeScript rules only</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">.\install.ps1 --profile full  # Everything (156 skills, all rules)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>For a selective cherry-pick without the installer:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># Copy only the skills you want</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cp -r skills/security-review ~/.claude/skills/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cp -r skills/mcp-server-patterns ~/.claude/skills/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cp -r skills/api-design ~/.claude/skills/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># Copy useful commands</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cp commands/code-review.md ~/.claude/commands/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cp commands/security-scan.md ~/.claude/commands/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># Copy common rules</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cp rules/common/security.md ~/.claude/rules/</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bottom-line">Bottom Line<a href="https://pcs.io.vn/en/blog/everything-claude-code-review#bottom-line" class="hash-link" aria-label="Direct link to Bottom Line" title="Direct link to Bottom Line">​</a></h2>
<p>ECC is genuinely useful — but it's built for polyglot teams shipping TypeScript, Python, Go, Java, and Kotlin simultaneously. If your stack is narrower, install selectively.</p>
<p>The two things worth having regardless of stack:</p>
<ol>
<li><strong><code>rules/common/security.md</code></strong> — every project benefits from this checklist</li>
<li><strong><code>skills/security-review/</code></strong> — activates automatically when you touch auth code</li>
</ol>
<p>Everything else: read the skill, decide if it matches your actual workflow, copy only what you'll actually invoke.</p>
<hr>
<p><em>Stack: Cloudflare Workers + D1, Docusaurus 3.7, React 18, PowerShell. Running Claude Code (Pro) as primary coding environment.</em></p>]]></content:encoded>
            <category>claude</category>
            <category>ai-tools</category>
            <category>productivity</category>
            <category>developer-tools</category>
        </item>
        <item>
            <title><![CDATA[Greetings!]]></title>
            <link>https://pcs.io.vn/en/blog/greetings</link>
            <guid>https://pcs.io.vn/en/blog/greetings</guid>
            <pubDate>Fri, 07 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Congratulations, you have made your first post!]]></description>
            <content:encoded><![CDATA[<p>Congratulations, you have made your first post!</p>
<p>Feel free to play around and edit this post as much as you like.</p>]]></content:encoded>
            <category>greetings</category>
        </item>
    </channel>
</rss>