<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Daniel (San) Ávila</title>
    <description>The latest articles on DEV Community by Daniel (San) Ávila (@dani_avila7).</description>
    <link>https://dev.to/dani_avila7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F976708%2Fd07d7618-b828-43f9-8031-1e69e7ec0eb7.jpeg</url>
      <title>DEV Community: Daniel (San) Ávila</title>
      <link>https://dev.to/dani_avila7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dani_avila7"/>
    <language>en</language>
    <item>
      <title>Installs Claude Code Mods with one command</title>
      <dc:creator>Daniel (San) Ávila</dc:creator>
      <pubDate>Wed, 21 Oct 2026 15:03:00 +0000</pubDate>
      <link>https://dev.to/dani_avila7/installs-claude-code-mods-with-one-command-36h8</link>
      <guid>https://dev.to/dani_avila7/installs-claude-code-mods-with-one-command-36h8</guid>
      <description>&lt;p&gt;Mods let you hook into Claude Code while it works: block a command, rewrite a tool call, redact a secret from a result, or draw a live pane above the prompt. Until recently that meant writing the module yourself, packaging it as a plugin and publishing a marketplace. The Mods catalog on &lt;a href="https://www.aitmpl.com" rel="noopener noreferrer"&gt;aitmpl.com&lt;/a&gt; removes those steps: 38 mods, one command each.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a Mod is
&lt;/h2&gt;

&lt;p&gt;A Mod is a Claude Code plugin whose behavior lives in a function-hooks module. A shell hook reacts to an event after the fact. A function hook wraps the event: your function receives the engine object &lt;code&gt;$&lt;/code&gt;, the event &lt;code&gt;e&lt;/code&gt;, and a &lt;code&gt;next&lt;/code&gt; continuation, and decides what happens.&lt;/p&gt;

&lt;p&gt;That gives three positions instead of one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Observe.&lt;/strong&gt; Await &lt;code&gt;next(e)&lt;/code&gt; and inspect what came back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rewrite.&lt;/strong&gt; Call &lt;code&gt;next({ ...e, input })&lt;/code&gt; with changed data, or change the result on the way out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Answer.&lt;/strong&gt; Return &lt;code&gt;{ deny: "reason" }&lt;/code&gt; and never call &lt;code&gt;next&lt;/code&gt;. The tool does not run.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The module runs in a sandbox of its own, with no DOM and no Node. Everything outside it goes through &lt;code&gt;$&lt;/code&gt;: &lt;code&gt;$.ui&lt;/code&gt;, &lt;code&gt;$.http&lt;/code&gt;, &lt;code&gt;$.fs&lt;/code&gt;, &lt;code&gt;$.process&lt;/code&gt;, &lt;code&gt;$.state&lt;/code&gt;, &lt;code&gt;$.store&lt;/code&gt;, &lt;code&gt;$.session&lt;/code&gt;, &lt;code&gt;$.command&lt;/code&gt;, &lt;code&gt;$.tool&lt;/code&gt;, &lt;code&gt;$.model&lt;/code&gt; and &lt;code&gt;$.clock&lt;/code&gt;. That is what makes a mod more than a filter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr97aiu38kdakq1gto39f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr97aiu38kdakq1gto39f.png" alt="image" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  It is a plugin, so there are two ways to get one
&lt;/h2&gt;

&lt;p&gt;Mods are distributed as plugins. The standard route is a plugin marketplace (a repo with &lt;code&gt;.claude-plugin/marketplace.json&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add &amp;lt;repo&amp;gt;
/plugin &lt;span class="nb"&gt;install&lt;/span&gt; &amp;lt;mod&amp;gt;@&amp;lt;marketplace&amp;gt;
/reload-plugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With aitmpl.com you skip that. Pick a mod on the site, copy the command, run it in your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx claude-code-templates@latest &lt;span class="nt"&gt;--mod&lt;/span&gt; security/secret-redactor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CLI downloads the whole plugin directory (&lt;code&gt;.claude-plugin/plugin.json&lt;/code&gt;, &lt;code&gt;hooks/&lt;/code&gt;, commands, types, tests) and writes it to &lt;code&gt;.claude/skills/secret-redactor/&lt;/code&gt;. Claude Code loads it on the next session as &lt;code&gt;secret-redactor@skills-dir&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4kfw06nixfe1f9i643qj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4kfw06nixfe1f9i643qj.png" alt="image" width="799" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two details that trip people up:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Trust.&lt;/strong&gt; A project’s &lt;code&gt;.claude/skills/&lt;/code&gt; is only read once you have accepted the workspace trust prompt. In a folder you never opened interactively (for example a headless &lt;code&gt;claude -p&lt;/code&gt; run) the mod does not load. Install it in &lt;code&gt;~/.claude/skills/&lt;/code&gt; if you want it everywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Options.&lt;/strong&gt; Mod options are declared as &lt;code&gt;userConfig&lt;/code&gt; in &lt;code&gt;plugin.json&lt;/code&gt; and read from your &lt;strong&gt;user&lt;/strong&gt; settings, keyed by the full plugin id:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"pluginConfigs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"npm-to-pnpm-rewriter@skills-dir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"manager"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yarn"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the wrong key (&lt;code&gt;"npm-to-pnpm-rewriter"&lt;/code&gt;) and every option silently stays at its default.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is in the catalog
&lt;/h2&gt;

&lt;p&gt;Seven categories, 38 mods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;security&lt;/strong&gt;: &lt;code&gt;secret-redactor&lt;/code&gt;, &lt;code&gt;block-destructive-commands&lt;/code&gt;, &lt;code&gt;protected-paths-guard&lt;/code&gt;, &lt;code&gt;large-edit-confirmation&lt;/code&gt;, &lt;code&gt;jev-auto-mode&lt;/code&gt;, &lt;code&gt;jev-guardrails&lt;/code&gt;, &lt;code&gt;jev-vercel-sandbox&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;productivity&lt;/strong&gt;: &lt;code&gt;aitmpl&lt;/code&gt; (a component browser inside Claude Code), &lt;code&gt;npm-to-pnpm-rewriter&lt;/code&gt;, &lt;code&gt;webfetch-cache&lt;/code&gt;, &lt;code&gt;jev-model-router&lt;/code&gt;, &lt;code&gt;jev-skill-suggestion&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ui&lt;/strong&gt;: &lt;code&gt;agent-flow&lt;/code&gt;, &lt;code&gt;git-sidebar&lt;/code&gt;, &lt;code&gt;tool-timing-badge&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;observability&lt;/strong&gt;: &lt;code&gt;prompt-cache-control&lt;/code&gt;, &lt;code&gt;universal-audit-log&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;integrations&lt;/strong&gt;: &lt;code&gt;linear-tickets&lt;/code&gt;, &lt;code&gt;vercel-deploys&lt;/code&gt;, &lt;code&gt;neon-branch-per-session&lt;/code&gt;, &lt;code&gt;websearch-to-exa&lt;/code&gt;, &lt;code&gt;pi-agent-for-claude&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;enterprise&lt;/strong&gt;: &lt;code&gt;admin-capability-lockdown&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;games&lt;/strong&gt;: 15 of them above the prompt, from &lt;code&gt;snake&lt;/code&gt; and &lt;code&gt;tetris&lt;/code&gt; to &lt;code&gt;doom&lt;/code&gt;, &lt;code&gt;pacman&lt;/code&gt; and &lt;code&gt;tool-defense&lt;/code&gt;, where every enemy is one of Claude's real tool calls&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Terminal and Desktop
&lt;/h2&gt;

&lt;p&gt;Mods are not terminal-only. The official guide demos each one in both Claude Code in the terminal and Claude Code Desktop, and surfaces like panes and status lines are drawn through &lt;code&gt;$.ui.resolve(e)&lt;/code&gt;, which returns the constructors for whichever surface you are on. Same plugin, same install command, both places.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code 2.1.287 or later.&lt;/strong&gt; Per the official guide, mods are on by default; there is nothing to enable. (Earlier early-access builds needed &lt;code&gt;CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1&lt;/code&gt;.)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;$&lt;/code&gt; API is still young and can change between releases. The catalog's type definitions follow Claude Code 2.1.283 and every mod is typechecked against them in CI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Debugging a mod that seems silent
&lt;/h2&gt;

&lt;p&gt;Before touching the code, check in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is the project trusted? (See above.)&lt;/li&gt;
&lt;li&gt;Are you looking in the right place? &lt;code&gt;$.ui.log&lt;/code&gt; goes to the transcript and to &lt;code&gt;~/.claude/debug/&amp;lt;session-id&amp;gt;.txt&lt;/code&gt;; in &lt;code&gt;claude -p&lt;/code&gt; it only reaches the debug file.&lt;/li&gt;
&lt;li&gt;Is &lt;code&gt;pluginConfigs&lt;/code&gt; keyed by &lt;code&gt;name@skills-dir&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Does &lt;code&gt;claude --debug&lt;/code&gt; show &lt;code&gt;hooks module &amp;lt;name&amp;gt;@skills-dir loaded&lt;/code&gt;?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A note on model routers: a mod that rewrites &lt;code&gt;model&lt;/code&gt; or &lt;code&gt;effort&lt;/code&gt; at &lt;code&gt;turn.step&lt;/code&gt; changes that request only. The header, the status line and the effort box show your session's setting and will not move.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx claude-code-templates@latest &lt;span class="nt"&gt;--mod&lt;/span&gt; games/pacman
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Browse the catalog at &lt;a href="https://www.aitmpl.com" rel="noopener noreferrer"&gt;aitmpl.com&lt;/a&gt;, validate any installed mod with &lt;code&gt;claude plugin validate &amp;lt;dir&amp;gt;&lt;/code&gt;, and run its tests with &lt;code&gt;claude plugin test &amp;lt;dir&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the Mods live
&lt;/h2&gt;

&lt;p&gt;Every mod has its own page with the install command, the options it accepts and what it hooks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.aitmpl.com/component/mod/security/secret-redactor" rel="noopener noreferrer"&gt;Secret Redactor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.aitmpl.com/component/mod/games/pacman" rel="noopener noreferrer"&gt;Pacman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.aitmpl.com/mods" rel="noopener noreferrer"&gt;The full Mods catalog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.aitmpl.com" rel="noopener noreferrer"&gt;aitmpl.com&lt;/a&gt; for the rest of the components: agents, commands, skills, hooks, MCPs and settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3l7d2jdhhmerzxj2blcl.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3l7d2jdhhmerzxj2blcl.jpeg" alt="image" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  You can follow me on my social media:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Twitter (English): &lt;a href="https://x.com/dani_avila7" rel="noopener noreferrer"&gt;https://x.com/dani_avila7&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn (Spanish): &lt;a href="https://www.linkedin.com/in/daniel-avila-arias/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/daniel-avila-arias/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube (Spanish): &lt;a href="https://www.youtube.com/@daniiielsan" rel="noopener noreferrer"&gt;https://www.youtube.com/@daniiielsan&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Instagram (Spanish): &lt;a href="https://www.instagram.com/danielsan_avila/" rel="noopener noreferrer"&gt;https://www.instagram.com/danielsan_avila/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>devtools</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Ultra Config switches your whole Claude Code setup between five profiles mid-session</title>
      <dc:creator>Daniel (San) Ávila</dc:creator>
      <pubDate>Mon, 19 Oct 2026 15:00:58 +0000</pubDate>
      <link>https://dev.to/dani_avila7/ultra-config-switches-your-whole-claude-code-setup-between-five-profiles-mid-session-4199</link>
      <guid>https://dev.to/dani_avila7/ultra-config-switches-your-whole-claude-code-setup-between-five-profiles-mid-session-4199</guid>
      <description>&lt;p&gt;I keep changing the same handful of things in Claude Code depending on what I am doing. Cheap and quiet when I am grinding through a long refactor. The most capable model and maximum effort when the problem is actually hard. Everything asking first when I am working in someone else’s repo. Those are different values in different places, and I was editing them by hand every time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.aitmpl.com/component/mod/productivity/ultra-config" rel="noopener noreferrer"&gt;Ultra Config&lt;/a&gt; is a Mod I built so that it is one press instead.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2111558707033018828-99" src="https://platform.twitter.com/embed/Tweet.html?id=2111558707033018828"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2111558707033018828-99');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2111558707033018828&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Five profiles, one press each
&lt;/h2&gt;

&lt;p&gt;Each profile is a list of settings with a reason attached to every one of them. This is what they set:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Token saver&lt;/strong&gt;: model &lt;code&gt;sonnet&lt;/code&gt;, effort &lt;code&gt;low&lt;/code&gt;, subagents on &lt;code&gt;haiku&lt;/code&gt;, Concise output, no prompt suggestions or recap, auto-compact on, small workflow fan-outs, the &lt;code&gt;ultracode&lt;/code&gt; keyword off, and MCP output capped at 10,000 tokens (the default is 25,000).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast flow&lt;/strong&gt;: model &lt;code&gt;sonnet&lt;/code&gt;, effort &lt;code&gt;medium&lt;/code&gt;, edits auto-accepted, Concise output, prompt suggestions on, turn duration and the progress bar on, medium workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Max quality&lt;/strong&gt;: the most capable model available to you, effort &lt;code&gt;xhigh&lt;/code&gt;, subagents keep whatever model they ask for, default output style, workflows on with large fan-outs and the &lt;code&gt;ultracode&lt;/code&gt; keyword, checkpoints and auto-compact on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guarded&lt;/strong&gt;: every edit and command asks first, plan mode never acts on its own, &lt;code&gt;bypassPermissions&lt;/code&gt; disabled, Read deny rules for &lt;code&gt;.env&lt;/code&gt;, &lt;code&gt;secrets/&lt;/code&gt;, &lt;code&gt;~/.ssh&lt;/code&gt; and &lt;code&gt;~/.aws&lt;/code&gt;, checkpoints on, verbose output, &lt;code&gt;ultracode&lt;/code&gt; off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autopilot&lt;/strong&gt;: auto permission mode including during plan, effort &lt;code&gt;high&lt;/code&gt;, workflows on, recap on, push notifications when Claude decides something or needs you, auto-compact on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pane shows how much of a profile is already in force as a fraction, 3/11, and marks it active when all of it is. Open a profile and every line is either a change (old value struck through, new value, and why), something already set, or something skipped.&lt;/p&gt;

&lt;p&gt;Token saver is the one I reach for most, and it is worth noticing what it is: the same model split I posted about last week, without installing a separate setting for it.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2108687263043575923-831" src="https://platform.twitter.com/embed/Tweet.html?id=2108687263043575923"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2108687263043575923-831');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2108687263043575923&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Install it and open the pane
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx claude-code-templates@latest &lt;span class="nt"&gt;--mod&lt;/span&gt; productivity/ultra-config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It needs Claude Code 2.1.287 or later, which is the version where Mods are on by default, and a trusted project folder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftbd8sq1kgsqn5i735sil.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftbd8sq1kgsqn5i735sil.jpeg" alt="Ultra Config" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/ultra-config&lt;/code&gt; opens the pane&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/ultra-config &amp;lt;profile&amp;gt;&lt;/code&gt; opens it on one profile (&lt;code&gt;saver&lt;/code&gt;, &lt;code&gt;flow&lt;/code&gt;, &lt;code&gt;quality&lt;/code&gt;, &lt;code&gt;guarded&lt;/code&gt;, &lt;code&gt;autopilot&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/ultra-config apply &amp;lt;profile&amp;gt;&lt;/code&gt; activates one and prints what it changed and what it skipped&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/ultra-config undo&lt;/code&gt; reverts the last profile you activated, newest first&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/ultra-config close&lt;/code&gt; closes the pane&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything in the pane is a press, not a menu. There are no tabs and no arrow-key navigation, which matters because Claude Code already uses the left arrow for its own agents view.&lt;/p&gt;

&lt;p&gt;In the fullscreen layout the pane docks next to the transcript, which needs &lt;code&gt;/tui fullscreen&lt;/code&gt; and at least 110 columns. On the classic layout it sits above the prompt. In Claude Desktop it draws in the session's side panel.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2111624442413756446-753" src="https://platform.twitter.com/embed/Tweet.html?id=2111624442413756446"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2111624442413756446-753');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2111624442413756446&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the changes actually land
&lt;/h2&gt;

&lt;p&gt;This is the part worth understanding before you let something rewrite your configuration.&lt;/p&gt;

&lt;p&gt;Rows that exist in Claude Code’s own settings menu, like the model, the permission mode, the output style or auto-compact, are set through the same path the menu uses. Claude Code decides which file they go in, exactly as if you had changed them yourself.&lt;/p&gt;

&lt;p&gt;Effort is saved per model, the way &lt;code&gt;/effort&lt;/code&gt; saves it, under &lt;code&gt;modelSettings&lt;/code&gt; in &lt;code&gt;~/.claude/settings.json&lt;/code&gt;. That keying matters: since Claude Code 2.1.251, a top-level &lt;code&gt;effortLevel&lt;/code&gt; is ignored by Opus 5.5 and later models, so the Mod never writes one. A model id containing a dot, which is what you get on Bedrock and Vertex, cannot be saved this way, and the effort then applies to that one request only.&lt;/p&gt;

&lt;p&gt;Four keys have no menu row, so they are written straight into &lt;code&gt;~/.claude/settings.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"CLAUDE_CODE_SUBAGENT_MODEL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"haiku"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"MAX_MCP_OUTPUT_TOKENS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"10000"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"permissions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"disableBypassPermissionsMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"disable"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"deny"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Read(./.env)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Read(./secrets/**)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Read(~/.ssh/**)"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before each of those writes the file is copied to &lt;code&gt;settings.json.ultra-config.bak&lt;/code&gt;, and a &lt;code&gt;settings.json&lt;/code&gt; that is not valid JSON is never overwritten: those steps are skipped and the pane says why. The last 20 activations are kept in the plugin's store, so &lt;code&gt;undo&lt;/code&gt; still works after a restart and puts back the values it changed, leaving alone any deny rule you already had.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check before you trust a profile
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Guarded does not stop a shell read.&lt;/strong&gt; The rules it adds are &lt;code&gt;Read()&lt;/code&gt; rules, and a Read deny rule blocks Claude's file tools, not a shell command that reads the same file. The Mod's own README says this plainly, which is more than most components do, but it is the thing people get wrong about deny rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The subagent model does not reach Explore and Plan.&lt;/strong&gt; &lt;code&gt;CLAUDE_CODE_SUBAGENT_MODEL&lt;/code&gt; on its own does not change the model the built-in Explore and Plan subagents run on. If you want Token saver's &lt;code&gt;haiku&lt;/code&gt; to apply to every subagent, you also need &lt;code&gt;CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1&lt;/code&gt;, which requires 2.1.257 or later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two of those keys only take effect next session.&lt;/strong&gt; &lt;code&gt;CLAUDE_CODE_SUBAGENT_MODEL&lt;/code&gt; and &lt;code&gt;MAX_MCP_OUTPUT_TOKENS&lt;/code&gt; are read when Claude Code starts. The menu rows apply right away and the effort applies from your next message, but those two do not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;disableBypassPermissionsMode locks you out too.&lt;/strong&gt; It is the string &lt;code&gt;"disable"&lt;/code&gt;, it works from any settings file, and while it is set Claude Code rejects &lt;code&gt;--dangerously-skip-permissions&lt;/code&gt; and ignores an agent definition asking for &lt;code&gt;bypassPermissions&lt;/code&gt;. Guarded writes it to your user settings, so &lt;code&gt;undo&lt;/code&gt; is how you get it back, not a flag.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Where the Mods live
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The component page: &lt;a href="https://www.aitmpl.com/component/mod/productivity/ultra-config" rel="noopener noreferrer"&gt;Ultra Config on aitmpl.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The model split on its own, without the rest of a profile: &lt;a href="https://www.aitmpl.com/component/setting/model/sonnet-opus-advisor-haiku-subagents" rel="noopener noreferrer"&gt;Sonnet Opus Advisor Haiku Subagents&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The rest of the catalog: &lt;a href="https://www.aitmpl.com" rel="noopener noreferrer"&gt;aitmpl.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4phs96086khvg2pbbuta.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4phs96086khvg2pbbuta.jpeg" alt="Ultra Config" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  You can follow me on my social media:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Twitter (English): &lt;a href="https://x.com/dani_avila7" rel="noopener noreferrer"&gt;https://x.com/dani_avila7&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn (Spanish): &lt;a href="https://www.linkedin.com/in/daniel-avila-arias/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/daniel-avila-arias/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube (Spanish): &lt;a href="https://www.youtube.com/@daniiielsan" rel="noopener noreferrer"&gt;https://www.youtube.com/@daniiielsan&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Instagram (Spanish): &lt;a href="https://www.instagram.com/danielsan_avila/" rel="noopener noreferrer"&gt;https://www.instagram.com/danielsan_avila/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>devtools</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Prompt Cache Control puts a live countdown on Claude Code’s 5 minute cache</title>
      <dc:creator>Daniel (San) Ávila</dc:creator>
      <pubDate>Fri, 16 Oct 2026 16:59:16 +0000</pubDate>
      <link>https://dev.to/dani_avila7/prompt-cache-control-puts-a-live-countdown-on-claude-codes-5-minute-cache-3f12</link>
      <guid>https://dev.to/dani_avila7/prompt-cache-control-puts-a-live-countdown-on-claude-codes-5-minute-cache-3f12</guid>
      <description>&lt;p&gt;Claude Code already caches your prompt prefix. What it does not tell you is how much of the last request the cache actually served, or how many seconds you have left before that cache lapses and you pay to write the whole thing again.&lt;/p&gt;

&lt;p&gt;That number matters most exactly when you are not looking at it. You read a long file, Claude answers, you go think for six minutes, you come back and type one line, and that one line costs you a full rewrite of a 150k token prefix.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2106455605925822967-193" src="https://platform.twitter.com/embed/Tweet.html?id=2106455605925822967"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2106455605925822967-193');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2106455605925822967&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  What the band shows
&lt;/h2&gt;

&lt;p&gt;One row above the prompt, redrawn every second:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cache 98% read 80k · wrote 1k · new 300 · 3:41 · 5m · warm: keep going
cache  0% read 0 · wrote 52k · new 300 · 4:58 · 5m · cache missed: model changed
cache 98% read 150k · wrote 1k · new 300 · 0:00 · 5m · expired: the next message rewrites 151k tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three numbers per request, which is how the API reports a prompt: what the cache served, what this request wrote into it, and what went past it uncached. Then a countdown, the lifetime in force, and a verdict.&lt;/p&gt;

&lt;p&gt;The verdict is the part that earns its row. “Keep going” means a reply now is a cache read. “Expired” with a large prefix means the next message is a cache write at 1.25x base input, and the Mod says &lt;code&gt;/compact&lt;/code&gt; instead, or &lt;code&gt;/clear&lt;/code&gt; if you are done with the task anyway.&lt;/p&gt;

&lt;p&gt;When it misses, it names why: the model changed, the entry lapsed, or the prefix changed. A prefix change is anything the request is built on top of, so switching model or effort, changing your tool set, or editing CLAUDE.md all land in that bucket.&lt;/p&gt;

&lt;h2&gt;
  
  
  /cache, and the toasts
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2106455608090099799-415" src="https://platform.twitter.com/embed/Tweet.html?id=2106455608090099799"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2106455608090099799-415');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2106455608090099799&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/cache&lt;/code&gt; opens a pane with the time left as a bar that shrinks, green down to yellow below 40% of the lifetime and red from the warning threshold, a stacked read / wrote / new bar for the last request, and a colour coded table with one row per turn. That table is the part I actually read after a long session, because it shows where the misses were.&lt;/p&gt;

&lt;p&gt;The toasts fire once per cache entry: at the warning threshold, which is 60 seconds by default, and then again at 10, 3, 2 and 1 seconds. Only for prompts of 20k tokens or more, so a short session never nags you.&lt;/p&gt;

&lt;p&gt;Every request that reads the cache refreshes it at no extra cost. That is Anthropic’s rule, not the Mod’s, and it is why the toast says what it says: any message keeps the 5 minute window alive, and the Mod is only telling you the window is closing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx claude-code-templates@latest &lt;span class="nt"&gt;--mod&lt;/span&gt; observability/prompt-cache-control
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv0dpgz736vnd7czc5kq7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv0dpgz736vnd7czc5kq7.jpeg" alt="image" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It lands in &lt;code&gt;.claude/skills/prompt-cache-control/&lt;/code&gt; and loads as &lt;code&gt;prompt-cache-control@skills-dir&lt;/code&gt;. Then &lt;code&gt;/reload-plugins&lt;/code&gt; and you have the band.&lt;/p&gt;

&lt;p&gt;Mods need Claude Code v2.1.287 or later and are on by default from that version. If you still export &lt;code&gt;CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1&lt;/code&gt; from the early access period, drop it, because v2.1.287 and later ignores it. The component page still carries the old 2.1.259 line, and that is on me to fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  The options worth changing
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"pluginConfigs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prompt-cache-control@skills-dir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"warnSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"compactAtTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;60000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ttl&lt;/code&gt;: &lt;code&gt;auto&lt;/code&gt;, &lt;code&gt;5m&lt;/code&gt; or &lt;code&gt;1h&lt;/code&gt;. Leave it on auto unless you know better than the inference.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;warnSeconds&lt;/code&gt;: when the band turns yellow and the first toast fires. Default 60.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;compactAtTokens&lt;/code&gt;: the prefix size from which an expired cache suggests &lt;code&gt;/compact&lt;/code&gt;. Default 100000.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;band&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;toast&lt;/code&gt;: the three surfaces. Band on, status line entry off, toasts on, by default.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One caveat on that 100k default: it is a judgement call, not a figure from Anthropic’s documentation. If your model’s cache writes hurt, lower it.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pluginConfigs&lt;/code&gt; is read from user or managed settings only. Project and local entries are ignored, so putting this in a repository's &lt;code&gt;.claude/settings.json&lt;/code&gt; does nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works out your lifetime
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2106474300785996075-391" src="https://platform.twitter.com/embed/Tweet.html?id=2106474300785996075"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2106474300785996075-391');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2106474300785996075&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;The cache is 5 minutes by default and 1 hour when asked for, and which one you get depends on your account and your environment. The Mod walks the same precedence chain Claude Code does: its own &lt;code&gt;ttl&lt;/code&gt; option, then &lt;code&gt;FORCE_PROMPT_CACHING_5M&lt;/code&gt;, &lt;code&gt;CLAUDE_CODE_PROMPT_CACHE_TTL&lt;/code&gt;, the &lt;code&gt;promptCacheTtl&lt;/code&gt; setting, &lt;code&gt;ENABLE_PROMPT_CACHING_1H&lt;/code&gt;, and finally the account, which is 1 hour on a subscription inside its plan usage and 5 minutes on usage credits, an API key or a cloud provider.&lt;/p&gt;

&lt;p&gt;Then it watches the traffic, which overrules all of that. A cache hit more than 5 minutes after the previous request proves the 1 hour lifetime. A miss between 5 and 60 minutes later, with the same model and a prompt that did not shrink, says the entry lapsed, so 5 minutes. That covers what a Mod cannot read: managed settings, a gateway rewriting the TTL, or a subscription that ran out of plan usage mid session.&lt;/p&gt;

&lt;p&gt;The reason it has to infer at all is a gap in the surface. The API names the TTL of each write, and Claude Code’s status line exposes it as &lt;code&gt;prompt_cache.ttl&lt;/code&gt;, but the Mod API hands over only the four token counts. If you want the ground truth, run &lt;code&gt;claude -p "hello" --output-format json&lt;/code&gt; and read &lt;code&gt;usage.cache_creation&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the Mods live
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkr6hizaawcc1x5v3xvnk.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkr6hizaawcc1x5v3xvnk.jpeg" alt="image" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The component: &lt;a href="https://www.aitmpl.com/component/mod/observability/prompt-cache-control" rel="noopener noreferrer"&gt;Prompt Cache Control on aitmpl.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Context Timeline, the other way to watch a session: &lt;a href="https://www.aitmpl.com/component/hook/monitoring/context-timeline" rel="noopener noreferrer"&gt;Context Timeline&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Every Mod in the catalog: &lt;a href="https://www.aitmpl.com/mods" rel="noopener noreferrer"&gt;the Mods index&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Everything else: &lt;a href="https://www.aitmpl.com" rel="noopener noreferrer"&gt;aitmpl.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  You can follow me on my social media:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Twitter (English): &lt;a href="https://x.com/dani_avila7" rel="noopener noreferrer"&gt;https://x.com/dani_avila7&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn (Spanish): &lt;a href="https://www.linkedin.com/in/daniel-avila-arias/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/daniel-avila-arias/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube (Spanish): &lt;a href="https://www.youtube.com/@daniiielsan" rel="noopener noreferrer"&gt;https://www.youtube.com/@daniiielsan&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Instagram (Spanish): &lt;a href="https://www.instagram.com/danielsan_avila/" rel="noopener noreferrer"&gt;https://www.instagram.com/danielsan_avila/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>devtools</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Subagent Read Only Guard stops your Claude Code subagents from writing files</title>
      <dc:creator>Daniel (San) Ávila</dc:creator>
      <pubDate>Mon, 12 Oct 2026 13:06:40 +0000</pubDate>
      <link>https://dev.to/dani_avila7/subagent-read-only-guard-stops-your-claude-code-subagents-from-writing-files-jc5</link>
      <guid>https://dev.to/dani_avila7/subagent-read-only-guard-stops-your-claude-code-subagents-from-writing-files-jc5</guid>
      <description>&lt;p&gt;I run Sonnet as the main model and Haiku for subagents. Subagents are good at going out, reading a lot of code and coming back with a report. They are less good at deciding on their own that the right next move is to rewrite a file in a repo they only half understand.&lt;/p&gt;

&lt;p&gt;So there are two components here. One tells subagents to stay read-only. The other makes sure they do.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2109041206097289420-143" src="https://platform.twitter.com/embed/Tweet.html?id=2109041206097289420"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2109041206097289420-143');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2109041206097289420&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  The instruction is not the enforcement
&lt;/h2&gt;

&lt;p&gt;The first half is the setting, &lt;code&gt;hooks/subagents-explore-only&lt;/code&gt;. It registers a &lt;code&gt;SubagentStart&lt;/code&gt; hook that prints a single JSON object with &lt;code&gt;hookSpecificOutput.additionalContext&lt;/code&gt;, and Claude Code injects that text into every subagent before its first prompt: investigate with read-only tools, do not create, edit, move or delete files, do not run state-changing commands, and describe the exact change in the final report so the main agent applies it. Built-in agents, custom agents and plugin agents all get it.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SubagentStart&lt;/code&gt; is a context-only event. It has no decision control, so it cannot block anything. It is a prompt, and a prompt is a request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.aitmpl.com/component/hook/security/subagent-read-only-guard" rel="noopener noreferrer"&gt;Subagent Read Only Guard&lt;/a&gt; is the half that enforces. It runs on &lt;code&gt;PreToolUse&lt;/code&gt;, which does have decision control.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the guard denies
&lt;/h2&gt;

&lt;p&gt;The hook matches &lt;code&gt;Edit|Write|MultiEdit|NotebookEdit|PowerShell|Bash|Monitor&lt;/code&gt; and hands the call to a Python script. The first thing that script does is look for &lt;code&gt;agent_id&lt;/code&gt; in the hook input. Claude Code sets that field only when the hook fires inside a subagent, so a call from the main conversation exits before any of the checking happens. Your own session is untouched.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edit, Write, NotebookEdit and PowerShell are denied outright. The reason string tells the subagent to describe the change in its report so the main agent can apply it.&lt;/li&gt;
&lt;li&gt;Bash and Monitor commands get parsed. A command passes only when every program in it is a bare name from a short read-only allowlist (cat, ls, grep, rg, find, jq, diff, wc, sort, git log/diff/status/show/blame and similar) called without the options that would make that program write a file or run another one. Abbreviated long options count, so &lt;code&gt;--out&lt;/code&gt; is caught the same as &lt;code&gt;--output&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Output redirection to a file, here-documents, command substitution, &lt;code&gt;$VAR&lt;/code&gt; and brace expansion, subshells, environment variable prefixes and &lt;code&gt;git -c&lt;/code&gt; are all denied. &lt;code&gt;2&amp;gt;/dev/null&lt;/code&gt;, &lt;code&gt;2&amp;gt;&amp;amp;1&lt;/code&gt; and input redirection are fine.&lt;/li&gt;
&lt;li&gt;Anything the classifier cannot parse is denied, including its own bugs. It fails closed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The block is a real permission decision, not an exit code. The script prints &lt;code&gt;permissionDecision: "deny"&lt;/code&gt; with a &lt;code&gt;permissionDecisionReason&lt;/code&gt;, and that reason is the text the subagent reads.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmk808ptat10wy09bjn3u.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmk808ptat10wy09bjn3u.jpeg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx claude-code-templates@latest &lt;span class="nt"&gt;--setting&lt;/span&gt; hooks/subagents-explore-only &lt;span class="nt"&gt;--hook&lt;/span&gt; security/subagent-read-only-guard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That drops the guard at &lt;code&gt;.claude/hooks/subagent-read-only-guard.py&lt;/code&gt; and registers the hooks in your project settings. The registration is an ordinary hooks block, so you can read it, move it to &lt;code&gt;~/.claude/settings.json&lt;/code&gt; to get it on every project, or trim the matcher:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"PreToolUse"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Edit|Write|NotebookEdit|PowerShell|Bash|Monitor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"python3 .claude/hooks/subagent-read-only-guard.py"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two things I changed from what ships. &lt;code&gt;MultiEdit&lt;/code&gt; is gone from the matcher: it is not a built-in tool name any more, so that entry never matches anything. And the command uses a path relative to the working directory, which is not always the project root, so &lt;code&gt;python3 "$CLAUDE_PROJECT_DIR"/.claude/hooks/subagent-read-only-guard.py&lt;/code&gt; is the safer spelling. You also need &lt;code&gt;python3&lt;/code&gt; on PATH.&lt;/p&gt;

&lt;h2&gt;
  
  
  Narrow what it fires on
&lt;/h2&gt;

&lt;p&gt;As installed, the hook runs on every Edit, Write, Bash and Monitor call in the session, including yours, and exits on the first line when &lt;code&gt;agent_id&lt;/code&gt; is missing. Cheap, but it is still a python3 process per tool call.&lt;/p&gt;

&lt;p&gt;If you want it to fire less often, hooks take an &lt;code&gt;if&lt;/code&gt; field next to &lt;code&gt;matcher&lt;/code&gt;, using permission rule syntax, exactly one rule, no &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; or &lt;code&gt;||&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bash"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"if"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bash(rm *)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;if&lt;/code&gt; is evaluated on PreToolUse, PostToolUse, PostToolUseFailure, PermissionRequest and PermissionDenied. On any other event a hook that carries it never runs.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2037598893157032421-970" src="https://platform.twitter.com/embed/Tweet.html?id=2037598893157032421"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2037598893157032421-970');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2037598893157032421&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does not cover
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MCP tools. &lt;code&gt;PreToolUse&lt;/code&gt; fires for them, but a matcher made only of names and pipes is an exact-string list, and MCP tools are called &lt;code&gt;mcp__server__tool&lt;/code&gt;, so none of them match. A subagent with a write-capable MCP server still writes.&lt;/li&gt;
&lt;li&gt;Secrets. &lt;code&gt;cat&lt;/code&gt; and &lt;code&gt;printenv&lt;/code&gt; are on the read-only allowlist, so a subagent can still read &lt;code&gt;.env&lt;/code&gt;. Pair it with Env File Protection.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git diff&lt;/code&gt; and &lt;code&gt;git blame&lt;/code&gt; can still run a diff or textconv driver the repo already has configured.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trade is real: subagents will sometimes come back with a described change instead of a finished one, and your main agent has to apply it. That is the whole point, but it means the orchestration work moves up to the main prompt. For exploration-heavy sessions with cheap subagents, it is worth it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the hooks live
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.aitmpl.com/component/hook/security/subagent-read-only-guard" rel="noopener noreferrer"&gt;Subagent Read Only Guard&lt;/a&gt;, the PreToolUse hook in this article&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.aitmpl.com/component/setting/hooks/subagents-explore-only" rel="noopener noreferrer"&gt;Subagents Explore Only&lt;/a&gt;, the SubagentStart setting that pairs with it&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.aitmpl.com/component/hook/security/env-file-protection" rel="noopener noreferrer"&gt;Env File Protection&lt;/a&gt;, for the secrets this guard still lets through&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.aitmpl.com" rel="noopener noreferrer"&gt;The rest of the catalog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffqq5kv2z1dyjuq8o7xe0.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffqq5kv2z1dyjuq8o7xe0.jpeg" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2109089568494649601-117" src="https://platform.twitter.com/embed/Tweet.html?id=2109089568494649601"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2109089568494649601-117');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2109089568494649601&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  You can follow me on my social media:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Twitter (English): &lt;a href="https://x.com/dani_avila7" rel="noopener noreferrer"&gt;https://x.com/dani_avila7&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn (Spanish): &lt;a href="https://www.linkedin.com/in/daniel-avila-arias/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/daniel-avila-arias/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Youtube (Spanish): &lt;a href="https://www.youtube.com/@daniiielsan" rel="noopener noreferrer"&gt;https://www.youtube.com/@daniiielsan&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Instagram (Spanish): &lt;a href="https://www.instagram.com/danielsan_avila/" rel="noopener noreferrer"&gt;https://www.instagram.com/danielsan_avila/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>security</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Complete Guide to Claude Code Templates</title>
      <dc:creator>Daniel (San) Ávila</dc:creator>
      <pubDate>Wed, 27 Aug 2025 20:56:31 +0000</pubDate>
      <link>https://dev.to/dani_avila7/complete-guide-to-claude-code-templates-1pnp</link>
      <guid>https://dev.to/dani_avila7/complete-guide-to-claude-code-templates-1pnp</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqjwtm7d4oyb9xzemf7ot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqjwtm7d4oyb9xzemf7ot.png" alt=" " width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Claude Code Templates
&lt;/h3&gt;

&lt;p&gt;Claude Code Templates is an open-source project that simplifies Claude Code adoption through ready-to-use configurations.&lt;/p&gt;

&lt;p&gt;Visit &lt;a href="https://aitmpl.com" rel="noopener noreferrer"&gt;aitmpl.com&lt;/a&gt; to browse over 400 components including agents, commands, settings, hooks, MCPs, and templates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aitmpl.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Claude Code Templates - Supercharge Your AI Development with Anthropic Claude&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
*Professional templates and configurations for Anthropic's Claude Code. Get Claude Opus 4.1 working at terminal velocity…*aitmpl.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The core insight behind this project: how you configure your AI development agents is often more critical to project success than the actual code they generate.&lt;/p&gt;

&lt;p&gt;Currently hosting over 400 components with thousands of downloads, Claude Code Templates has become the de facto package manager for the Claude Code ecosystem.&lt;/p&gt;
&lt;h3&gt;
  
  
  Component
&lt;/h3&gt;

&lt;p&gt;Claude Code Templates organizes components into six categories:&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Agents&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Specialized AI personas with specific expertise. Examples include frontend developers, security auditors, and legal reviewers. Each agent comes with optimized system prompts and tool configurations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhz52imnar58he1k9w9gn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhz52imnar58he1k9w9gn.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Commands&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Reusable command configurations for common development tasks like code review, testing, and deployment checks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4n7ymkhz7f4ljhcdye6l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4n7ymkhz7f4ljhcdye6l.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Settings&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Pre-configured permission sets, tool allowlists, and environment configurations that ensure secure and efficient AI interactions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x2pbx5515cxjoeeaqgm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x2pbx5515cxjoeeaqgm.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Hooks&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Integration points for CI/CD pipelines, git workflows, and automated development processes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a95r9vjadj8z5roc2wf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a95r9vjadj8z5roc2wf.png" alt=" " width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;MCPs&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Model Context Protocol integrations that connect Claude Code to external services like databases, APIs, and development tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh19gz6rky8av43oz2em0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh19gz6rky8av43oz2em0.png" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Templates&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Complete project setups combining multiple components for specific use cases or technology stacks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnrm7mbtq67y7a7uihbb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnrm7mbtq67y7a7uihbb.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Using the Search&amp;nbsp;Function
&lt;/h3&gt;

&lt;p&gt;The search interface allows you to filter through hundreds of components efficiently. Enter keywords related to your technology stack, development role, or specific needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsdcswq1t3njbr72zvgmh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsdcswq1t3njbr72zvgmh.png" alt=" " width="800" height="230"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Search “react” to find frontend development components&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search “security” for auditing and security review tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search “game” for game development resources&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search “api” for backend and API development components&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcj7uvmk4nwlafncea8nf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcj7uvmk4nwlafncea8nf.png" alt=" " width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also browse by category using the filter tabs (Agents, Commands, Settings, Hooks, MCPs, Templates) or explore predefined categories like “Development Team,” “AI Specialists,” or “Business Marketing.”&lt;/p&gt;
&lt;h3&gt;
  
  
  Installing Individual Components
&lt;/h3&gt;

&lt;p&gt;Each component can be installed independently using the provided command. Click the “Install” button next to any component to copy its installation command.&lt;/p&gt;

&lt;p&gt;Individual installation commands follow this pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx claude-code-templates@latest --agent=development-team/frontend-developer
npx claude-code-templates@latest --command=code-optimization/bundle-analyzer  
npx claude-code-templates@latest --setting=security/enterprise-permissions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;--yes&lt;/code&gt; flag can be added to skip confirmation prompts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx claude-code-templates@latest --agent=development-team/frontend-developer --yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Building Complete Stacks with Cart Functionality
&lt;/h3&gt;

&lt;p&gt;Rather than installing components one by one, you can build complete development stacks using the cart system. This approach is more efficient for setting up comprehensive development environments.&lt;/p&gt;

&lt;p&gt;To build a stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browse components and click “Add to Cart” for each item you need&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5wbcsrqy5vu1rufb7hyi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5wbcsrqy5vu1rufb7hyi.png" alt=" " width="636" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The cart accumulates your selections across all component types&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mvhsvyicg0rjvh0h8ql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mvhsvyicg0rjvh0h8ql.png" alt=" " width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When ready, click “Generated Command” to create a single command that installs everything&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojv0bwsjd66p07w892ei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojv0bwsjd66p07w892ei.png" alt=" " width="800" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy and run the generated command in your terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffh04u931n1lf5uzqywm6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffh04u931n1lf5uzqywm6.png" alt=" " width="436" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You also can share this command on X or Threads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A typical full-stack development setup might include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Frontend developer agent&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code reviewer agent&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security auditor agent&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance optimization commands&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git integration hooks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Development environment settings&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Relevant MCP integrations&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This results in a single command that configures your entire Claude Code environment at once.&lt;/p&gt;

&lt;h3&gt;
  
  
  Discovering Popular Components with&amp;nbsp;Trending
&lt;/h3&gt;

&lt;p&gt;The trending section shows which components the community uses most, updated weekly. This data helps identify battle-tested components and emerging patterns in how developers configure their AI workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fly4x0970mazdlosjnvlc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fly4x0970mazdlosjnvlc.png" alt=" " width="800" height="716"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Claude Code Templates transforms Claude Code from a powerful but complex tool into an accessible development platform. By providing curated, tested configurations, it removes the barrier between developers and productive AI-assisted coding.&lt;/p&gt;

&lt;p&gt;AI agent configuration has become as important as the code itself. A thoughtfully configured development environment with the right agents, permissions, and integrations can dramatically improve productivity and code quality. Claude Code Templates makes this sophistication accessible to every developer.&lt;/p&gt;

&lt;p&gt;For advanced usage including Global Agents that run directly from your terminal, check out this &lt;a href="https://x.com/dani_avila7/status/1958938124618547702" rel="noopener noreferrer"&gt;step-by-step tutorial&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Contribute to the project at &lt;a href="https://github.com/davila7/claude-code-templates" rel="noopener noreferrer"&gt;github.com/davila7/claude-code-templates&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;You can follow me on my social media:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;LinkedIn (Spanish): &lt;a href="https://www.linkedin.com/in/daniel-avila-arias/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/daniel-avila-arias/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Twitter (English): &lt;a href="https://x.com/dani_avila7" rel="noopener noreferrer"&gt;https://x.com/dani_avila7&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Youtube (Spanish): &lt;a href="https://www.youtube.com/@daniiielsan" rel="noopener noreferrer"&gt;https://www.youtube.com/@daniiielsan&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Claude Code: From Zero to Hero</title>
      <dc:creator>Daniel (San) Ávila</dc:creator>
      <pubDate>Tue, 26 Aug 2025 18:10:16 +0000</pubDate>
      <link>https://dev.to/dani_avila7/claude-code-from-zero-to-hero-4kcm</link>
      <guid>https://dev.to/dani_avila7/claude-code-from-zero-to-hero-4kcm</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhio0tpaigvmqef5a2p05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhio0tpaigvmqef5a2p05.png" alt=" " width="793" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What is Claude Code?
&lt;/h1&gt;

&lt;p&gt;Claude Code is an AI-powered coding assistant that lives in your terminal, understanding your codebase and accelerating development through natural language. It integrates directly into your workflow, providing a flexible and safe way to leverage AI for coding tasks.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why Use Claude Code?
&lt;/h1&gt;

&lt;p&gt;Claude Code offers several key benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Codebase Understanding:&lt;/strong&gt; Quickly understand project architecture and logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Editing &amp;amp; Bug Fixing:&lt;/strong&gt; Edit files and fix bugs with natural language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing &amp;amp; Linting:&lt;/strong&gt; Execute and fix tests and linting errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git Integration:&lt;/strong&gt; Simplify Git operations like commits, PRs, and conflict resolution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Search:&lt;/strong&gt; Access documentation and online resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP Integration&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Secure &amp;amp; Private:&lt;/strong&gt; Direct API connection to Anthropic, operating within your terminal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Codebase Understanding:&lt;/strong&gt; Quickly understand project architecture and logic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Editing &amp;amp; Bug Fixing:&lt;/strong&gt; Edit files and fix bugs with natural language.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Testing &amp;amp; Linting:&lt;/strong&gt; Execute and fix tests and linting errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Git Integration:&lt;/strong&gt; Simplify Git operations like commits, PRs, and conflict resolution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Web Search:&lt;/strong&gt; Access documentation and online resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP Integration&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Secure &amp;amp; Private:&lt;/strong&gt; Direct API connection to Anthropic, operating within your terminal.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Installation and Authentication
&lt;/h1&gt;

&lt;p&gt;Install Claude Code: Ensure you have Node.js 18+ installed, then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g @anthropic-ai/claude-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Authenticate: Run &lt;strong&gt;claude&lt;/strong&gt; in your terminal and follow the authentication prompts.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pro tips: You can authenticate via the Anthropic Console, Claude App (Pro/Max plan), or enterprise platforms like Amazon Bedrock or Google Vertex AI.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pro tips: You can authenticate via the Anthropic Console, Claude App (Pro/Max plan), or enterprise platforms like Amazon Bedrock or Google Vertex AI.&lt;/p&gt;

&lt;p&gt;If you want to make any changes to Claude Code’s initial configuration, just run the /config command&lt;/p&gt;

&lt;h1&gt;
  
  
  1. Initializing Your Project
&lt;/h1&gt;

&lt;p&gt;Initialize: Use the /init command to generate a CLAUDE.md project guide.&lt;/p&gt;

&lt;p&gt;Running this command, Claude Code will create the CLAUDE.md file with all the necessary information to work properly with this project.&lt;/p&gt;

&lt;p&gt;Click Yes and you’ll see the file created in your project.&lt;/p&gt;

&lt;p&gt;You can ask Claude Code to commit the CLAUDE.md file it just generated: “commit the CLAUDE.md file”.&lt;/p&gt;

&lt;p&gt;Claude Code will execute git and add this file to staging.&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Basic Usage
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Asking Questions
&lt;/h2&gt;

&lt;p&gt;Start by understanding your codebase:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&amp;gt; what does this project do?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can try different questions like these:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&amp;gt; what technologies does this project use? &amp;gt; explain the folder structure&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Make Code Changes
&lt;/h2&gt;

&lt;p&gt;Instruct Claude to make edits:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&amp;gt; Create a GitHub Action that, on every npm publish, automatically creates a GitHub Release and publishes the package to GitHub Packages.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Code will show you how it’s performing the tasks one by one&lt;/p&gt;

&lt;p&gt;When finished, it will give you a summary of the changes it just made&lt;/p&gt;

&lt;p&gt;Claude will show you the proposed changes and ask for your approval before modifying any files.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Essential Commands and Workflows
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Navigating the Command Line Interface (CLI)
&lt;/h2&gt;

&lt;p&gt;Claude Code offers a simple yet powerful command-line interface with tab completion for files and commands. Use /help to see all available commands and /clear to reset the conversation context.&lt;/p&gt;

&lt;h1&gt;
  
  
  Using Claude Code as a Unix-Style Utility
&lt;/h1&gt;

&lt;p&gt;Command Breakdown: Security Scanning&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat package.json | claude -p "review this file for security vulnerabilities and dependency issues" &amp;gt; security_report.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command demonstrates Claude Code’s versatility as a Unix-style utility that can be integrated into your existing shell scripts and workflows. Let’s break it down:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Input Piping:&lt;/strong&gt; cat package.json | reads the contents of your package.json file and pipes it directly to Claude Code.&lt;/li&gt;
&lt;li&gt;**Headless Mode: **The -p flag runs Claude in headless (non-interactive) mode with the specified prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specialized Analysis:&lt;/strong&gt; The prompt instructs Claude to perform a security-focused code review, specifically looking for vulnerabilities and dependency issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output Redirection:&lt;/strong&gt; &amp;gt; security_report.txt captures Claude’s analysis in a text file for documentation or further processing.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Input Piping:&lt;/strong&gt; cat package.json | reads the contents of your package.json file and pipes it directly to Claude Code.&lt;/li&gt;
&lt;li&gt;**Headless Mode: **The -p flag runs Claude in headless (non-interactive) mode with the specified prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specialized Analysis:&lt;/strong&gt; The prompt instructs Claude to perform a security-focused code review, specifically looking for vulnerabilities and dependency issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output Redirection:&lt;/strong&gt; &amp;gt; security_report.txt captures Claude’s analysis in a text file for documentation or further processing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Working with your IDE
&lt;/h1&gt;

&lt;p&gt;The /ide command connects Claude Code to your IDE (VS Code, Cursor, Windsorf or JetBrains), enabling powerful integrations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Connect Claude to your IDE&amp;gt; /ide
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Automatic Context Sharing When you select files or code in your IDE, Claude automatically receives this context.&lt;/p&gt;

&lt;p&gt;Or you can add a file as context using @&lt;/p&gt;

&lt;h1&gt;
  
  
  Creating Custom Slash Commands
&lt;/h1&gt;

&lt;p&gt;The custom slash commands feature in Claude Code lets you create reusable prompts for common tasks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Create a project-specific commandmkdir -p .claude/commandsecho "Analyze this code for security vulnerabilities and suggest fixes:" &amp;gt; .claude/commands/security-review.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Project Commands vs. Personal Commands
&lt;/h1&gt;

&lt;p&gt;Project Commands (shared with your team):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; /project:security-review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Stored in .claude/commands/ directory&lt;/li&gt;
&lt;li&gt;Available to everyone who clones the repo&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Great for standardizing team workflows&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stored in .claude/commands/ directory&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Available to everyone who clones the repo&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Great for standardizing team workflows&lt;br&gt;
Personal Commands (just for you):&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; /user:optimize
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Stored in ~/.claude/commands/directory&lt;/li&gt;
&lt;li&gt;Available across all your projects&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perfect for your individual preferences&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stored in ~/.claude/commands/directory&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Available across all your projects&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perfect for your individual preferences&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Adding Command Arguments
&lt;/h1&gt;

&lt;p&gt;Make commands flexible with the $ARGUMENTS placeholder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Create a command with argumentsecho "Find and fix issue #$ARGUMENTS. Follow these steps:1. Understand the issue described in the ticket2. Locate the relevant code3. Implement a solution4. Add appropriate tests" &amp;gt; .claude/commands/fix-issue.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then use it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; /project:fix-issue 123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Organizing Commands
&lt;/h1&gt;

&lt;p&gt;You can create subdirectories for better organization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.claude/commands/frontend/component.md → /project:frontend:component
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Custom commands transform Claude Code into a powerful, personalized coding assistant that adapts to your specific workflows and team standards.&lt;/p&gt;

&lt;h1&gt;
  
  
  Creating Custom Slash Commands for npm Packages
&lt;/h1&gt;

&lt;p&gt;Here’s a practical example of creating a custom slash command for npm package development:&lt;/p&gt;

&lt;p&gt;Create the file .claude/commands/npm-contributing-docs.md&lt;/p&gt;

&lt;p&gt;With the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a CONTRIBUTING.md file with:   - Development setup instructions   - Testing guidelines   - Pull request process
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can use this command in your npm package project (you must restart claude to see the command):&lt;/p&gt;

&lt;p&gt;The command will be executed and in this case will create the CONTRIBUTING.md file as we requested in the created command file.&lt;/p&gt;

&lt;h1&gt;
  
  
  Working with Model Context Protocol (MCP)
&lt;/h1&gt;

&lt;p&gt;MCP allows Claude Code to connect with external tools and data sources, extending its capabilities beyond your local environment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Basic MCP server additionclaude mcp add postgres-db -- /path/to/postgres-mcp-server --connection-string "postgresql://user:pass@localhost:5432/mydb"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Managing MCP Servers
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# List all configured serversclaude mcp list# Get details for a specific serverclaude mcp get postgres-db# Remove a serverclaude mcp remove postgres-db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Scopes for MCP Servers
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Local (-s local): Available only to you in the current project&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Project (-s project): Shared with everyone via .mcp.json file&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Local (-s local): Available only to you in the current project&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Project (-s project): Shared with everyone via .mcp.json file&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User (-s user): Available to you across all projects&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User (-s user): Available to you across all projects&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Example: Using CodeGPT’s Deep Graph MCP
&lt;/h1&gt;

&lt;p&gt;Let’s see how to implement a powerful code analysis MCP in practice:&lt;/p&gt;

&lt;p&gt;Let’s integrate the Deep Graph MCP with Claude Code. This integration transforms Claude Code into a powerful code comprehension tool that understands your entire codebase at a semantic level, making it ideal for large, complex projects.&lt;/p&gt;

&lt;p&gt;Here you can see all the documentation for this CodeGPT MCP and all the information to use it in Claude Code: &lt;a href="https://github.com/JudiniLabs/mcp-code-graph" rel="noopener noreferrer"&gt;https://github.com/JudiniLabs/mcp-code-graph&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the MCP with the following command and don’t forget to add your CodeGPT API Key&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Add the Deep Graph MCP serverclaude mcp add "Deep Graph MCP" npx -- -y mcp-code-graph@latest YOUR_CODEGPT_API_KEY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Interacting with Deep Graph MCP
&lt;/h1&gt;

&lt;p&gt;Once configured, you can use it in your Claude Code sessions:&lt;/p&gt;

&lt;p&gt;Check if you have Deep Graph MCP installed by running “claude mcp list”&lt;/p&gt;

&lt;p&gt;To call the MCP and use its tools, you can mention it and then request something directly. Claude Code will detect the tools it needs to execute and show you the confirmation message:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Deep Graph MCP: list graphs&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With the Deep Graph MCP you can work with all the repositories you have converted into knowledge graphs.&lt;/p&gt;

&lt;p&gt;Once your repositories are listed, you could ask Claude Code to work directly with a graph.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Deep Graph MCP: show all the endpoints from danielavila.me@main&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude Code will execute the corresponding tools with the selected graph and finally you’ll have a direct response in the console.&lt;/p&gt;

&lt;p&gt;Amazing! Now you can work with any repository within your project using Claude Code, special commands, Deep Graph MCP and all the tools that Claude has available!&lt;/p&gt;

&lt;p&gt;You can follow me on my social media:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn (Spanish): &lt;a href="https://www.linkedin.com/in/daniel-avila-arias/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/daniel-avila-arias/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Twitter (English): &lt;a href="https://x.com/dani_avila7" rel="noopener noreferrer"&gt;https://x.com/dani_avila7&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;LinkedIn (Spanish): &lt;a href="https://www.linkedin.com/in/daniel-avila-arias/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/daniel-avila-arias/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Twitter (English): &lt;a href="https://x.com/dani_avila7" rel="noopener noreferrer"&gt;https://x.com/dani_avila7&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claude</category>
      <category>codegpt</category>
      <category>mcp</category>
      <category>claudecode</category>
    </item>
    <item>
      <title>Llama 3.2 Running Locally in VSCode: How to Set It Up with CodeGPT and Ollama</title>
      <dc:creator>Daniel (San) Ávila</dc:creator>
      <pubDate>Mon, 30 Sep 2024 12:09:19 +0000</pubDate>
      <link>https://dev.to/dani_avila7/llama-32-running-locally-in-vscode-how-to-set-it-up-with-codegpt-and-ollama-h1n</link>
      <guid>https://dev.to/dani_avila7/llama-32-running-locally-in-vscode-how-to-set-it-up-with-codegpt-and-ollama-h1n</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftw0tv7nf7y0t47zpppuf.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftw0tv7nf7y0t47zpppuf.jpeg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Llama 3.2 models are now available to run locally in VSCode, providing a lightweight and secure way to access powerful AI tools directly from your development environment.&lt;/p&gt;

&lt;p&gt;With the integration of Ollama and CodeGPT, you can download and install Llama models (1B and 3B) on your machine, making them ready to use for any coding task.&lt;/p&gt;

&lt;p&gt;In this guide, I’ll walk you through the installation process, so you can get up and running with Llama 3.2 in VSCode quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-Step Installation Guide: Llama 3.2 in VSCode
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Install Visual Studio Code (VSCode)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To start, make sure you have Visual Studio Code installed. If you don’t have it yet, download it from here and follow the instructions for your operating system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Install CodeGPT Extension&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The CodeGPT extension is necessary to integrate AI models like Llama 3.2 into your VSCode environment. Here’s how to get it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open VSCode.&lt;/li&gt;
&lt;li&gt;Click on the Extensions icon on the left sidebar.&lt;/li&gt;
&lt;li&gt;Search for “CodeGPT” in the marketplace.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5wb63191zn4j2izyyoki.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5wb63191zn4j2izyyoki.png" alt=" " width="777" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Install Ollama&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ollama enables local deployment of language models. To install it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit the Ollama website.&lt;/li&gt;
&lt;li&gt;Download the appropriate installer for your operating system.&lt;/li&gt;
&lt;li&gt;Follow the installation instructions provided on the site.&lt;/li&gt;
&lt;li&gt;Once installed, verify it by typing the following in your terminal:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ollama --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;output: ollama version is 0.3.12&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Download Llama 3.2 Models&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With CodeGPT and Ollama installed, you’re ready to download the Llama 3.2 models to your machine:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open CodeGPT in VSCode&lt;/li&gt;
&lt;li&gt;In the CodeGPT panel, navigate to the Model Selection section.&lt;/li&gt;
&lt;li&gt;Select Ollama as the provider and choose the Llama 3.2 models (1B or 3B).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpq58fns4wezxmh6y8ml9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpq58fns4wezxmh6y8ml9.png" alt=" " width="677" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click “Download Model” to save the models locally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Verify Your Setup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the model is downloaded, you can verify it’s ready to use:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a code file or project in VSCode.&lt;/li&gt;
&lt;li&gt;In the CodeGPT panel, make sure Llama 3.2 is selected as your active model.&lt;/li&gt;
&lt;li&gt;Begin interacting with the model for code completions, suggestions, or any coding assistance you need.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83qnykucqhtulv3u943k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83qnykucqhtulv3u943k.png" alt=" " width="677" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to Use Llama 3.2 in VSCode&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s it! With Llama 3.2 running locally through CodeGPT, you’re set up to enjoy a secure, private, and fast AI assistant for your coding tasks — all without relying on external servers or internet connections.&lt;/p&gt;

&lt;p&gt;If you found this guide helpful, let us know in the comments, and feel free to reach out if you encounter any issues during the setup!&lt;/p&gt;

</description>
      <category>llama3</category>
      <category>chatgpt</category>
      <category>ollama</category>
      <category>codegpt</category>
    </item>
    <item>
      <title>Lightning-Fast Code Assistant with Groq in VSCode</title>
      <dc:creator>Daniel (San) Ávila</dc:creator>
      <pubDate>Sun, 21 Jul 2024 20:29:57 +0000</pubDate>
      <link>https://dev.to/dani_avila7/lightning-fast-code-assistant-with-groq-in-vscode-4eme</link>
      <guid>https://dev.to/dani_avila7/lightning-fast-code-assistant-with-groq-in-vscode-4eme</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hbj0t8jaol6qv5odj0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hbj0t8jaol6qv5odj0b.png" alt=" " width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial, I’ll show you how to integrate Groq’s cloud-based language models as a code assistant in Visual Studio Code (and Jetrbains) using the CodeGPT extension.&lt;/p&gt;

&lt;p&gt;You’ll learn to set up an AI-powered coding assistant to enhance your productivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, What is Groq?
&lt;/h2&gt;

&lt;p&gt;Groq is the AI infrastructure company that delivers fast AI inference.&lt;/p&gt;

&lt;p&gt;The LPU™ Inference Engine by Groq is a hardware and software platform that delivers exceptional compute speed, quality, and energy efficiency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let’s begin!
&lt;/h2&gt;

&lt;p&gt;To use Groq’s services, you must first create an account on Groq Cloud by accessing the following link: &lt;a href="https://console.groq.com/" rel="noopener noreferrer"&gt;https://console.groq.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8se6l7vm0b9o7x9e1x3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8se6l7vm0b9o7x9e1x3.png" alt=" " width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you’re logged in, navigate to the API Keys section in the main menu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuq8ykciz5ej59v9qvogk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuq8ykciz5ej59v9qvogk.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a new API Key and copy it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqltogoeju9rru3ckg2g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqltogoeju9rru3ckg2g.png" alt=" " width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, you need to open VSCode and install the CodeGPT extension.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4aabq8q7n5e50f851c1s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4aabq8q7n5e50f851c1s.png" alt=" " width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open CodeGPT in VSCode and in the main selector, select Groq as the provider.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu63fprlsj0kbmr21nb7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu63fprlsj0kbmr21nb7l.png" alt=" " width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now select “Connect” and you’ll see the window to paste the API Key you just created. Paste it and then click Connect.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0lwgo22w68cceab7ed6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0lwgo22w68cceab7ed6.png" alt=" " width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Excellent! We’re now connected with Groq.&lt;/p&gt;

&lt;p&gt;Next, we’ll select a model from the ones Groq has available. With CodeGPT, you’ll always have an updated list of models, so you’ll be able to see each new release directly in CodeGPT.&lt;/p&gt;

&lt;p&gt;In this case, we’ll be working with the llama3–70b-8192 model.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftrnmnlnzhv9gdulytlka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftrnmnlnzhv9gdulytlka.png" alt=" " width="800" height="651"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the model is selected, we can start using the features offered by CodeGPT.&lt;/p&gt;

&lt;h3&gt;
  
  
  Explain a file:
&lt;/h3&gt;

&lt;p&gt;In the CodeGPT text input, we select the /Explain option, then use the @ symbol to select a file from our project, and when we press Enter, Llama3 will provide a complete explanation of the ENTIRE file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvfngxuyx641x0tgpohri.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvfngxuyx641x0tgpohri.gif" alt=" " width="600" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Document a file:
&lt;/h3&gt;

&lt;p&gt;It seems like there’s no content to translate. Could you please provide the text you’d like me to translate into native English? I’ll be happy to assist you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mzwvnb28pvjr75yc6h2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mzwvnb28pvjr75yc6h2.gif" alt=" " width="600" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Experience the speed of Groq in software development with CodeGPT as your code assistant!&lt;/p&gt;

</description>
      <category>codegpt</category>
      <category>groq</category>
      <category>llama3</category>
      <category>vscode</category>
    </item>
    <item>
      <title>YoutubeGPT, start a chat with a video 🤖</title>
      <dc:creator>Daniel (San) Ávila</dc:creator>
      <pubDate>Thu, 09 Feb 2023 03:15:23 +0000</pubDate>
      <link>https://dev.to/dani_avila7/youtbe-gpt-start-a-chat-with-a-video-3ona</link>
      <guid>https://dev.to/dani_avila7/youtbe-gpt-start-a-chat-with-a-video-3ona</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg90vgwxi2sp40b4de8wa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg90vgwxi2sp40b4de8wa.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With Youtube GPT you will be able to extract all the information from a video on YouTube just by pasting the video link.&lt;br&gt;
You will obtain the transcription, the embedding of each segment and also ask questions to the video through a chat.&lt;/p&gt;

&lt;p&gt;All code was written with the help of &lt;a href="https://codegpt.co" rel="noopener noreferrer"&gt;Code GPT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codegpt.co" rel="noopener noreferrer"&gt;&lt;img alt="Captura de Pantalla 2023-02-08 a la(s) 9 16 43 p &amp;nbsp;m" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6216945%2F217699939-eca3ae47-c488-44da-9cf6-c7caef69e1a7.png" width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h1&gt;
  
  
  Features
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Video transcription with &lt;strong&gt;OpenAI Whisper&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Embedding Transcript Segments with the OpenAI API (&lt;strong&gt;text-embedding-ada-002&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Chat with the video using &lt;strong&gt;streamlit-chat&lt;/strong&gt; and OpenAI API (&lt;strong&gt;text-davinci-003&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Example
&lt;/h1&gt;

&lt;p&gt;For this example we are going to use this video from The PyCoach&lt;br&gt;
&lt;a href="https://youtu.be/lKO3qDLCAnk" rel="noopener noreferrer"&gt;https://youtu.be/lKO3qDLCAnk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the video URL and then click Start Analysis&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F63lkai07yww5tce3w3ha.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F63lkai07yww5tce3w3ha.gif" alt="Youtube" width="560" height="315"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Pytube and OpenAI Whisper
&lt;/h2&gt;

&lt;p&gt;The video will be downloaded with pytube and then OpenAI Whisper will take care of transcribing and segmenting the video.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs3q0roz4dihau4lai0rx.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs3q0roz4dihau4lai0rx.gif" alt="Pyyube Whisper" width="560" height="315"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Get the video 
&lt;/span&gt;&lt;span class="n"&gt;youtube_video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;YouTube&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;youtube_link&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;streams&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;youtube_video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;streams&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;only_audio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;mp4_video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;download&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;youtube_video.mp4&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;audio_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mp4_video&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# whisper load base model
&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;whisper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;base&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Whisper transcription
&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transcribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;youtube_video.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Embedding with "text-embedding-ada-002"
&lt;/h2&gt;

&lt;p&gt;We obtain the vectors with &lt;strong&gt;text-embedding-ada-002&lt;/strong&gt; of each segment delivered by whisper&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F843s4k2svpcm7hw7y28l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F843s4k2svpcm7hw7y28l.gif" alt="Embedding" width="560" height="315"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Embeddings
&lt;/span&gt;&lt;span class="n"&gt;segments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;segments&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;segment&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;segments&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user_secret&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Embedding&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;segment&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text-embedding-ada-002&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;embeddings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;embedding&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;segment&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;start&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;segment&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;start&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;end&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;segment&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;end&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;embedding&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;embeddings&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;word_embeddings.csv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  OpenAI GPT-3
&lt;/h2&gt;

&lt;p&gt;We make a question to the vectorized text, we do the search of the context and then we send the prompt with the context to the model "text-davinci-003"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj3gbg0xa125v71osu9hl.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj3gbg0xa125v71osu9hl.gif" alt="Question1" width="720" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can even ask direct questions about what happened in the video. For example, here we ask about how long the exercise with Numpy that Pycoach did in the video took.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flk8wgghzt86uju39pezw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flk8wgghzt86uju39pezw.gif" alt="Question2" width="720" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Running Locally
&lt;/h1&gt;

&lt;p&gt;Github: &lt;a href="https://github.com/davila7/youtube-gpt" rel="noopener noreferrer"&gt;https://github.com/davila7/youtube-gpt&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone the repository
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/davila7/youtube-gpt
&lt;span class="nb"&gt;cd &lt;/span&gt;youtube-gpt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Install dependencies&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These dependencies are required to install with the requirements.txt file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;streamlit &lt;/li&gt;
&lt;li&gt;streamlit_chat &lt;/li&gt;
&lt;li&gt;matplotlib &lt;/li&gt;
&lt;li&gt;plotly &lt;/li&gt;
&lt;li&gt;scipy &lt;/li&gt;
&lt;li&gt;sklearn &lt;/li&gt;
&lt;li&gt;pandas &lt;/li&gt;
&lt;li&gt;numpy &lt;/li&gt;
&lt;li&gt;git+&lt;a href="https://github.com/openai/whisper.git" rel="noopener noreferrer"&gt;https://github.com/openai/whisper.git&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;pytube &lt;/li&gt;
&lt;li&gt;openai-whisper
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run the Streamlit server
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;streamlit run app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Upcoming Features 🚀
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Semantic search with embedding&lt;/li&gt;
&lt;li&gt;Chart with emotional analysis&lt;/li&gt;
&lt;li&gt;Connect with Pinecone&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>chatgpt</category>
      <category>openai</category>
      <category>gpt3</category>
      <category>python</category>
    </item>
    <item>
      <title>Compare human and AI responses on Stackoverflow using CodeGPT</title>
      <dc:creator>Daniel (San) Ávila</dc:creator>
      <pubDate>Thu, 26 Jan 2023 23:35:39 +0000</pubDate>
      <link>https://dev.to/dani_avila7/compare-human-and-ai-responses-on-stackoverflow-using-codegpt-i1k</link>
      <guid>https://dev.to/dani_avila7/compare-human-and-ai-responses-on-stackoverflow-using-codegpt-i1k</guid>
      <description>&lt;p&gt;In this article I will explain how to use &lt;code&gt;Ask StackOverflow&lt;/code&gt; functionality of the &lt;strong&gt;Code GPT&lt;/strong&gt; extension.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5w23b8c0vfq7c0uoz3ty.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5w23b8c0vfq7c0uoz3ty.png" alt=" " width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code GPT&lt;/strong&gt; extension, available for &lt;strong&gt;VSCode&lt;/strong&gt;, allows you to search for questions on &lt;strong&gt;StackOverflow&lt;/strong&gt; and compare the best human response with the response from artificial intelligence such as &lt;strong&gt;OpenAI's GPT-3&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Official Code GPT documentation: &lt;a href="https://codegpt.co" rel="noopener noreferrer"&gt;https://codegpt.co&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install CodeGPT in VSCode
&lt;/h2&gt;

&lt;p&gt;Follow the instructions below to install the extension in VSCode&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codegpt.co/docs/tutorial-basics/installation" rel="noopener noreferrer"&gt;Install CodeGPT&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask StackOverflow
&lt;/h2&gt;

&lt;p&gt;To activate this option you just have to press the &lt;code&gt;cmd + shift + p&lt;/code&gt; keys and look for the Ask StackOverflow option&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t1l7bgc7dpghw5vq9el.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6t1l7bgc7dpghw5vq9el.png" alt=" " width="800" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now search for a question or even it can be just with a keyword, in this case, we just enter python and we can get all the queries with this concept that exist on StackOverflow&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fop4wotinwhcyzoriyy85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fop4wotinwhcyzoriyy85.png" alt=" " width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select a question and Code GPT will do the magic 😍&lt;/p&gt;

&lt;p&gt;It will show you the question, then the best answer and for the last time you will be able to see the answer of the artificial intelligence that you have selected.&lt;/p&gt;

&lt;p&gt;In this case, we perform the test with OpenAI and the text-davinci-003 model&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlin69bdngz04v0rlo2d.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlin69bdngz04v0rlo2d.gif" alt="gif" width="600" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Human vs AI &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3fodeg4ju1ryj7hm25o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3fodeg4ju1ryj7hm25o.png" alt=" " width="800" height="651"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try this tool on your own so that you have both human responses and AI responses within Visual Studio Code to improve your projects.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>codegpt</category>
      <category>gpt3</category>
      <category>openai</category>
    </item>
    <item>
      <title>GPT-3 inside VSCode with official OpenAI API</title>
      <dc:creator>Daniel (San) Ávila</dc:creator>
      <pubDate>Thu, 29 Dec 2022 19:06:35 +0000</pubDate>
      <link>https://dev.to/dani_avila7/chatgpt-inside-vscode-with-official-openai-api-10n8</link>
      <guid>https://dev.to/dani_avila7/chatgpt-inside-vscode-with-official-openai-api-10n8</guid>
      <description>&lt;h1&gt;
  
  
  Code GPT extension for VSCode
&lt;/h1&gt;

&lt;p&gt;Using the official &lt;a href="https://openai.com/api/" rel="noopener noreferrer"&gt;OpenAI API&lt;/a&gt; inside the IDE with &lt;strong&gt;Code GPT&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  New feature! Get code from comments
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Write a comment asking for a specific code&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;cmd + shift + i&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Use the code 😎 &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fwxrosd7arw44fjca5z.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fwxrosd7arw44fjca5z.gif" alt="image1" width="760" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create a README.md with "Ask CodeGPT"
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3vfzfiiqmtdhqfp3f93.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3vfzfiiqmtdhqfp3f93.gif" alt="Copy of Untitled Design" width="720" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Select the code and then click on &lt;code&gt;Explain CodeGPT&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6216945%2F209589948-6d6171a2-0716-45cd-8d7c-9ab73ec077cf.png" class="article-body-image-wrapper"&gt;&lt;img alt="Captura de Pantalla 2022-12-26 a la(s) 7 17 59 p &amp;nbsp;m" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6216945%2F209589948-6d6171a2-0716-45cd-8d7c-9ab73ec077cf.png" width="800" height="521"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Result:
&lt;/h3&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6216945%2F209589987-b94984ef-932c-429f-8f19-67377f479433.png" class="article-body-image-wrapper"&gt;&lt;img alt="Captura de Pantalla 2022-12-26 a la(s) 7 19 02 p &amp;nbsp;m" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6216945%2F209589987-b94984ef-932c-429f-8f19-67377f479433.png" width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Get Code&lt;/code&gt;: Create a comment asking for a specific code and CodeGPT will open a new Editor with the code (You don't need to write the code language. CodeGPT will detect it automatically).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ask CodeGPT&lt;/code&gt;: CodeGPT will open a new Editor and respond the question.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Explain CodeGPT&lt;/code&gt;: CodeGPT will open a new Editor and explain the code.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Refactor CodeGPT&lt;/code&gt;: CodeGPT will open a new Editor and refactor the code.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Document CodeGPT&lt;/code&gt;: CodeGPT will open a new Editor and Document the code.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Find Problems CodeGPT&lt;/code&gt;: CodeGPT will open a new Editor and find problems in the code.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Set API KEY&lt;/code&gt;: To save your API KEY securely.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Remove API KEY&lt;/code&gt;: To remove your API KEY.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;Go to &lt;strong&gt;Settings &amp;gt; Extensions &amp;gt; CodeGPT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Complete the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To enter your &lt;a href="https://beta.openai.com/account/api-keys" rel="noopener noreferrer"&gt;API Key&lt;/a&gt; press cmd+shift+p and search for &lt;code&gt;CodeGPT: Set API KEY&lt;/code&gt;. Your API KEY will be safely stored. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgohergaorjcqosq86ep5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgohergaorjcqosq86ep5.png" alt="Captura-de-Pantalla-2023-01-04-a-la-s-2-29-15-p-m-" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://beta.openai.com/account/api-keys" rel="noopener noreferrer"&gt;OpenAI API Key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@dan.avila7/modelos-de-gpt-3-y-codex-11a64948d87" rel="noopener noreferrer"&gt;Model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@dan.avila7/concepto-de-tokens-en-openai-f5d4196076f6" rel="noopener noreferrer"&gt;Max Token&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@dan.avila7/c%C3%B3mo-manejar-los-par%C3%A1metros-temperature-y-top-p-en-openai-b45892b250be" rel="noopener noreferrer"&gt;Temperature&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>chatgpt</category>
      <category>openai</category>
      <category>gpt3</category>
    </item>
    <item>
      <title>CI/CD con Synthetic Monitoring de Datadog y Bitbucket pipelines</title>
      <dc:creator>Daniel (San) Ávila</dc:creator>
      <pubDate>Sat, 17 Dec 2022 04:31:17 +0000</pubDate>
      <link>https://dev.to/dani_avila7/cicd-con-synthetic-monitoring-de-datadog-y-bitbucket-pipelines-h5i</link>
      <guid>https://dev.to/dani_avila7/cicd-con-synthetic-monitoring-de-datadog-y-bitbucket-pipelines-h5i</guid>
      <description>&lt;p&gt;En este artículo te mostraré como enlazar la herramienta Synthetic Monitoring de &lt;br&gt;
Datadog HQ&lt;br&gt;
 con la herramienta Pipelines de &lt;br&gt;
Atlassian Bitbucket&lt;br&gt;
 y tener un panel de control completo de pruebas CI/CD.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4h7fnbfsptucd7k2fry6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4h7fnbfsptucd7k2fry6.png" alt=" " width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DataDog Synthetic Monitoring&lt;br&gt;
Esta herramienta permite automatizar pruebas en tus procesos de despliegue de aplicaciones ya sea en ambiente staging o producción.&lt;/p&gt;

&lt;p&gt;En este ejemplo vamos a realizar una prueba básica a la página inicial de BoxMagic (&lt;a href="https://go.boxmagic.app" rel="noopener noreferrer"&gt;https://go.boxmagic.app&lt;/a&gt;) mediante diferentes navegadores y dispositivos para que sean ejecutadas cada vez que se realiza un push en el repositorio del proyecto en Bitbucket.&lt;/p&gt;

&lt;p&gt;Browser Test&lt;br&gt;
Para comenzar ingresamos al panel de Datadog y seleccionamos el menú UX Monitoring / Synthetic Tests&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frztixbxiyjn6qr7l9kw3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frztixbxiyjn6qr7l9kw3.png" alt=" " width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creamos un nuevo test de tipo Browser Test&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F507d2s9m8v7fr1y178sh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F507d2s9m8v7fr1y178sh.png" alt=" " width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agregamos la URL donde se ejecutará el Test, en este caso será &lt;a href="https://go.boxmagic.app" rel="noopener noreferrer"&gt;https://go.boxmagic.app&lt;/a&gt; (nuestra url inicial), agregamos el nombre y el ambiente. Luego seleccionamos que navegadores y dispositivos serán los que realizarán las pruebas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbvzi7zwcs6wpqpoeu5us.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbvzi7zwcs6wpqpoeu5us.png" alt=" " width="800" height="707"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se pueden agregar las ubicaciones desde donde se realizarán las pruebas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7tvbn3y0us2a5fx80pys.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7tvbn3y0us2a5fx80pys.png" alt=" " width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por último configuramos la frecuencia en que se ejecutará esta prueba y además podemos configurar el monitoreo, alertas y permisos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnykv2t6cg6wauaxj56o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnykv2t6cg6wauaxj56o.png" alt=" " width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pruebas&lt;br&gt;
En este caso solo crearemos una prueba de Assertion / Test an element’s content que permite verificar el contenido de un elemento dentro de la página:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlk0q3epbmce8ym34uio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlk0q3epbmce8ym34uio.png" alt=" " width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Solo debes hacer click en el elemento y completar los datos del formulario, en este caso se está comprobando si el div contenga la frase “Ingresa aquí”.&lt;/p&gt;

&lt;p&gt;Seleccionamos Apply para finalizar y comenzar a ejecutar la prueba.&lt;/p&gt;

&lt;p&gt;Api Keys y test public ID&lt;br&gt;
Para que esta prueba pueda correr cada vez que se ejecute el pipeline de bitbucket debemos obtener 3 variables Public Test ID, APP Key y API Key.&lt;/p&gt;

&lt;p&gt;El Public Test ID se obtiene seleccionando la prueba que acabamos de realizar&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz84wy8xvpzx6e68b721l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz84wy8xvpzx6e68b721l.png" alt=" " width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El APP Key y el API Key se obtienen dentro del menú Organization Settings donde debes crear un nuevo APP Key y un API Key.&lt;/p&gt;

&lt;p&gt;NPM datadog-ci&lt;br&gt;
Puedes ejecutar estas pruebas de forma local con npm para probar que estén correctamente configuradas.&lt;/p&gt;

&lt;p&gt;Primero ejecutamos la instalación con npm&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install -g @datadog/datadog-ci&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Luego ejecutamos synthetics run-test con los parámetros que obtuvimos del paso anterior.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;datadog-ci synthetics run-tests --public-id        $DD_TEST_PUBLIC_ID  --apiKey $DD_API_KEY --appKey $DD_APP_KEY&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;El resultado debería verse de esta forma si todas las pruebas se realizaron correctamente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6trlwhg052ddbxbq1c5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6trlwhg052ddbxbq1c5w.png" alt=" " width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bitbucket Pipeline&lt;br&gt;
Con todas las pruebas configuradas solo nos hace falta agregarlas al pipeline de bitbucket para que sean ejecutadas cada vez que se realice un push al repositorio&lt;/p&gt;

&lt;p&gt;Agregamos las variables de entorno a nuestro repositorio en bitbucket en Repository Setting / Repository variables&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs4czkxfu9nzcpdgqzac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs4czkxfu9nzcpdgqzac.png" alt=" " width="800" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En el archivo bitbucket-pipeline.yml agregamos los comandos para ejecutar las pruebas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pipelines:
     default:
           - step:
               name: datadog-synthetics testing
               image: node:15-alpine3.10
               script:
                 - npm install -g @datadog/datadog-ci
                 - datadog-ci synthetics run-tests --public-id        $DD_TEST_PUBLIC_ID  --apiKey $DD_API_KEY --appKey $DD_APP_KEY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez que realizas un push al repositorio debes ingresar al del menú Pipelines de bitbucket podrás ver la ejecución de las pruebas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9du8wmxl5gdiy3mtjnx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9du8wmxl5gdiy3mtjnx.png" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Puedes ver la realización de cada prueba en el panel de Datadog&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5brytrg1lu72d1r19h1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5brytrg1lu72d1r19h1.png" alt=" " width="800" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;También puedes ver la ejecución de las pruebas y en la columna RUN TYPE deberías poder observar que fueron ejecutadas por el pipeline de CI/CD&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx1ap6gbdcnz5e2kp0lb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx1ap6gbdcnz5e2kp0lb1.png" alt=" " width="800" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eso es todo, ya puedes comenzar a crear todo tipo de pruebas dentro de datadog, se ejecutarán automáticamente en tu CI/CD y de esta forma te aseguras que cada push que se realice al repositorio deba pasar todas las pruebas para que se pueda desplegar en ambientes de staging o producción.&lt;/p&gt;

</description>
      <category>datadog</category>
      <category>bitbucket</category>
      <category>cicd</category>
      <category>syntheticmonitoring</category>
    </item>
  </channel>
</rss>
