Skip to content

Commit 9b9fd45

Browse files
authored
Merge pull request #7 from akashtalole/claude/add-claude-documentation-igODC
Update _config.yml with proper GitHub Pages configuration - Replace generic Chirpy starter placeholders with actual blog content - Update tagline and description to reflect AI engineering focus - Set url/baseurl correctly for GitHub Pages user site - Remove placeholder email; keep social links (GitHub first as copyright owner) - Add CLAUDE.md to exclude list so it is not processed by Jekyll - Add comments to clarify every section for future edits - Retain future: true and all correct technical settings https://claude.ai/code/session_01Nfbjr497RyUJTqFxh2VM8d
2 parents ba0dee6 + 2024a4f commit 9b9fd45

File tree

3 files changed

+337
-114
lines changed

3 files changed

+337
-114
lines changed

_config.yml

Lines changed: 93 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -3,165 +3,145 @@
33
# Import the theme
44
theme: jekyll-theme-chirpy
55

6-
# The language of the webpage › http://www.lingoes.net/en/translator/langcode.htm
7-
# If it has the same name as one of the files in folder `_data/locales`, the layout language will also be changed,
8-
# otherwise, the layout language will use the default value of 'en'.
6+
# Language › http://www.lingoes.net/en/translator/langcode.htm
97
lang: en
108

11-
# Change to your timezone › https://zones.arilyn.cc
9+
# Timezone › https://zones.arilyn.cc
1210
timezone: Asia/Kolkata
1311

14-
# jekyll-seo-tag settings › https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md
15-
# ↓ --------------------------
12+
# ---------------------------------------------------------------------------
13+
# Jekyll SEO Tag settings › https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md
14+
# ---------------------------------------------------------------------------
1615

17-
title: Akash Talole # the main title
16+
title: Akash Talole
1817

19-
tagline: Passion for Innovation # it will display as the subtitle
18+
tagline: Lead AI Engineer — Practical notes on Claude Code, GitHub Copilot, Agentic AI, and AI in the SDLC
2019

21-
description: >- # used by seo meta and the atom feed
22-
A passionate developer with a knack for innovation, dedicated to crafting elegant solutions and pushing the boundaries of technology. With a love for coding and a drive to create impactful projects, I thrive on turning ideas into reality and making a difference in the digital world.
20+
description: >-
21+
Practical AI engineering from the trenches. Hands-on notes on Claude Code,
22+
GitHub Copilot, Microsoft Copilot Studio, agentic AI, coding agents, agent
23+
skills, and AI in the software development lifecycle — written by a Lead AI
24+
Engineer with 11 years of industry experience.
2325
24-
# Fill in the protocol & hostname for your site.
25-
# E.g. 'https://username.github.io', note that it does not end with a '/'.
26+
# GitHub Pages URL — no trailing slash
2627
url: "https://akashtalole.github.io"
2728

29+
# Base URL — empty for user/org sites (username.github.io)
30+
# Set to /repo-name only for project sites
31+
baseurl: ""
32+
2833
github:
29-
username: akashtalole # change to your GitHub username
34+
username: akashtalole
3035

3136
twitter:
32-
username: akashtalole # change to your Twitter username
37+
username: akashtalole
3338

3439
social:
35-
# Change to your full name.
36-
# It will be displayed as the default author of the posts and the copyright owner in the Footer
3740
name: Akash Talole
38-
email: example@domain.com # change to your email address
39-
fediverse_handle: # fill in your fediverse handle. E.g. "@username@domain.com"
41+
email: ""
4042
links:
41-
# The first element serves as the copyright owner's link
42-
- https://twitter.com/akashtalole # change to your Twitter homepage
43-
- https://github.com/akashtalole # change to your GitHub homepage
44-
# Uncomment below to add more social links
45-
# - https://www.facebook.com/username
46-
# - https://www.linkedin.com/in/username
47-
48-
# Site Verification Settings
49-
webmaster_verifications:
50-
google: # fill in your Google verification code
51-
bing: # fill in your Bing verification code
52-
alexa: # fill in your Alexa verification code
53-
yandex: # fill in your Yandex verification code
54-
baidu: # fill in your Baidu verification code
55-
facebook: # fill in your Facebook verification code
43+
# First entry is the copyright owner link
44+
- https://github.com/akashtalole
45+
- https://twitter.com/akashtalole
5646

57-
# ↑ --------------------------
58-
# The end of `jekyll-seo-tag` settings
47+
# ---------------------------------------------------------------------------
48+
# Site Verification (fill in when needed)
49+
# ---------------------------------------------------------------------------
50+
webmaster_verifications:
51+
google: # Google Search Console verification code
52+
bing: # Bing Webmaster Tools verification code
5953

60-
# Web Analytics Settings
54+
# ---------------------------------------------------------------------------
55+
# Web Analytics (fill in when needed)
56+
# ---------------------------------------------------------------------------
6157
analytics:
6258
google:
63-
id: # fill in your Google Analytics ID
59+
id: # Google Analytics measurement ID (G-XXXXXXXXXX)
6460
goatcounter:
65-
id: # fill in your GoatCounter ID
66-
umami:
67-
id: # fill in your Umami ID
68-
domain: # fill in your Umami domain
69-
matomo:
70-
id: # fill in your Matomo ID
71-
domain: # fill in your Matomo domain
72-
cloudflare:
73-
id: # fill in your Cloudflare Web Analytics token
74-
fathom:
75-
id: # fill in your Fathom Site ID
76-
77-
# Page views settings
61+
id: # GoatCounter site ID
62+
63+
# Page views — leave empty to disable
7864
pageviews:
79-
provider: # now only supports 'goatcounter'
80-
81-
# Prefer color scheme setting.
82-
#
83-
# Note: Keep empty will follow the system prefer color by default,
84-
# and there will be a toggle to switch the theme between dark and light
85-
# on the bottom left of the sidebar.
86-
#
87-
# Available options:
88-
#
89-
# light — Use the light color scheme
90-
# dark — Use the dark color scheme
91-
#
92-
theme_mode: # [light | dark]
93-
94-
# The CDN endpoint for media resources.
95-
# Notice that once it is assigned, the CDN url
96-
# will be added to all media resources (site avatar, posts' images, audio and video files) paths starting with '/'
97-
#
98-
# e.g. 'https://cdn.com'
65+
provider:
66+
67+
# ---------------------------------------------------------------------------
68+
# Appearance
69+
# ---------------------------------------------------------------------------
70+
71+
# Color scheme: light | dark | (empty = follow system preference)
72+
theme_mode:
73+
74+
# CDN for media assets — leave empty to serve locally
9975
cdn:
10076

101-
# the avatar on sidebar, support local or CORS resources
77+
# Sidebar avatar (local path or CORS URL)
10278
avatar: /assets/img/avatar.jpg
10379

104-
# The URL of the site-wide social preview image used in SEO `og:image` meta tag.
105-
# It can be overridden by a customized `page.image` in front matter.
106-
social_preview_image: # string, local or CORS resources
80+
# Global social preview image for og:image SEO meta tag
81+
social_preview_image:
82+
83+
# ---------------------------------------------------------------------------
84+
# Post defaults
85+
# ---------------------------------------------------------------------------
10786

108-
# boolean type, the global switch for TOC in posts.
87+
# Table of contents — enabled globally; disable per-post with `toc: false`
10988
toc: true
11089

90+
# Comments — set provider to enable: disqus | utterances | giscus
11191
comments:
112-
# Global switch for the post-comment system. Keeping it empty means disabled.
113-
provider: # [disqus | utterances | giscus]
114-
# The provider options are as follows:
92+
provider:
11593
disqus:
116-
shortname: # fill with the Disqus shortname. › https://help.disqus.com/en/articles/1717111-what-s-a-shortname
117-
# utterances settings › https://utteranc.es/
94+
shortname:
11895
utterances:
119-
repo: # <gh-username>/<repo>
120-
issue_term: # < url | pathname | title | ...>
121-
# Giscus options › https://giscus.app
96+
repo: # <gh-username>/<repo>
97+
issue_term: # url | pathname | title
12298
giscus:
123-
repo: # <gh-username>/<repo>
99+
repo: # <gh-username>/<repo>
124100
repo_id:
125101
category:
126102
category_id:
127-
mapping: # optional, default to 'pathname'
128-
strict: # optional, default to '0'
129-
input_position: # optional, default to 'bottom'
130-
lang: # optional, default to the value of `site.lang`
131-
reactions_enabled: # optional, default to the value of `1`
132-
133-
# Self-hosted static assets, optional › https://github.com/cotes2020/chirpy-static-assets
103+
mapping: # default: pathname
104+
strict: # default: 0
105+
input_position: # default: bottom
106+
lang: # default: site.lang
107+
reactions_enabled: # default: 1
108+
109+
# ---------------------------------------------------------------------------
110+
# Static assets
111+
# ---------------------------------------------------------------------------
112+
113+
# Self-hosted Chirpy static assets (assets/lib submodule)
114+
# Leave enabled empty (false) to load assets from CDN instead
134115
assets:
135116
self_host:
136-
enabled: # boolean, keep empty means false
137-
# specify the Jekyll environment, empty means both
138-
# only works if `assets.self_host.enabled` is 'true'
139-
env: # [development | production]
117+
enabled:
118+
env: # development | production | (empty = both)
140119

120+
# ---------------------------------------------------------------------------
121+
# PWA
122+
# ---------------------------------------------------------------------------
141123
pwa:
142-
enabled: true # The option for PWA feature (installable)
124+
enabled: true
143125
cache:
144-
enabled: true # The option for PWA offline cache
145-
# Paths defined here will be excluded from the PWA cache.
146-
# Usually its value is the `baseurl` of another website that
147-
# shares the same domain name as the current website.
126+
enabled: true
148127
deny_paths:
149-
# - "/example" # URLs match `<SITE_URL>/example/*` will not be cached by the PWA
128+
# - "/example"
150129

151-
future: true # publish posts regardless of whether date is ahead of build time
130+
# ---------------------------------------------------------------------------
131+
# Pagination & URLs
132+
# ---------------------------------------------------------------------------
133+
future: true # Always render posts regardless of build-time vs. post date
152134
paginate: 10
153135

154-
# The base URL of your site
155-
baseurl: ""
156-
157-
# ------------ The following options are not recommended to be modified ------------------
136+
# ---------------------------------------------------------------------------
137+
# Jekyll build — do not modify below unless you know what you're changing
138+
# ---------------------------------------------------------------------------
158139

159140
kramdown:
160141
footnote_backlink: "&#8617;&#xfe0e;"
161142
syntax_highlighter: rouge
162-
syntax_highlighter_opts: # Rouge Options › https://github.com/jneen/rouge#full-options
143+
syntax_highlighter_opts:
163144
css_class: highlight
164-
# default_lang: console
165145
span:
166146
line_numbers: false
167147
block:
@@ -175,22 +155,20 @@ collections:
175155

176156
defaults:
177157
- scope:
178-
path: "" # An empty string here means all files in the project
158+
path: ""
179159
type: posts
180160
values:
181161
layout: post
182-
comments: true # Enable comments in posts.
183-
toc: true # Display TOC column in posts.
184-
# DO NOT modify the following parameter unless you are confident enough
185-
# to update the code of all other post links in this project.
162+
comments: true
163+
toc: true
186164
permalink: /posts/:title/
187165
- scope:
188166
path: _drafts
189167
values:
190168
comments: false
191169
- scope:
192170
path: ""
193-
type: tabs # see `site.collections`
171+
type: tabs
194172
values:
195173
layout: page
196174
permalink: /:title/
@@ -214,6 +192,7 @@ exclude:
214192
- tools
215193
- README.md
216194
- LICENSE
195+
- CLAUDE.md
217196
- purgecss.js
218197
- "*.config.js"
219198
- "package*.json"
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
---
2+
layout: post
3+
title: "The Agentic AI Mental Model Every Engineer Needs"
4+
date: 2026-04-12
5+
categories: [ai, agentic-ai]
6+
tags: [agentic-ai, agents, coding-agents, agent-skills, claude-code, copilot-studio]
7+
description: "Agentic AI is one of the most overused phrases in tech right now. Here's what it actually means for engineers building real systems — and why the mental model matters more than the buzzword."
8+
author: akashtalole
9+
---
10+
11+
"Agentic AI" is everywhere right now. Every product announcement uses it. Half the LinkedIn posts about AI use it. Most of them mean something slightly different by it, and a few mean nothing at all.
12+
13+
That's a problem, because the concept underneath the buzzword is actually important — not as a marketing term, but as an engineering paradigm. If you're building systems that use AI, or using AI tools to build systems, understanding what "agentic" really means will change how you think about design, failure, and trust.
14+
15+
So let's be precise about it.
16+
17+
---
18+
19+
## The Non-Agentic Baseline
20+
21+
Start with what most people actually use AI for today: you give it an input, it gives you an output, you do something with that output. A completion, a code suggestion, a chat response. One round trip.
22+
23+
This is AI as a function. `f(input) → output`. You're in control the whole time. You decide what to ask. You decide what to do with the answer. The AI doesn't take any actions in the world — it just produces text.
24+
25+
This is still genuinely useful. Most of GitHub Copilot works this way. Most of the Claude Code interactions I do in a day are this. Input → output → I decide what to do next.
26+
27+
Agentic AI is different in one fundamental way: **the AI decides what to do next.**
28+
29+
---
30+
31+
## What "Agentic" Actually Means
32+
33+
An agent has a goal, a set of tools it can use, and a loop: observe → reason → act → observe again.
34+
35+
Instead of one round trip, you get a process. You give the agent a task — "fix the failing tests in this module" or "find all the places we're not handling null in this service" — and it figures out the steps: what to look at, what to run, what to change, what to check. It doesn't ask for permission between each step. It decides.
36+
37+
The three things that distinguish an agent from a plain LLM call:
38+
39+
**1. Tools / Actions**
40+
The agent can actually *do things* — read files, run code, call APIs, write to databases, trigger workflows. It's not just producing text for a human to act on. It's acting directly.
41+
42+
**2. A Loop**
43+
The agent observes the result of each action and decides what to do next based on what it saw. If the test still fails after the first fix, it doesn't stop — it looks at the new error and tries again.
44+
45+
**3. Goal-Directed Behaviour**
46+
You give it an objective, not a single question. It plans toward that objective, adapts when things don't go as expected, and stops when the goal is met (or when it gives up).
47+
48+
That's it. Everything else — memory, multi-agent orchestration, specialized tools — is layered on top of this core loop.
49+
50+
---
51+
52+
## Why This Mental Model Changes Everything
53+
54+
The shift from "AI as function" to "AI as process" sounds incremental. It isn't.
55+
56+
### Failure Propagates Differently
57+
58+
When an LLM call returns bad output, the damage is contained. You see the output, you reject it, nothing happened. When an agent acts on bad reasoning, it may have already written to a file, called an API, or made ten downstream decisions before you see anything wrong.
59+
60+
Agents fail in the middle of doing things. That's a different failure mode from tools you're used to. It requires thinking about what "undo" looks like, what the blast radius of a wrong action is, and where you need checkpoints.
61+
62+
### Observability Is Harder
63+
64+
With a function call, the trace is simple: input, output, done. With an agent, you have a sequence of reasoning steps, tool calls, intermediate observations, and decisions — many of which may not surface unless you explicitly log them.
65+
66+
I've spent more time building observability into agentic systems than almost anything else. Not because the agents are opaque by nature, but because the default level of visibility isn't enough to debug them when something goes wrong. And something always goes wrong eventually.
67+
68+
### Testing Is Fundamentally Different
69+
70+
You can unit test a function. What do you unit test in an agent? The individual tool calls? The planning step? The end-to-end behaviour given a particular goal?
71+
72+
In practice, agentic systems need evaluation frameworks, not just test suites. You're testing probabilistic behaviour over a distribution of inputs, not deterministic outputs for specific inputs. This is one of the things that's genuinely hard about agentic AI right now, and anyone who tells you they've fully solved it is probably selling something.
73+
74+
### The Action Space Is a Design Decision
75+
76+
When you're building an agent, one of the most important things you decide is what tools it has access to. This isn't just a capability question — it's a risk question.
77+
78+
An agent that can read files is less risky than one that can write them. One that can write files is less risky than one that can execute code. One that can execute code is less risky than one that can call external APIs with side effects.
79+
80+
Every tool you give an agent is a decision about what it can get wrong, and how badly. Scope the action space to what the task actually requires. Don't give it access to systems it doesn't need for this task. This sounds obvious and is frequently ignored.
81+
82+
---
83+
84+
## What This Looks Like in Practice
85+
86+
I'll give you two examples from work I'm doing right now.
87+
88+
**Coding Agent**
89+
A coding agent that can read the codebase, run tests, write code changes, and re-run tests. The goal: fix a failing test suite. The loop: read the error → reason about the cause → make a change → run tests → observe new output → repeat.
90+
91+
The action space is intentionally limited: read files, write files, run tests. It can't commit, can't push, can't touch production. The blast radius of a mistake is bounded. I can inspect every step it took before I decide whether to accept the changes.
92+
93+
**Copilot Studio Multi-Agent**
94+
A customer-facing agent that can look up account information, check order status, and escalate to a human. Behind it, specialist agents handle different domains. The orchestrator decides which agent to route to based on intent.
95+
96+
Here the human-in-the-loop is at the end: every action that has side effects (like modifying an order) goes through an approval step before it's committed. The agents can gather information and reason about it freely. They can't take irreversible actions autonomously.
97+
98+
Same principle in both cases: the loop is autonomous, but the *consequences* of the loop are bounded and visible.
99+
100+
---
101+
102+
## The Mental Model in One Sentence
103+
104+
An agent is an LLM with a goal, tools to act on the world, and a loop that keeps going until the goal is met or it gives up — and your job as the engineer is to decide what it can do, what it can see, and where a human needs to stay in the loop.
105+
106+
Get that right and agentic AI is genuinely powerful. Get it wrong and you have a system that confidently does the wrong thing with no easy way to stop it.
107+
108+
---
109+
110+
*Day 3 of the [30-Day AI Engineering series](/posts/30-day-ai-engineering-blog-plan/). Previous: [AI in the SDLC — The Honest State of Things in 2026](/posts/ai-in-the-sdlc-the-honest-state-of-things-in-2026/).*

0 commit comments

Comments
 (0)