<?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: Anjith Paila</title>
    <description>The latest articles on DEV Community by Anjith Paila (@anjith).</description>
    <link>https://dev.to/anjith</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3456812%2F313bba26-3e6f-47f1-80f6-9d2a581b84ae.png</url>
      <title>DEV Community: Anjith Paila</title>
      <link>https://dev.to/anjith</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anjith"/>
    <language>en</language>
    <item>
      <title>Github Copilot Best Practices: From Good to Great</title>
      <dc:creator>Anjith Paila</dc:creator>
      <pubDate>Wed, 28 Jan 2026 00:29:11 +0000</pubDate>
      <link>https://dev.to/anjith/github-copilot-best-practices-from-good-to-great-5gnf</link>
      <guid>https://dev.to/anjith/github-copilot-best-practices-from-good-to-great-5gnf</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;
Part 1: Fundamentals

&lt;ul&gt;
&lt;li&gt;1.1 Context is everything&lt;/li&gt;
&lt;li&gt;1.2 Prompt Engineering Essentials&lt;/li&gt;
&lt;li&gt;1.3 Chat and Inline Completions&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

Part 2: Daily Workflow Optimisation

&lt;ul&gt;
&lt;li&gt;2.1 Shortcuts &amp;amp; Speed Tricks&lt;/li&gt;
&lt;li&gt;2.2 Custom Instructions&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

Part 3: Security &amp;amp; Quality

&lt;ul&gt;
&lt;li&gt;3.1 Do not over rely&lt;/li&gt;
&lt;li&gt;3.2 Always review parameterised queries&lt;/li&gt;
&lt;li&gt;3.3 Verify input validation exists&lt;/li&gt;
&lt;li&gt;3.4 Ensure proper error handling&lt;/li&gt;
&lt;li&gt;3.5 Check that secrets come from environment variables&lt;/li&gt;
&lt;li&gt;3.6 Context Mismanagement&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Summary&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This guide assumes you already know the basics: you've installed Copilot, understand tab-to-accept, and you've seen inline completions in action. Now it's time to take one level up. We'll explore techniques that transform Copilot from a simple autocomplete tool into a useful pair programming partner. We will be looking at some code examples to demonstrate the features. Clone the following git repository and open in any copilot supported IDE.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone git@github.com:anjithp/ai-code-assistant-demo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 1: Fundamentals
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Context is everything
&lt;/h3&gt;

&lt;p&gt;The single most important factor in getting quality suggestions from Copilot isn't your prompts: it's your context. Copilot may process all open files in your IDE to understand your codebase patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means in practice:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When working on a feature, open all relevant files. For example, If you're building a new React component that fetches tasks from an API, open:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The component file you're creating&lt;/li&gt;
&lt;li&gt;The API service file&lt;/li&gt;
&lt;li&gt;The TypeScript types file&lt;/li&gt;
&lt;li&gt;An existing similar component as a reference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What to close:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Close files that aren't relevant to your current task. If you have 20 tabs open from yesterday's debugging session, Copilot's attention is diluted across irrelevant context. Each open file consumes Copilot's limited context window.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example: Building a task service&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's say you need to create a new service method in our example project. Here's how context changes the outcome:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Poor context&lt;/strong&gt; (only &lt;code&gt;taskService.ts&lt;/code&gt; open):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Copilot may suggest generic CRUD code&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getTaskById&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Generic suggestion without your patterns&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Rich context&lt;/strong&gt; (open &lt;code&gt;taskService.ts&lt;/code&gt;, &lt;code&gt;Task.ts&lt;/code&gt; model, &lt;code&gt;Category.ts&lt;/code&gt; model, and existing similar service):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Copilot suggests code matching your exact patterns&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getTaskById&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findByPk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;category&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second suggestion matches your project's Sequelize patterns, includes the relationship you always load, and follows your naming conventions: all because Copilot had the right context.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Prompt Engineering Essentials
&lt;/h3&gt;

&lt;p&gt;After context, the next most important thing to get good results is prompts. The best prompts follow the &lt;strong&gt;3S Principle&lt;/strong&gt;: Specific, Simple, Short.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specific&lt;/strong&gt;: Tell Copilot exactly what you need. Include precise details like desired output format, constraints, or examples. This guides Copilot toward relevant suggestions rather than generic ones.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❌ Bad:

Create a hook

✅ Good:

Custom React hook to fetch and manage tasks with loading and error states.
Returns tasks array, loading boolean, error string, and CRUD methods
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Simple&lt;/strong&gt;: Break complex tasks into smaller steps. Use straightforward language without unnecessary jargon or complexity. Focus on the core intent to make it easy for the AI to understand and respond.&lt;/p&gt;

&lt;p&gt;Instead of: "Create a complete authentication system with JWT, refresh tokens, and role-based access control"&lt;/p&gt;

&lt;p&gt;Break it down:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Step 1: Create JWT token generation function
Step 2: Create token verification middleware
Step 3: Create refresh token rotation logic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Short&lt;/strong&gt;: Keep prompts concise to maintain focus: aim for brevity while covering essentials, as longer prompts can dilute the copilot's attention.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❌ Too verbose:

This function should take a task object and update it in the database
but first it needs to validate the task data and make sure all the fields
are correct and if anything is wrong it should throw an error...

✅ Concise:

// Validates and updates task, throws on invalid data
export const updateTask = async (id: number, data: Partial&amp;lt;TaskData&amp;gt;) =&amp;gt; {
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;In summary, keep the prompts as specific to the task in hand, break down when necessary and be concise to the point.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Write detailed comments above function signatures&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Comments directly above where you're writing code have the strongest influence on Copilot's suggestions. A well-written comment acts as a specification. It tells Copilot not just what the function does, but how it should behave, what it should return, and any important implementation details.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Retrieves a single task by ID with associated category&lt;/span&gt;
&lt;span class="c1"&gt;// Returns null if task doesn't exist&lt;/span&gt;
&lt;span class="c1"&gt;// Includes category with id, name, color fields only&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getTaskById&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findByPk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;category&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Use inline examples to establish patterns&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most effective prompting techniques is showing an example, then letting it generate similar code. This is particularly useful when you're writing repetitive code with slight variations like filter conditions, validation rules, or similar data transformations.&lt;/p&gt;

&lt;p&gt;Write the first example manually, add a comment indicating you want more like it, and Copilot will follow the pattern.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example: status filter&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;where&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Now generate similar code for priority, categoryId&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;where&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;priority&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Copilot follows the pattern&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;categoryId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;where&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;categoryId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;categoryId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Write test descriptions first in TDD&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This could be a good trick if you follow TDD in your development workflow. Test-Driven Development works really well with Copilot. When you write your test first, describing what the function should do and what you expect, Copilot can then generate an implementation that satisfies that specification.&lt;/p&gt;

&lt;p&gt;The test acts as both a specification and a validation. Copilot sees what behavior you're testing for and suggests code that produces the expected results.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;getTaskStatistics&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;should return correct task counts by status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Arrange: Create 4 tasks (2 pending, 1 in progress, 1 completed)&lt;/span&gt;
    &lt;span class="c1"&gt;// Act: Call getTaskStatistics()&lt;/span&gt;
    &lt;span class="c1"&gt;// Assert: Verify counts match&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Now type the implementation. Copilot will suggest code that satisfies this test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.3 Chat and Inline Completions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Use Inline Completions when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing straightforward code with clear patterns&lt;/li&gt;
&lt;li&gt;Completing functions where the signature gives clear picture of what needs to be done&lt;/li&gt;
&lt;li&gt;Generating boilerplate code&lt;/li&gt;
&lt;li&gt;You know exactly what you need&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Copilot Chat when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need to understand existing code&lt;/li&gt;
&lt;li&gt;Refactoring complex logic&lt;/li&gt;
&lt;li&gt;Debugging errors&lt;/li&gt;
&lt;li&gt;Exploring multiple approaches&lt;/li&gt;
&lt;li&gt;Working across multiple files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use &lt;a class="mentioned-user" href="https://dev.to/workspace"&gt;@workspace&lt;/a&gt; for codebase-wide questions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a class="mentioned-user" href="https://dev.to/workspace"&gt;@workspace&lt;/a&gt; participant tells Copilot to search your entire codebase to answer a question. This is incredibly useful when you're trying to understand how something works across your project, find where a pattern is used, or locate specific functionality. Instead of using grep or manually searching, ask Copilot to find and explain patterns for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use /explain before /fix when debugging&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you encounter a bug, the temptation is to immediately ask Copilot to fix it. However, using &lt;code&gt;/explain&lt;/code&gt; first helps you understand the root cause, which leads to better fixes and helps you learn from the issue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Powerful Chat Features:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Slash commands&lt;/strong&gt; are shortcuts to common tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/explain&lt;/code&gt; – Get a breakdown of complex code&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/fix&lt;/code&gt; – Debug and fix errors&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/tests&lt;/code&gt; – Generate test cases&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/doc&lt;/code&gt; – Create documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Chat participants&lt;/strong&gt; give Copilot specific context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@workspace&lt;/code&gt; – Search across your entire workspace&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;#file&lt;/code&gt; – Reference specific files: &lt;code&gt;"Update #taskService.ts to use async/await"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;#codebase&lt;/code&gt; – Let Copilot search for the right files automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example chat prompts:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@workspace how do we handle authentication in this codebase?
Show me where JWT tokens are verified.

/explain why is this causing an infinite re-render?
[After understanding the issue]
/fix update the dependency array to prevent re-renders
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 2: Daily Workflow Optimisation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Shortcuts &amp;amp; Speed Tricks
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Essential shortcuts (VS Code)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Tab&lt;/code&gt; : Accept suggestion&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Esc&lt;/code&gt; : Dismiss suggestion&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl+Enter&lt;/code&gt; (Windows/Linux) / &lt;code&gt;Cmd+Enter&lt;/code&gt; (Mac) : Open Copilot Chat&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Alt+]&lt;/code&gt; : Next suggestion&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Alt+[&lt;/code&gt; : Previous suggestion&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl+→&lt;/code&gt; : Accept next word of suggestion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Multiple conversation threads&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can have multiple ongoing conversations by clicking the &lt;code&gt;+&lt;/code&gt; sign in the chat interface. Use this to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep a debugging conversation separate from a feature discussion&lt;/li&gt;
&lt;li&gt;Maintain context for different tasks&lt;/li&gt;
&lt;li&gt;Avoid polluting one conversation with unrelated context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quick accept/reject pattern&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a suggestion is 70-80% correct, it's often faster to accept it and make small edits than to reject it and prompt again. This iterative approach is faster and more productive than waiting for perfect suggestions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;See suggestion → Quickly evaluate (2-3 seconds max)&lt;/li&gt;
&lt;li&gt;If 80% correct → Accept with &lt;code&gt;Tab&lt;/code&gt;, then edit&lt;/li&gt;
&lt;li&gt;If wrong direction → &lt;code&gt;Esc&lt;/code&gt; and add clarifying comment&lt;/li&gt;
&lt;li&gt;If close but not quite → &lt;code&gt;Alt+]&lt;/code&gt; to see alternatives&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Build a personal library of effective prompts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As you work with Copilot, you'll discover prompts that consistently produce good results for your codebase. Keep a document with these prompts so you can reuse them. This library becomes more valuable over time as you refine prompts for your specific patterns and needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Custom Instructions
&lt;/h3&gt;

&lt;p&gt;Custom instructions let you teach Copilot your preferences and coding standards. Project-level instructions should be saved in the file &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt;. This file acts as a project-wide instruction manual that Copilot reads automatically. It's where you document your tech stack, coding patterns, testing conventions, and any project-specific rules. Think of it as onboarding documentation for Copilot.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tip: For existing projects, you can put copilot in agent mode, ask it to generate initial instructions file by scanning the repo and make necessary modifications manually.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Project Instructions&lt;/span&gt;

&lt;span class="gu"&gt;## Tech Stack&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Backend: Express.js + TypeScript + Sequelize + SQLite
&lt;span class="p"&gt;-&lt;/span&gt; Frontend: React 19 + TypeScript + Vite

&lt;span class="gu"&gt;## Code Patterns&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Use functional programming style for services
&lt;span class="p"&gt;-&lt;/span&gt; All async functions use async/await (never callbacks)
&lt;span class="p"&gt;-&lt;/span&gt; Services contain business logic, controllers handle HTTP only
&lt;span class="p"&gt;-&lt;/span&gt; Always include JSDoc comments for exported functions
&lt;span class="p"&gt;-&lt;/span&gt; Use explicit return types in TypeScript

&lt;span class="gu"&gt;## Testing&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Tests in &lt;span class="sb"&gt;`tests/`&lt;/span&gt; directory mirror &lt;span class="sb"&gt;`src/`&lt;/span&gt; structure
&lt;span class="p"&gt;-&lt;/span&gt; Use descriptive test names: "should return 404 when task not found"
&lt;span class="p"&gt;-&lt;/span&gt; Mock database calls with jest.mock()

&lt;span class="gu"&gt;## Error Handling&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Controllers throw ApiError for HTTP errors
&lt;span class="p"&gt;-&lt;/span&gt; Services throw Error with descriptive messages
&lt;span class="p"&gt;-&lt;/span&gt; Validation errors should specify which field failed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 3: Security &amp;amp; Quality
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 Do not over rely
&lt;/h3&gt;

&lt;p&gt;The biggest mistake is accepting code you don't understand. Every accepted suggestion should pass this test: "Could I have written this myself given time?" If the answer is no, you're accumulating technical debt or worse critical production incident. In my personal experience, AI assistants have generated buggy and unsafe code several times. Though this is improving you should still be the ultimate judge of the overall quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to write code yourself:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complex business logic unique to your domain&lt;/li&gt;
&lt;li&gt;Security-critical authentication/authorization&lt;/li&gt;
&lt;li&gt;Performance-sensitive algorithms&lt;/li&gt;
&lt;li&gt;Cryptography implementations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.2 Always review parameterised queries
&lt;/h3&gt;

&lt;p&gt;SQL injection is one of the most common and dangerous security vulnerabilities. While modern ORMs like Sequelize protect you by default, Copilot might occasionally suggest raw queries or string concatenation. Always verify that database queries use parameterized inputs, never string interpolation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Dangerous - SQL injection vulnerability&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sequelize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s2"&gt;`SELECT * FROM tasks WHERE status = '&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;'`&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ Safe - parameterized query&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findAll&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;where&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.3 Verify input validation exists
&lt;/h3&gt;

&lt;p&gt;User input should always be validated before being used in business logic or database operations. Copilot may not always add comprehensive validation, so check that suggested code validates required fields, data types, string lengths, and formats. Missing validation can lead to data corruption, application crashes, or security issues.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;validateTaskData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Partial&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;TaskCreationAttributes&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Make sure Copilot added proper validation&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Title must be at least 3 characters long&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// Check that all required validations are present&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.4 Ensure proper error handling
&lt;/h3&gt;

&lt;p&gt;HTTP endpoints should have try-catch blocks(or common error handlers) to handle errors gracefully and return appropriate HTTP status codes. Copilot sometimes generates the happy path without error handling, so always verify that exceptions are caught and handled. Unhandled exceptions crash your server or return 500 errors without useful information.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createTask&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  &lt;span class="c1"&gt;// Verify Copilot added error handling&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;taskService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;task&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Proper error handling should be here&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.5 Check that secrets come from environment variables
&lt;/h3&gt;

&lt;p&gt;Hardcoded secrets in source code are a critical security vulnerability. API keys, database passwords, and JWT secrets must come from environment variables, never be written directly in code. Copilot might suggest hardcoded values for convenience so always replace them with environment variable references.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Never accept hardcoded secrets&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;abc123...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ Always use environment variables&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JWT_SECRET&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;JWT_SECRET not configured&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.6 Context Mismanagement
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Too many irrelevant files:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Close files from previous tasks. Copilot's context window is limited so better to have only relevant files open.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not enough context:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open related files even if you're not editing them. That type definition file, that similar component, they all help to get quality suggestions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignoring project patterns:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have a unique architecture or patterns, document them in &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt;. Don't expect Copilot to guess.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Copilot is a powerful tool, but you're still the developer and should have the final say about the code going into production. If you remember the following tips you will go a long way in getting the most value of copilot or any other AI coding assistant.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Manage context&lt;/strong&gt; – relevant files open, irrelevant files closed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write clear, specific prompts&lt;/strong&gt; – following the 3S principle or any other prompting pattern&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use the right tool for the job&lt;/strong&gt; – chat for exploration, inline for completion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never blindly accept&lt;/strong&gt; – every suggestion should be reviewed and understood&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teach patterns&lt;/strong&gt; – through custom instructions and documentation&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>githubcopilot</category>
      <category>ai</category>
    </item>
    <item>
      <title>Introduction to Claude Code</title>
      <dc:creator>Anjith Paila</dc:creator>
      <pubDate>Thu, 20 Nov 2025 02:15:11 +0000</pubDate>
      <link>https://dev.to/anjith/introduction-to-claude-code-25jf</link>
      <guid>https://dev.to/anjith/introduction-to-claude-code-25jf</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%2Fn602qawl89zl30lhk08k.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%2Fn602qawl89zl30lhk08k.png" alt="claude code description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What is Claude Code?&lt;/li&gt;
&lt;li&gt;Key Capabilities?&lt;/li&gt;
&lt;li&gt;What should you use Claude Code for?&lt;/li&gt;
&lt;li&gt;How Claude Code works under the hood?&lt;/li&gt;
&lt;li&gt;Installation and Setup&lt;/li&gt;
&lt;li&gt;Getting Started&lt;/li&gt;
&lt;li&gt;Feature Development&lt;/li&gt;
&lt;li&gt;Bug Fixing&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Subagents&lt;/li&gt;
&lt;li&gt;Slash commands and scripting&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="what-is-claude-code"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Claude Code is a command-line tool from Anthropic that brings Claude's AI capabilities directly into your terminal, enabling autonomous coding assistance through natural language commands. Unlike traditional IDE plugins or web-based AI assistants, Claude Code operates as a standalone CLI application that can read, write, and modify files in your codebase while maintaining full context of your project structure.&lt;/p&gt;

&lt;p&gt;At its core, Claude Code follows a simple workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash

# You describe what you want in plain English

claude "refactor this authentication module to use JWT tokens"

# Claude analyzes your codebase, makes changes, and explains what it did

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Plenty of coding agents are already out there, and most of them offer the same core functions: navigating codebases, generating and refining code, executing commands, handling git workflows, and juggling multiple development threads at once.&lt;/p&gt;

&lt;p&gt;So, what sets Claude Code apart?&lt;/p&gt;

&lt;p&gt;&lt;a id="capabilities"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Capabilities
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Terminal-Based Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Code lives in your terminal, making it accessible via SSH, scriptable in CI/CD pipelines, and usable across any development environment without GUI dependencies. Other cli based coding agents have entered into the market now like cursor cli and likely others will follow soon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Action-Taking Capabilities&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rather than just suggesting code, Claude Code actively performs tasks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates new files and directories&lt;/li&gt;
&lt;li&gt;Modifies existing code with precision&lt;/li&gt;
&lt;li&gt;Runs tests and interprets results&lt;/li&gt;
&lt;li&gt;Manages git operations when needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Unix Philosophy in Action&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Code embodies "do one thing well" - it's a focused tool that integrates seamlessly with pipes, scripts, and other command-line utilities. This seamless integration in the command line makes it very powerful to write scripts and automate tasks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash

# Combine with other tools
git diff | claude "explain these changes"

# Find TODOs and address them
grep -r "TODO" . | claude "implement these todos"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Direct File Editing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No copy-paste workflow needed. Claude Code lives in your repository, reads your actual files, understands their relationships, and makes changes in place:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash

# Claude sees your entire module structure

claude "add error handling to all API endpoints in src/api/"

# Files are modified directly, ready for git diff review

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This direct manipulation approach means you stay in your terminal, maintain your flow state, and can immediately test or commit changes without context switching between applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enterprise-Ready Design&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built with professional development in mind:&lt;/li&gt;
&lt;li&gt;Respects .gitignore and project boundaries&lt;/li&gt;
&lt;li&gt;Supports team-wide configuration standards using cluade.md files.&lt;/li&gt;
&lt;li&gt;Integrates with existing security policies and is based on permission based architecture with read only as default.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="use"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What should you use Claude Code for?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Develop features and fix Bugs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Explain what you would like to do in a prompt, and Claude Code will create a detailed plan and will write the code. Claude Code can also interpret error messages or describe what’s going wrong and will diagnose the issue in your codebase, pinpoint the cause, and apply the right fix. As with any AI tool, a clear and structured prompting yields good results.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash

# Generate boilerplate code and project structures from scratch:
claude "create a Node.js REST API with JWT auth and user CRUD operations"

# Scaffold test suites
claude "generate unit tests for all services in src/services/"

# Systematic changes across multiple files:
claude "refactor all database queries to use async/await pattern"

# Fix failing tests
claude "fix the failing Jest tests in user.test.js"

# Debug error traces
cat error.log | claude "diagnose and fix this production error"

# Generate comprehensive docs
claude "document all public APIs with JSDoc comments"
claude "generate README with setup instructions based on package.json"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Explore and Understand Your Codebase&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Whether you’re diving into a massive legacy system or a fresh project, Claude Code tries its best to provide clear answers about structure, logic, and dependencies. It stays aware of the full project, pulls in updates from the web, and can even connect to tools like Google Drive, Figma, and Slack for additional context using MCP servers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task Complexity Sweet Spot&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Code works best with tasks that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Well-defined but tedious to implement manually&lt;/li&gt;
&lt;li&gt;Require understanding of multiple files and their relationships&lt;/li&gt;
&lt;li&gt;Follow established patterns in your codebase&lt;/li&gt;
&lt;li&gt;Can be verified through tests or linting&lt;/li&gt;
&lt;li&gt;The key is finding the balance between tasks that are too simple (faster to do manually) and too complex (require human judgment and iteration).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="how"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Claude Code works under the hood?
&lt;/h2&gt;

&lt;p&gt;Assistants like Claude Code and others have similar working principles under the hood. Please checkout this article &lt;a href="https://anjith.tech/2025/09/12/how-coding-assistants-work/" rel="noopener noreferrer"&gt;https://anjith.tech/2025/09/12/how-coding-assistants-work/&lt;/a&gt; to learn more.&lt;/p&gt;

&lt;p&gt;&lt;a id="installation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation and Setup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Linux/macOS/WSL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Code needs npm to install. First install Node.js 18+ &lt;a href="https://nodejs.org/en/download" rel="noopener noreferrer"&gt;https://nodejs.org/en/download&lt;/a&gt;. After this run the following command to install claude code globally.&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;Another way to install natively is by running the following command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://claude.ai/install.sh | bash

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Code is built as a command-line tool designed for Unix-like operating systems so windows needs a special treatment and is a bit more involved. First we need to install wsl(Windows Subsystem for Linux) as a precursor. Open PowerShell as Administrator and execute:​&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wsl --install

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this reboot the system for the installation to take an effect, launch the installed Linux distribution from the start menu and create a new user account and password when prompted. Now follow the steps in Linux/macOS to proceed with claude code installation.&lt;/p&gt;

&lt;p&gt;Alternative way to install natively using power shell is by running the below command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;irm https://claude.ai/install.ps1 | iex

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are several subscription options to get access to claude code. Refer &lt;a href="https://www.claude.com/pricing" rel="noopener noreferrer"&gt;https://www.claude.com/pricing&lt;/a&gt; for more details. It is also possible to use API key based approach using Anthropic console account(&lt;a href="https://console.anthropic.com/" rel="noopener noreferrer"&gt;https://console.anthropic.com/&lt;/a&gt;). If you choose this option, an environment variable ANTHROPIC_API_KEY="your-api-key-here" should be added to your environment depending on the operating system manually or just initiate login command and choose Anthropic console account and authorise the login. Please be aware of the costs when using API key as the costs may spiral out if not careful. My recommendation is to use pro or max account depending on the usage level. You can start the login as below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude

# You'll be prompted to log in on first use
# Or

/login
# Follow the prompts to log in with your account

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once logged in, your credentials are stored and you may not need to login again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IDE Integration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Code is primarily a CLI based tool but if you want to see the changes done visually then you can install relevant extension/plugin for your IDE.&lt;/p&gt;

&lt;p&gt;VSCode: &lt;a href="https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code&lt;/a&gt;&lt;br&gt;
JetBrains IDEs: &lt;a href="https://plugins.jetbrains.com/plugin/27310-claude-code-beta-" rel="noopener noreferrer"&gt;https://plugins.jetbrains.com/plugin/27310-claude-code-beta-&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a id="start"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Let’s explore Claude Code with a hands-on example. Follow these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clone the repository(&lt;a href="https://github.com/anjithp/ai-code-assistant-demo" rel="noopener noreferrer"&gt;https://github.com/anjithp/ai-code-assistant-demo&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Navigate to the quick-start directory and follow the build instructions in the README.&lt;/li&gt;
&lt;li&gt;Launch the application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project uses TypeScript, Node.js, and React. If you’re comfortable with basic programming concepts, you’ll be able to follow along easily. Once running, your app should look like this:&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%2Fgyxsm71z473chu80pnbu.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%2Fgyxsm71z473chu80pnbu.png" alt="claude code app home page" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Initializing Your Project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start by initializing Claude Code in your project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the quick-start directory in your terminal.&lt;/li&gt;
&lt;li&gt;Run the Cluade CLI with the command: &lt;code&gt;claude&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Execute the init command: &lt;code&gt;/init&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Claude scans your codebase and generates claude.md: a project memory file that describes your repository’s structure, purpose, and key components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review and Refine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Review the generated file carefully. Claude uses claude.md as context for all tasks, so accuracy matters. Check that it correctly describes your project, then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add any missing details&lt;/li&gt;
&lt;li&gt;Fix any inaccuracies&lt;/li&gt;
&lt;li&gt;Commit claude.md to version control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures your entire team works with the same project context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding the project&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt: What does this project do? Give me an overview of the architecture.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you ask Claude about your project Claude will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read relevant project files&lt;/li&gt;
&lt;li&gt;Identify the technologies and frameworks used&lt;/li&gt;
&lt;li&gt;Explain core functionality (like CRUD operations)&lt;/li&gt;
&lt;li&gt;Map out how components communicate (frontend-to-backend flow)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Claude may need to run commands(tools) to gather information. For example, it might ask permission to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run tree to explore your directory structure&lt;/li&gt;
&lt;li&gt;Execute other diagnostic commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll be prompted to approve these actions before they run.&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%2Fhxpqcu2z2z88qnzxifdz.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%2Fhxpqcu2z2z88qnzxifdz.png" alt="claude code ask permission" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When Claude requests permission to run a command, you have three options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allow once – Run the command this time only&lt;/li&gt;
&lt;li&gt;Always allow – Run this command now and in future sessions without asking&lt;/li&gt;
&lt;li&gt;Deny/Do differently – Block the command or suggest an alternative approach&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before approving, verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The command is safe to execute&lt;/li&gt;
&lt;li&gt;It’s running with correct parameters&lt;/li&gt;
&lt;li&gt;It won’t modify or delete important files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a command looks unsafe or incorrect, choose option 3 to deny it or propose a different approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finding Specific Code and Patterns&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Code can trace logic flows and identify patterns across your entire codebase.&lt;/p&gt;

&lt;p&gt;Ask questions like: “Where is the task creation logic implemented?” Claude will analyze your codebase and show the complete flow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI layer → State management → Routing → Controller → Service → Model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ask questions like: “What programming patterns are used in this codebase?”&lt;/p&gt;

&lt;p&gt;Claude will identify architectural and design patterns such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MVC, Repository, or Factory patterns&lt;/li&gt;
&lt;li&gt;State management approaches&lt;/li&gt;
&lt;li&gt;API design patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helps you understand existing conventions and maintain consistency when adding new features.&lt;/p&gt;

&lt;p&gt;&lt;a id="fd"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Feature Development
&lt;/h2&gt;

&lt;p&gt;Let’s walk through real-world examples of how to use Claude Code to add new features to your codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding a New Task Priority&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt: 

Implement code to add a new task priority called "Critical".

Requirements:

1. Add "Critical" to the default priorities that are seeded in the database
2. Ensure the priority appears in the frontend priority filter dropdown
3. priority label color in tasks view frontend should be #a70606ff
3. The priority should work with all existing task operations (create, update, filter)
4. No need to implement tests
5. Use existing patterns
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How Claude Code Responds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyzes requirements and creates a TODO plan listing all necessary changes&lt;/li&gt;
&lt;li&gt;Requests permission to start making edits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Permission Options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allow one-by-one – Review each file change individually&lt;/li&gt;
&lt;li&gt;Allow all edits this session – Let Claude make all changes at once (recommended for simple tasks like this)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After Completion:&lt;/p&gt;

&lt;p&gt;Claude shows a summary of all changes made. You can then verify the new “Critical” priority appears and works correctly in your UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding User Authentication&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Adding user authentication is more complex than adding a task priority: it requires changes across multiple layers of your application. For tasks like this, use Plan Mode to map out the solution before writing any code. This feature should be used in scenarios such as requiring changes across many files, researching the codebase before making changes, iterating on the approach with Claude before committing etc.&lt;/p&gt;

&lt;p&gt;Switching to Plan Mode:&lt;/p&gt;

&lt;p&gt;Claude Code has three modes, toggled with Shift+Tab:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Normal Mode (default) – Prompts for permission on each change&lt;/li&gt;
&lt;li&gt;Auto-Accept Mode – ⏵⏵ accept edits on – Automatically applies all edits&lt;/li&gt;
&lt;li&gt;Plan Mode – ⏸ plan mode on – Creates plans without making changes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To Enter Plan Mode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From Normal Mode: Press Shift+Tab → Auto-Accept Mode&lt;/li&gt;
&lt;li&gt;Press Shift+Tab again → Plan Mode
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt:

Add JWT-based user authentication to the task management app.

Requirements:

- Each user should only see their own tasks
- Use JWT tokens
- Store JWT token in localStorage with auto-login on page refresh
- Build login and register forms in the frontend
- Protect task routes and redirect to login if not authenticated
- No need of any tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude analyzes your codebase and generates a detailed implementation plan showing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All files that need to be created or modified&lt;/li&gt;
&lt;li&gt;The sequence of changes required&lt;/li&gt;
&lt;li&gt;How components will interact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After reviewing the plan, you can either manually approve the changes one-by-one or auto-accept all edits at once. Below is the snapshot how the plan looked like when I tried.&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%2Fsdh9k89xbzvmiov3mhtb.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%2Fsdh9k89xbzvmiov3mhtb.png" alt="claude code plan" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After working through the plan, Claude Code successfully implemented the entire login feature. The authentication system worked immediately: no debugging, no fixes needed.&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%2Fdzsal3aej01awisx4pw2.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%2Fdzsal3aej01awisx4pw2.png" alt="claude code app login impl" width="800" height="385"&gt;&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%2Fu2nuwspnrjg3wcdfapp4.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%2Fu2nuwspnrjg3wcdfapp4.png" alt="claude code app login working" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This demonstrates Claude Code’s ability to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand complex, multi-file changes&lt;/li&gt;
&lt;li&gt;Follow existing code patterns consistently&lt;/li&gt;
&lt;li&gt;Integrate new features without breaking existing functionality&lt;/li&gt;
&lt;li&gt;Deliver working code on the first attempt(sometimes)&lt;/li&gt;
&lt;li&gt;Power of using Plan Mode for complex features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The examples above used simple prompts for brevity, but you should make yours specific and context rich. The richer your context, the better Claude Code understands your requirements and architectural preferences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disabling Permission Checks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If permission prompts become disruptive, you can launch Claude Code without them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# use with extreme caution
claude --dangerously-skip-permissions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only use this flag when you fully understand the risks. Without permission checks, Claude Code could:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
Delete unintended files
Make incorrect git commits
Modify critical configuration files
Execute potentially harmful commands
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When to Consider This Flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You’re working in a safe, isolated environment
You have recent backups
You’re performing repetitive, well-understood tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a id="bugs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bug Fixing
&lt;/h2&gt;

&lt;p&gt;To effectively fix bugs, instruct the steps to reproduce the issue and give stack trace and mention if the bug is intermittent or consistent. To simulate let’s manually introduce a bug and see whether claude can figure it out. Make the following changes to countByStatus method in taskService.ts file in the backend.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; return tasks.filter(task =&amp;gt; task.status = status).length;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We mistakenly put = operator instead of equality operator(===). Now create one or more tasks and refresh the UI and you can see that the dashboard shows same number of tasks for all statuses which is incorrect.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt:

On dashboard same number of tasks shown for pending, in progress and completed cards despite having tasks in different status in the db. Find and fix the issue.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code traces the flow from frontend to backend and identifies the assignment operator (&lt;code&gt;=&lt;/code&gt;) should be an equality operator (&lt;code&gt;===&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Let’s try to fix another subtle bug. Create task with some category other than ‘None’ and now update the task to remove the category by selecting ‘None’. You will notice that category doesn’t get removed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt:

While updating the task, setting category to None doesn't result in the category getting removed from the task and the old category is still retained. Fix this issue.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On my first attempt, Claude didn’t make the correct fix. After a follow-up prompt clarifying the issue persisted, it identified the root cause:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;categoryId was typed as number | undefined&lt;/li&gt;
&lt;li&gt;When serialized to JSON, undefined properties get removed&lt;/li&gt;
&lt;li&gt;Solution: Change type to number | null and send null when category is removed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key Takeaway:&lt;/p&gt;

&lt;p&gt;Sometimes you need iterative prompts with additional context to reach the correct solution. Don’t expect perfection on the first try: treat it as a conversation where you provide more details as needed.&lt;/p&gt;

&lt;p&gt;&lt;a id="testing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing
&lt;/h2&gt;

&lt;p&gt;Code assistants excel at generating tests. You can request unit tests, integration tests, edge case scenarios, or tests in specific styles (like BDD).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt:

Write integraion tests for taskService.ts module in backend using jest library.
- Use BDD style for test names.
- Use in memory database.
- Cover edge cases and error scenarios
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How Claude Code Responds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generates comprehensive tests covering all service methods&lt;/li&gt;
&lt;li&gt;Asks permission to run the tests for verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What to Expect:&lt;/p&gt;

&lt;p&gt;Tests may not pass on the first attempt. Claude Code will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read error messages&lt;/li&gt;
&lt;li&gt;Make necessary corrections&lt;/li&gt;
&lt;li&gt;Iterate until tests succeed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This may take several attempts, which is normal. If your repo already has test cases, improve results by instructing Claude to follow patterns. For example like below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Write integration tests for taskService.ts following existing test patterns.
Use the same structure and conventions as tests/userService.test.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Providing sample test files in the context helps Claude match:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your naming conventions&lt;/li&gt;
&lt;li&gt;Setup/teardown patterns&lt;/li&gt;
&lt;li&gt;Assertion styles&lt;/li&gt;
&lt;li&gt;Mock patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures consistency across your test suite.&lt;/p&gt;

&lt;p&gt;&lt;a id="subagents"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Subagents
&lt;/h2&gt;

&lt;p&gt;Subagents are specialized AI assistants you create to handle specific tasks and they let you delegate specialized work while maintaining clean separation of concerns: similar to how you’d assign specific responsibilities to different team members. You can think of them like custom and polished prompts with following extra features:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Independent Context Window&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each subagent has its own separate context&lt;/li&gt;
&lt;li&gt;Their work doesn’t clutter your main conversation&lt;/li&gt;
&lt;li&gt;Keeps your primary agent focused on the overall task&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Custom System Prompts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define each subagent’s personality and expertise&lt;/li&gt;
&lt;li&gt;Example: One subagent acts as a strict code reviewer, another generates creative test cases&lt;/li&gt;
&lt;li&gt;Tailor instructions to specific roles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Scoped Tool Access&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Grant subagents only the tools they need&lt;/li&gt;
&lt;li&gt;Improves security by limiting capabilities&lt;/li&gt;
&lt;li&gt;Keeps agents focused without distractions from unnecessary commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Reusability&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create once and use across different projects&lt;/li&gt;
&lt;li&gt;Helps bring consistent workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s create a subagent that reviews code like a senior developer.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Launch the agent creator: Run /agents command&lt;/li&gt;
&lt;li&gt;Create new agent: Select ‘Create New Agent’&lt;/li&gt;
&lt;li&gt;Set scope: Choose ‘Project’ (available to all team members)&lt;/li&gt;
&lt;li&gt;Generation method: Select ‘Generate with Claude’&lt;/li&gt;
&lt;li&gt;Define the role: Enter "Review code as a senior developer"&lt;/li&gt;
&lt;li&gt;Grant permissions: Choose ‘All Tools’ (or select specific tools)&lt;/li&gt;
&lt;li&gt;Customize appearance: Select model and background color&lt;/li&gt;
&lt;li&gt;Review and save: Read the generated description, then save or edit before saving&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To use the sub agent, make some code changes, then invoke your subagent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use senior-code-reviewer subagent to check my uncommitted changes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The subagent will review your changes with the perspective and standards of a senior developer, providing focused feedback without cluttering your main conversation. The code review subagent is just one example. You can create specialized subagents for scenarios like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documentation writer – Generates comprehensive docs from code&lt;/li&gt;
&lt;li&gt;Security reviewer – Focuses exclusively on security vulnerabilities&lt;/li&gt;
&lt;li&gt;Debugging specialist – Traces and diagnoses complex bugs&lt;/li&gt;
&lt;li&gt;Performance optimizer – Identifies bottlenecks and suggests improvements&lt;/li&gt;
&lt;li&gt;Test generator – Creates comprehensive test suites&lt;/li&gt;
&lt;li&gt;API designer – Reviews and suggests API improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Community Resources:&lt;/p&gt;

&lt;p&gt;Check out this curated list of subagent examples: &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents" rel="noopener noreferrer"&gt;https://github.com/VoltAgent/awesome-claude-code-subagents&lt;/a&gt; You can use these subagents as-is or customize them to match your team’s specific needs and standards.&lt;/p&gt;

&lt;p&gt;If you want to create your own sub agents, follow the below guidelines.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep subagents focused on a single job. The best subagents are specialists, not generalists. A dedicated code-reviewer outperforms an agent trying to review code, write tests, and update documentation. Focused agents are more reliable and easier to manage and produce better results.&lt;/li&gt;
&lt;li&gt;Write clear, detailed system prompts. Your subagent’s effectiveness depends entirely on its system prompt quality. Include step-by-step processes, define explicit rules, specify coding standards and patterns to follow etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bad Prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Review code for issues
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Good Prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Review code as a senior developer focusing on:

- Security vulnerabilities such as SQL injection, XSS, auth issues
- Performance bottlenecks such as N+1 queries, memory leaks
- Code maintainability (naming, complexity, duplication)
- Follow existing project patterns in /src/patterns/
- Prioritize critical issues over style preferences
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a id="slash"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Slash commands and scripting
&lt;/h2&gt;

&lt;p&gt;Claude Code’s command-line interface includes slash commands: shortcuts that start with / to run pre-defined tasks without writing lengthy prompts. Let’s look at some essential slash commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Session Management:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;/clear – Clears conversation history and frees up context (use when starting fresh)&lt;/li&gt;
&lt;li&gt;/compact – Clears history but keeps summary in context (prevents hitting token limits)&lt;/li&gt;
&lt;li&gt;/rewind – Restores conversation to a previous point (useful when suggestions go off-track)&lt;/li&gt;
&lt;li&gt;/exit – Exits the REPL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cost &amp;amp; Context:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;/cost – Shows total session cost (tracks API charges)&lt;/li&gt;
&lt;li&gt;/context – Visualizes current context in a colored grid&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Account &amp;amp; Configuration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;/login, /logout – Manage Anthropic account authentication&lt;/li&gt;
&lt;li&gt;/model – Switch between models (Opus, Sonnet, etc.)&lt;/li&gt;
&lt;li&gt;/memory – Edit project and user memory files (claude.md)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Workflows:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;/review – Reviews a pull request&lt;/li&gt;
&lt;li&gt;/export – Exports conversation to file or clipboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While using Claude Code, you can make ad-hoc suggestions like “add this to memory” and Claude will update claude.md accordingly. These are the most commonly used commands. Check the Claude Code documentation for the complete list of built-in commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating Custom Slash Commands&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can create your own slash commands at both project and user levels.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project commands (.claude/commands/) – Available to everyone who clones the repository&lt;/li&gt;
&lt;li&gt;User commands (~/.claude/commands/) – Personal commands only you can use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Create the commands directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# For project-level commands
mkdir -p .claude/commands

# For user-level commands
mkdir -p ~/.claude/commands
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a markdown file with your command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "&amp;lt;command instructions&amp;gt;" &amp;gt; .claude/commands/my-command.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Invoke your command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/my-command
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you notice commands names are derived from the markdown file name.&lt;/p&gt;

&lt;p&gt;Example: Fix Issue Command&lt;/p&gt;

&lt;p&gt;Create the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "Fix issue $ARGUMENTS" &amp;gt; .claude/commands/fix-issue.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/fix-issue https://github.com/your-repo/issues/123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The $ARGUMENTS variable captures everything you type after the command name. There are many many possibilities exists depending on your project scope. Check this github repository &lt;a href="https://github.com/hesreallyhim/awesome-claude-code#slash-commands" rel="noopener noreferrer"&gt;https://github.com/hesreallyhim/awesome-claude-code#slash-commands&lt;/a&gt; for some custom slash commands inspiration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scripting with Claude Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Code can run non-interactively on the command line, accepting piped input and output. This makes it powerful for writing automation scripts. Use the -p flag to provide a prompt without entering the interactive REPL. Combine Claude Code with other Unix commands using pipes&lt;/p&gt;

&lt;p&gt;Example 1: Analyze Build Logs&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget &amp;lt;build-log-url&amp;gt; | claude -p "Explain the root cause of this build error"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example 2: Review Git Diff&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git diff | claude -p "Review these changes for potential issues"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example 3: Analyze Log Files&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tail -n 100 app.log | claude -p "Identify any error patterns in this log"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example 4: Process Command Output&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm audit | claude -p "Prioritize these security vulnerabilities by severity"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This Unix-style composability lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automate code reviews in CI/CD pipelines&lt;/li&gt;
&lt;li&gt;Analyze logs as part of deployment scripts&lt;/li&gt;
&lt;li&gt;Create custom development workflows&lt;/li&gt;
&lt;li&gt;Integrate AI assistance into existing toolchains&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="conclusion"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Claude Code brings AI-powered development assistance directly into your terminal. It’s not about replacing your coding skills: it’s about amplifying your productivity by handling repetitive tasks, navigating complex codebases, and implementing well-defined features while you focus on architecture and business logic.&lt;/p&gt;

&lt;p&gt;Begin with simple, low-risk tasks: documentation generation, test creation, or code exploration. As you build confidence and understand Claude Code’s strengths and limitations, gradually tackle more complex features. Remember that clear, context-rich prompts yield better results, and iteration is normal: treat interactions as conversations, not one-shot commands.&lt;/p&gt;

&lt;p&gt;Ready to get started? Initialize Claude Code in one of your projects and try your first simple task. Your future self will thank you for the time saved on repetitive work. If you have any questions or suggestions, please let me know in the comments and I’m happy to help. Also you can connect with me on Linkedin: &lt;a href="https://www.linkedin.com/in/anjith-paila-2074891a/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/anjith-paila-2074891a/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
