<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog of Anant Shrivastava</title>
	<atom:link href="https://blog.anantshri.info/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.anantshri.info</link>
	<description>My journey into the world of Technology</description>
	<lastBuildDate>Sun, 12 Apr 2026 00:11:17 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blog.anantshri.info/wp-content/uploads/2023/03/cropped-logo-copy-32x32.png</url>
	<title>Blog of Anant Shrivastava</title>
	<link>https://blog.anantshri.info</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://blog.anantshri.info/feed/"/>
<site xmlns="com-wordpress:feed-additions:1">217374223</site>	<item>
		<title>Security panels are not broken. We just keep using them badly.</title>
		<link>https://blog.anantshri.info/security-panels/</link>
					<comments>https://blog.anantshri.info/security-panels/#respond</comments>
		
		<dc:creator><![CDATA[anantshri]]></dc:creator>
		<pubDate>Sun, 12 Apr 2026 04:30:00 +0000</pubDate>
				<category><![CDATA[Thoughts]]></category>
		<guid isPermaLink="false">https://blog.anantshri.info/?p=3929</guid>

					<description><![CDATA[A practical field guide to making conference panels useful by setting clearer expectations for organizers, moderators, and panelists alike everywhere.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I have been on both sides of conference panels, as a panelist and as a moderator, and I am tired of how much nonsense we tolerate around them.</p>



<p class="wp-block-paragraph">Panels themselves are useful. The way we keep running them often is not.</p>



<p class="wp-block-paragraph">They get sold as discussion, insight, community wisdom, and multiple viewpoints. Then you sit there for forty five minutes and get a reputation display with microphones. Everyone looks serious, everyone says familiar things, one or two mildly spicy lines get remembered, and the audience goes home with very little they can use once the conference badge comes off.</p>



<p class="wp-block-paragraph">That is the part that bothers me.</p>



<p class="wp-block-paragraph">This is not meant to be a rant about why panels are bad. I am writing this because good panels are genuinely useful and security conferences do not get enough of them. I also want this to be something organizers can send to moderators and panelists before the session, so expectations are set properly before everybody lands on stage and hopes the format will somehow rescue weak preparation.</p>



<p class="wp-block-paragraph">It is also not me standing outside the mess and handing out wisdom to others. Think of it more as a cheat sheet built over years of being a panelist, moderator, and at times helping shape the session itself. Some of it comes from panels that went well. Some of it comes from sessions that were average, messy, or a complete waste of everybody&#8217;s time. That mix is exactly why I trust these points more than neat theory.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">A panel does not exist to put multiple important people on one stage.<br>It exists to help the audience understand a topic better.</p>
</blockquote>



<p class="wp-block-paragraph">That is the standard.</p>



<p class="wp-block-paragraph">If the audience leaves with a clearer way to think, a better decision process, a sharper question to ask at work, or even one tradeoff they had not considered before, the panel did its job.</p>



<p class="wp-block-paragraph">If the audience leaves with nothing more than “that sounded important,” then it did not.</p>



<p class="wp-block-paragraph">There is also a distinction I wish more conferences took seriously.</p>



<p class="wp-block-paragraph">A panel can create spectacle. A panel can create understanding. Sometimes those overlap, though they are not the same outcome. Gossip-worthy and learning-worthy are very different things.</p>



<p class="wp-block-paragraph">I am not against disagreement. Good disagreement is one of the main reasons panels work at all. It brings out detail, tradeoffs, incentives, and thought process. Manufactured heat gives you clips and corridor gossip and very little else.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The goal is not to script harmony. The goal is to avoid avoidable stupidity.</p>
</blockquote>



<h2 class="wp-block-heading">What a panel owes the audience</h2>



<p class="wp-block-paragraph">A panel owes the audience more than opinion.</p>



<p class="wp-block-paragraph">This sounds obvious, though many conference panels are built as if the audience paid to watch senior people freestyle in public.</p>



<p class="wp-block-paragraph">People come to a panel because they expect the format to do something a solo talk cannot do as well. They want contrast. They want multiple lived realities in one place. They want to understand why a pentester, a CISO, a founder, an engineer, and a regulator can all look at the same problem and still not land in the same place.</p>



<p class="wp-block-paragraph">A good panel should give them at least one of these:</p>



<ul class="wp-block-list">
<li>a framework they can reuse</li>



<li>a process they can steal</li>



<li>a tradeoff they had not seen properly before</li>



<li>a better vocabulary for the problem</li>



<li>a mistake they can avoid without having to suffer for it personally</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">If none of that happened, then maybe the panel was energetic, maybe it was fashionable, maybe the photos looked good, though it was not useful.</p>



<h2 class="wp-block-heading">Organizers</h2>



<p class="wp-block-paragraph">Panels usually fail before they start, and a lot of that sits with organizers.</p>



<p class="wp-block-paragraph">Organizers decide whether the topic even deserves a panel. They decide who gets invited, who moderates, what the expected direction is, and whether the whole thing still has enough substance left after everyone adds their boundaries and restrictions.</p>



<p class="wp-block-paragraph">A lot of conference pain starts the same way. The conference has a broad topic, a few known names, one empty slot in the schedule, and somebody says, “let’s make it a panel.” That is how you end up with five people on stage who broadly agree, speak in safe abstractions, and walk away thinking it went fine.</p>



<p class="wp-block-paragraph">It probably did go fine. Fine is not the standard. Useful is the standard.</p>



<h3 class="wp-block-heading">Before inviting panelists</h3>



<ul class="wp-block-list">
<li>Decide whether the topic truly suits a panel. Some topics need multiple viewpoints. Some need one good speaker. Some need a debate. Some need a workshop.</li>



<li>Define what the audience should leave with. A short alignment call about a week before the session helps everyone lock on to the intended takeaway and cuts down the usual drift.</li>



<li>Identify what kinds of perspectives are actually needed. Role matters. Incentive matters. Lived experience matters. Job title alone is weak material.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">Before finalizing the panel</h3>



<ul class="wp-block-list">
<li>Choose for viewpoint range, not just fame, seniority, or recognisable names.</li>



<li>Pick the right panelists. A panel full of interchangeable bios gives repeated answers with different company logos.</li>



<li>Pick a moderator who is respected by the panelists. This role may need to interrupt, paraphrase, redirect, and occasionally save the session from collapse.</li>



<li>Identify likely overlap, likely friction, and likely silence. All three matter.</li>



<li>Avoid a yes-panel. If everyone thinks roughly the same way, the room goes flat very quickly.</li>



<li>Avoid a manel. By 2026, an all-male panel usually says more about lazy curation than lack of available expertise, and the audience gets a narrower discussion because of it.</li>



<li>If a panel seat is tied to sponsorship, ensure the person selected is still a practitioner who meets the same utility standard as every other panelist. That serves the audience better and usually reflects better on the sponsor too.</li>



<li>Collect boundaries early. No company internals, no naming customers, no politics, no legal landmines, no customer support disguised as a question. Fine. Get that out early.</li>



<li>Assess whether those limitations weaken the panel too much. If most of the useful part of the topic is off limits, then maybe the panel should not happen.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">Before the event</h3>



<ul class="wp-block-list">
<li>Align moderator and panelists on scope.</li>



<li>Share the intended audience level.</li>



<li>Make clear what success looks like for the session.</li>



<li>Prefer useful disagreement over staged controversy.</li>



<li>Ensure everyone knows the panel exists to serve the audience, not sponsor optics, ego, or conference vanity.</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Organizers are also responsible for something very basic and very overlooked.</p>



<p class="wp-block-paragraph">Pick someone as moderator who the panelists will actually respect.</p>



<p class="wp-block-paragraph">A moderator sometimes has to stop someone, cut through rambling, summarise what was said, or push a lazy answer into a useful one. That only works if the room accepts that person has the standing to do it.</p>



<h2 class="wp-block-heading">Moderators</h2>



<p class="wp-block-paragraph">This is the role people underestimate the most.</p>



<p class="wp-block-paragraph">A lot of conferences treat moderators like event furniture. Someone who introduces people, reads questions, smiles at the audience, and says “great point” every few minutes.</p>



<p class="wp-block-paragraph">That is not moderation. Moderation is extraction.</p>



<p class="wp-block-paragraph">The moderator is responsible for getting signal out of the room.</p>



<p class="wp-block-paragraph">When I moderate, I usually do a quick background search on the panelists first. I do not mean some deep dossier. I just want to know who is on stage, what they are known for, what incentives they operate under, and how the room is likely to behave.</p>



<p class="wp-block-paragraph">Are these people complementary? Are they likely to support each other? Are they naturally adversarial? Are they going to politely agree for forty minutes because nobody wants to poke the wrong thing?</p>



<p class="wp-block-paragraph">A CISO and a pentester are not just different titles. They may be solving for completely different outcomes. An employee and an entrepreneur may sound aligned on the surface while carrying very different biases underneath. That is useful material if the moderator sees it and useless noise if they do not.</p>



<p class="wp-block-paragraph">Then I prepare guiding questions.</p>



<p class="wp-block-paragraph">Not a rigid script. Guiding questions.</p>



<p class="wp-block-paragraph">Their job is to keep the panel on course and help bring out contrast where contrast is useful.</p>



<p class="wp-block-paragraph">The first question matters a lot more than people think. The answer to it often sets the tone for the rest of the panel. Once the first person answers, everyone else starts tuning their own response based on what has already been said, how safe or sharp the room feels, and whether the discussion is going to reward specifics or generic wisdom.</p>



<p class="wp-block-paragraph">That is why the first answer can define the whole flow.</p>



<p class="wp-block-paragraph">I also like making one thing explicit at the start. I am moderating, and I come with two authorities.</p>



<p class="wp-block-paragraph">First, I will stop you if you ramble. Second, I will ask questions in the spirit of what we discussed earlier even if the exact wording changes on stage.</p>



<p class="wp-block-paragraph">That is not rudeness. That is hygiene.</p>



<h3 class="wp-block-heading">What moderators should actually do</h3>



<p class="wp-block-paragraph">Before the panel:</p>



<ul class="wp-block-list">
<li>review panelists, likely perspectives, and likely constraints</li>



<li>understand where they complement each other and where they may clash</li>



<li>prepare guiding questions and likely follow ups</li>



<li>decide what the audience should leave with</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">At the start:</p>



<ul class="wp-block-list">
<li>state your role clearly</li>



<li>set expectations on time, rambling, and direction</li>



<li>make it clear that wording may change while the spirit stays intact</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">During the panel:</p>



<ul class="wp-block-list">
<li>keep the conversation on course</li>



<li>turn broad opinions into examples, tradeoffs, or decisions</li>



<li>stop rambling when needed</li>



<li>rebalance airtime when one person starts treating the panel like a solo talk</li>



<li>listen for the real tension in the room and pull it forward</li>



<li>protect the audience from jargon fog, vague abstractions, and self promotional drift</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">There is one more thing moderators should do regularly and most do not.</p>



<p class="wp-block-paragraph"><strong>Paraphrase.</strong></p>



<p class="wp-block-paragraph">Periodically, the moderator should summarise what has just been said so the audience gets the gist of the discussion. Sometimes that is after a long answer. Sometimes after each speaker. Sometimes after the whole question has gone around the room.</p>



<p class="wp-block-paragraph">This matters because useful points often come out scattered. One panelist gives the constraint, another gives an example, the third gives the tradeoff, and unless somebody ties it together the audience has to do all the assembly work themselves.</p>



<p class="wp-block-paragraph">A good moderator should be able to say, “What I am hearing is this,” and then hand the room a cleaner version of its own thinking.</p>



<p class="wp-block-paragraph">That does not just help the audience. It also helps the next speaker respond with more precision.</p>



<p class="wp-block-paragraph">The moderator is not just a traffic controller. The moderator is the audience’s proxy and sometimes their translator.</p>



<h2 class="wp-block-heading">Panelists</h2>



<p class="wp-block-paragraph">Panelists have an easier job than moderators in some ways, though they still manage to mess it up quite creatively.</p>



<p class="wp-block-paragraph">As a panelist, I usually do a bit of recon on the other people on stage. I come in with a clear and fairly well-researched view, though I still look for the connective tissue between what I want to say and what the others on stage bring. Knowing what is there to respect in the other person helps a lot.</p>



<p class="wp-block-paragraph">It tells me where they have depth. It tells me where I should defer. It tells me where I can bring their expertise into the conversation rather than pretending I need to own every inch of the stage.</p>



<p class="wp-block-paragraph">That matters.</p>



<p class="wp-block-paragraph">A specific compliment, a deliberate pointer to another panelist’s strength, or even a simple “this part is more in your lane than mine” can make the whole panel function better. It turns the room into a conversation instead of a line of people waiting for their turn to speak.</p>



<p class="wp-block-paragraph">Sometimes it is useful to take a slightly opposing stand even when you and the other person are not actually that far apart. I do not mean fake opposition. I mean useful opposition, enough to bring out the detail that would otherwise stay buried under polite agreement.</p>



<p class="wp-block-paragraph">Sometimes you agree. Sometimes you sharpen. Sometimes you pull the other side into the room because the audience needs to hear the tradeoff more clearly.</p>



<p class="wp-block-paragraph">That is fine.</p>



<p class="wp-block-paragraph">Disagreement for theatre is not.</p>



<p class="wp-block-paragraph">A panelist has a responsibility to the audience to leave them with something useful. A thought process. A decision model. A caution. A lesson learned the hard way. A practical way of seeing the problem.</p>



<p class="wp-block-paragraph">Being experienced may explain why you got invited. It does not automatically make you useful on stage.</p>



<p class="wp-block-paragraph">Doing the work and unpacking the work are two different skills. Panels expose that difference in public, and not always gently.</p>



<h3 class="wp-block-heading">What panelists should do</h3>



<p class="wp-block-paragraph">Before the panel:</p>



<ul class="wp-block-list">
<li>review the moderator, topic, and other panelists</li>



<li>understand where your view overlaps and where it differs</li>



<li>declare your boundaries early</li>



<li>decide what useful value you want to leave with the audience</li>
</ul>



<p class="wp-block-paragraph">During the panel:</p>



<ul class="wp-block-list">
<li>listen to what was said before answering</li>



<li>adjust your response to the room instead of repeating a prepared paragraph</li>



<li>acknowledge other panelists where their expertise adds value</li>



<li>disagree when it improves clarity</li>



<li>avoid disagreement that exists only for performance</li>



<li>share examples, processes, tradeoffs, and lessons, not just broad principles</li>
</ul>



<p class="wp-block-paragraph">For the audience:</p>



<ul class="wp-block-list">
<li>leave them with something they can use</li>



<li>add insight, not just opinion</li>



<li>remember that your responsibility is to the room, not just your employer, your personal brand, or your comfort</li>
</ul>



<p class="wp-block-paragraph">Respect does not make a panel soft. Usually it makes it sharper.</p>



<h2 class="wp-block-heading">Two other formats worth using properly</h2>



<p class="wp-block-paragraph">Not every discussion session has to be a standard panel.</p>



<p class="wp-block-paragraph">Sometimes the conference wants interactivity more than polished viewpoints. Sometimes the topic benefits from open contribution more than curated stage authority. In those cases, two other formats are worth calling out because they often get used casually without enough thought behind them.</p>



<h3 class="wp-block-heading">AMA, Ask Me Anything</h3>



<p class="wp-block-paragraph">An AMA works when the point is access.</p>



<p class="wp-block-paragraph">Here, the value is not that the panelists debate each other in a structured way. The value is that the audience gets direct access to people with deep experience and can ask what they actually care about. In that sense, the panelists are there more as subject matter anchors than as a set of people expected to carry a flowing discussion among themselves.</p>



<p class="wp-block-paragraph">That changes the expectation.</p>



<p class="wp-block-paragraph">For an AMA, the organizer and moderator should optimize for openness, range of questions, and enough structure that the session does not collapse into chaos or become a customer support desk. The panelists still need to be useful, though the real engine of the session is the audience.</p>



<p class="wp-block-paragraph">A good AMA needs:</p>



<ul class="wp-block-list">
<li>panelists who are genuinely open to questions</li>



<li>a moderator who can cluster similar questions and keep the pace moving</li>



<li>enough boundaries declared early so the audience knows what is fair game</li>



<li>enough honesty to say “I do not know” when that is the real answer</li>
</ul>



<p class="wp-block-paragraph">If an AMA is too tightly controlled, it stops being an AMA. If it is too loose, one person hijacks the room and everyone else pays for it.</p>



<h3 class="wp-block-heading">Birds of a Feather, BoF</h3>



<p class="wp-block-paragraph">A BoF is even more different.</p>



<p class="wp-block-paragraph">This is not really a panel in the classic sense. There may be a few practitioners up front, though they are not the only voices that matter. The point of a BoF is that the room itself is part of the discussion. Questions can come from anywhere. Answers can come from anywhere. The person on stage is not always the person with the best answer, and that is perfectly fine.</p>



<p class="wp-block-paragraph">In a BoF, the moderator carries a different kind of burden. They are not just steering a set of panelists. They are holding the room together. They need to cut people down when they ramble, keep the discussion moving, bring quieter voices in when needed, and make sure one loud participant does not turn the session into a hostage situation.</p>



<p class="wp-block-paragraph">A good BoF accepts that expertise is distributed across the room.</p>



<p class="wp-block-paragraph">That is also why the physical setup matters. A raised stage sends the wrong signal. BoFs usually work better in smaller rooms, with everyone at roughly the same sitting level and without a theatrical separation between “the experts” and “the audience.” The format works best when the room feels like collective discussion, not a downgraded panel with extra interruptions.</p>



<p class="wp-block-paragraph">A good BoF needs:</p>



<ul class="wp-block-list">
<li>a smaller room where discussion feels manageable</li>



<li>seating that signals equality, not hierarchy</li>



<li>a moderator who is comfortable controlling flow without controlling content</li>



<li>participants willing to contribute constructively rather than perform expertise</li>



<li>enough shared respect that disagreement does not become noise</li>
</ul>



<p class="wp-block-paragraph">BoFs can be excellent when the topic benefits from community experience rather than fixed stage authority. They can also become messy very quickly if the moderator is weak or the room is too big.</p>



<p class="wp-block-paragraph">The reason I want to mention both AMA and BoF here is simple. Some conferences force everything into the panel format because it is familiar. That is a mistake. Sometimes what you actually want is audience access. Sometimes what you actually want is community discussion. Picking the right format is half the work.</p>



<h2 class="wp-block-heading">When a panel should probably not happen</h2>



<p class="wp-block-paragraph">Not every topic deserves a panel just because the conference website has spare space.</p>



<p class="wp-block-paragraph">Sometimes the best thing an organizer can do is admit the format is wrong.</p>



<p class="wp-block-paragraph">A panel probably should not happen when:</p>



<ul class="wp-block-list">
<li>the topic is better explained by one strong speaker</li>



<li>the panelists are too constrained to say anything meaningful</li>



<li>everyone on stage broadly agrees and brings little variation in viewpoint</li>



<li>the moderator lacks enough subject fluency to steer the room</li>



<li>the only real purpose is to showcase names, sponsors, or optics</li>



<li>the topic is so broad that forty five minutes can only produce slogans</li>
</ul>



<p class="wp-block-paragraph">Choosing the wrong format is forgivable. Pretending the audience got value anyway is where the nonsense starts.</p>



<h2 class="wp-block-heading">The minimum standard</h2>



<p class="wp-block-paragraph">A good panel does not need fake fireworks. It does not need forced confrontation. It does not need someone trying to manufacture a viral clip from a conference chair.</p>



<p class="wp-block-paragraph">It needs an organizer who has thought about why the panel should exist. It needs a moderator willing to maintain direction and extract clarity. It needs panelists who understand that stage time is a responsibility, not a medal.</p>



<p class="wp-block-paragraph">If those three things are present, a panel can be one of the most useful sessions at a conference.</p>



<p class="wp-block-paragraph">If they are not, then what you usually get is a live reminder that many people can hold a microphone without actually holding a thought.</p>



<p class="wp-block-paragraph">I say all this with some affection for the format and enough self-awareness to admit I have probably been part of a few average panels too. That is partly why I care. Panels are not hard because the format is cursed. They are hard because they require preparation, articulation, listening, restraint, and just enough ego control from multiple people at the same time.</p>



<p class="wp-block-paragraph">That, apparently, is a very premium ask in our industry.</p>



<p class="wp-block-paragraph">Still, when they work, they are worth it.</p>



<p class="wp-block-paragraph">And when they do not, at least the conference photographer gets a nice collection of serious faces for next year’s brochure.</p>



<p class="wp-block-paragraph">Credit where due, <a href="https://www.linkedin.com/in/avkash-kathiriya/">Avkash Kathiriya</a> helped sharpen parts of this piece. The views are mine, though their input improved the framing in a few places.</p>



<h2 class="wp-block-heading">Quick reference checklist</h2>



<h3 class="wp-block-heading">For organizers</h3>



<p class="wp-block-paragraph">Before inviting panelists:</p>



<ul class="wp-block-list">
<li>decide whether the topic truly suits a panel</li>



<li>define what the audience should leave with</li>



<li>identify what kinds of perspectives are actually needed</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Before finalizing the panel:</p>



<ul class="wp-block-list">
<li>choose for viewpoint range, not just title or fame</li>



<li>pick a moderator respected enough to interrupt and steer</li>



<li>identify likely overlap, friction, and silence</li>



<li>avoid a yes-panel</li>



<li>avoid a manel</li>



<li>do not hand out panel seats as sponsor rewards</li>



<li>collect boundaries and limitations early</li>



<li>assess whether those limitations weaken the panel too much</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Before the event:</p>



<ul class="wp-block-list">
<li>align moderator and panelists on scope</li>



<li>share the intended direction and audience level</li>



<li>make clear what success looks like for the session</li>



<li>prefer useful disagreement over staged controversy</li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">For moderators</h3>



<p class="wp-block-paragraph">Before the panel:</p>



<ul class="wp-block-list">
<li>review panelists and their likely constraints</li>



<li>understand where they complement or conflict</li>



<li>prepare guiding questions and likely follow ups</li>



<li>decide what the audience should leave with</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">At the start:</p>



<ul class="wp-block-list">
<li>state your role clearly</li>



<li>set expectations on time, rambling, and direction</li>



<li>establish that you may rephrase questions to keep the discussion useful</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">During the panel:</p>



<ul class="wp-block-list">
<li>track who is dominating, who is underused, and where the real tension lies</li>



<li>summarise when answers become long or unclear</li>



<li>paraphrase periodically so the audience gets the gist</li>



<li>turn broad opinions into specific tradeoffs or examples</li>



<li>keep the discussion aligned to audience value, not stage comfort</li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">For panelists</h3>



<p class="wp-block-paragraph">Before the panel:</p>



<ul class="wp-block-list">
<li>review the topic, moderator, and other panelists</li>



<li>understand where your perspective overlaps or differs</li>



<li>declare any boundaries early</li>



<li>decide what useful value you want to leave with the audience</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">During the panel:</p>



<ul class="wp-block-list">
<li>listen to what was said before answering</li>



<li>adjust your answer to the room instead of repeating prepared lines</li>



<li>acknowledge other panelists where their expertise adds value</li>



<li>disagree when it improves clarity</li>



<li>avoid disagreement that exists only for performance</li>



<li>share examples, processes, tradeoffs, and lessons</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">For the audience:</p>



<ul class="wp-block-list">
<li>leave them with something they can use</li>



<li>add insight, not just opinion</li>



<li>remember that the room matters more than your stage image</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.anantshri.info/security-panels/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3929</post-id>	</item>
		<item>
		<title>AI Should Help Design Its Own Exit</title>
		<link>https://blog.anantshri.info/ai-should-help-design-its-own-exit/</link>
					<comments>https://blog.anantshri.info/ai-should-help-design-its-own-exit/#comments</comments>
		
		<dc:creator><![CDATA[anantshri]]></dc:creator>
		<pubDate>Thu, 19 Mar 2026 20:48:15 +0000</pubDate>
				<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://blog.anantshri.info/?p=3863</guid>

					<description><![CDATA[AI should help us move from messy exploration to owned structure. Use models to find patterns, then encode what works, reduce dependence, and keep guesswork only where the world genuinely stays fuzzy.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In the IT and IT security world, we are living through the dream, or at least the sales pitch, of an AI-first world. Everywhere you look, the whole world is being pushed toward using AI, directly or indirectly, intentionally or unintentionally, by choice or by pressure. I am not outside this wave either. I have <a href="https://blog.anantshri.info/tag/ai/" data-type="post_tag" data-id="47">my own thoughts around it</a>, and this article is one more entry in that line of thinking.</p>



<p class="wp-block-paragraph">What has become clearer to me over time is that the question of whether AI is useful has been declared settled. Not because everyone arrived at the same conclusion, but because enough capital has been deployed that the direction is being pushed across the industry. Mandatory bundling is becoming the norm, and opting out is slowly turning into the harder choice. As I have said time and again, <a href="https://blog.anantshri.info/not-every-nail-needs-a-non-deterministic-hammer/" data-type="post" data-id="3598">AI systems are nondeterministic systems</a> so now the more useful question is what kind of work should stay fuzzy, what kind of work should harden into structure, and what this shift is going to do to the people building and operating these systems.</p>



<h2 class="wp-block-heading">The Engineer</h2>



<p class="wp-block-paragraph">For a long time, software hired as if every layer of work needed a full engineer. In most traditional industries, that is not how labor is distributed. You have a smaller number of people who design, reason, and make trade-offs. Then you have a much larger base doing repeatable execution, assembly, operation, inspection, and support.</p>



<p class="wp-block-paragraph">In computing, we ended up stuffing an unusually large range of work under the word engineer.</p>



<p class="wp-block-paragraph">Some of that was real complexity.<br>Some of that was title inflation.<br>Some of that was the simple fact that software kept printing money for long enough that we could afford to be imprecise.</p>



<p class="wp-block-paragraph">With AI, a lot of the work now being squeezed is not the part that requires deep engineering judgment. It is the repeatable production layer. The layer that can take instructions, generate drafts, translate between formats, fill gaps, produce boilerplate, and keep the machine moving. It is fluid enough to appear fuzzy, yet patterned enough to be reproduced by a stochastic parrot.</p>



<p class="wp-block-paragraph">That does not mean engineering disappears. The people who understand constraints, trade-offs, system boundaries, failure modes, long-term ownership, and more importantly what should be automated versus what should remain under direct control become even more important.</p>



<p class="wp-block-paragraph">The worker-grade layer gets compressed. The actual engineer becomes more visible. That is uncomfortable for an industry that has spent years pretending those two things were always the same.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">AI can replace a lot of motion. It does not replace the person who knows which motion matters.</p>
</blockquote>



<p class="wp-block-paragraph">To be clear, I do not mean this as a sneer at execution work. Every industry needs execution. Every functioning system rests on it. My point is about structure. We hired as though the entire software pipeline needed expensive generalists at every step. AI is now exposing how much of that pipeline was repetitive production work wrapped in engineer-shaped titles.</p>



<p class="wp-block-paragraph">That may be good for efficiency.<br>It may be terrible for ego.<br>Those two outcomes often travel together.</p>



<h2 class="wp-block-heading">LLMs Should Help Design Their Own Exit</h2>



<p class="wp-block-paragraph">This also changes how I think about LLM-native systems.</p>



<p class="wp-block-paragraph">If you take <a href="https://en.wikipedia.org/wiki/Theory_of_constraints" data-type="link" data-id="https://en.wikipedia.org/wiki/Theory_of_constraints">theory of constraints</a> seriously, LLMs themselves are often a major constraint. They are expensive, externally controlled, non-deterministic, rate-limited, policy-bound, and subject to changes in price, performance, and availability that you do not control. That leaves them as obvious bottlenecks.</p>



<p class="wp-block-paragraph">Which means a well-designed LLM-based system should not aim to make itself permanently dependent on LLMs.</p>



<p class="wp-block-paragraph">It should aim to reduce that dependency over time.</p>



<p class="wp-block-paragraph">Use the model to explore. Use the model to classify messy inputs. Use the model to suggest structure where structure does not yet exist. But once the workflow stabilizes, the system should start extracting patterns, encoding logic, narrowing prompts, introducing deterministic checks, and shrinking the amount of fresh reasoning it needs on every pass.</p>



<p class="wp-block-paragraph">In other words, a good LLM system should help design its own partial exit.</p>



<p class="wp-block-paragraph">That sounds less glamorous than endless agent loops and autonomous everything. It also sounds more like engineering.</p>



<p class="wp-block-paragraph">The goal should not be to keep the LLM at the center forever just because it can be. The goal should be to keep it only where uncertainty genuinely remains.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">If an LLM sits forever at the center of a stable workflow, either the workflow is not stable, or we have been lazy about encoding what we learned.</p>
</blockquote>



<p class="wp-block-paragraph">Now, I should concede the obvious counterpoint. Some domains stay fuzzy for a long time. Research, discovery, language-heavy interfaces, messy support contexts, broad synthesis tasks, exploratory analysis over ugly inputs, these may keep benefiting from a probabilistic layer at their core. That is fine. The world contains genuinely messy problems.</p>



<p class="wp-block-paragraph">The mistake is assuming all problems deserve to stay messy just because the model makes messy look productive.</p>



<p class="wp-block-paragraph">There is also a strange shift happening in how we treat reproducibility. In most parts of engineering, reproducibility was the goal. We built shared libraries, open source modules, and common abstractions so that once something worked, it could be relied on and reused without rethinking it every time.</p>



<p class="wp-block-paragraph">With LLMs, we are drifting toward accepting non-reproducibility as a feature. Outputs vary. Behavior shifts. Prompts evolve. We sometimes even celebrate this variability as creativity, as if unpredictability is inherently valuable in places where consistency used to matter.</p>



<p class="wp-block-paragraph">That is a step back for large parts of engineering.</p>



<p class="wp-block-paragraph">Reproducibility is what allowed systems to scale. It is what allowed teams to collaborate without constantly second-guessing outcomes. Moving away from that without a clear boundary risks turning engineering problems into artistic ones, where results are appreciated but not guaranteed.</p>



<p class="wp-block-paragraph">There are places where that is fine. Exploration, ideation, early drafts. But once something works, the expectation should still be the same as before. Capture it. Stabilize it. Make it repeatable.</p>



<p class="wp-block-paragraph">Otherwise, we are reintroducing uncertainty into places where we had already learned how to remove it.</p>



<h2 class="wp-block-heading">Artificial Scarcity, Real Capacity</h2>



<p class="wp-block-paragraph">Another thing I find odd in these conversations is how quickly people slip into zero-sum thinking.</p>



<p class="wp-block-paragraph">As if reducing LLM usage in one workflow somehow means betraying the future.<br>As if every token not spent is a missed opportunity.<br>As if the only way to justify AI is to trap ourselves into permanent dependence on it.</p>



<p class="wp-block-paragraph">Part of this mindset has been deliberately shaped by the LLM kingpins themselves. They do not just cap usage. They cap it by hour, by window, by quota, by visible counters that keep reminding you what you have consumed and what remains. In the name of capacity management, they create a kind of artificial scarcity that trains users into a very specific reflex: if I do not use this now, I am wasting it. The meter itself becomes part of the product psychology.</p>



<p class="wp-block-paragraph">That is a clever business move. It also nudges people toward unhealthy ways of thinking about systems.</p>



<p class="wp-block-paragraph">If I can phase out LLM dependency from one system faster, I do not become anti-AI. I become free to build more systems. </p>



<p class="wp-block-paragraph">More importantly, I become free to push that capacity toward problems outside our own little software bubble. IT is, at its core, a support industry. The work we do is supposed to help the rest of the world function better, not just help us build more elaborate mirrors of ourselves. The real world outside tech is still messy, slow, understaffed, overloaded, and full of systems that could genuinely benefit from better tooling. If we stop obsessing over petty quotas and platform counters, the capabilities we have now could speed up work in many of those places. IT does not stand alone. It depends on electricity, logistics, manufacturing, governance, and a hundred other systems that existed before it and can still function without it, however slowly. IT multiplies capability. It does not create reality from scratch. That includes AI. Without these systems, work may slow down, but it still continues. We would do well to get off our high horse and remember that the point of better tools is to help other systems move better, not to trap ourselves inside our own fantasy of importance.</p>



<p class="wp-block-paragraph">Remember, the total usage of LLMs at an organization level may still rise. Very likely, it will. But that does not mean every individual workflow must remain hostage to a model forever. We are not holding hostages here. We are augmenting people, compressing ambiguity, and then hopefully learning enough to reduce the amount of ambiguity that needs to be paid for next time.</p>



<p class="wp-block-paragraph">What follows is a better distribution of capability.</p>



<p class="wp-block-paragraph">This is why I do not buy the doom framing that every bit of deterministic replacement somehow kills value. When a workflow matures past the need for heavy inference, graduating it into a more stable form is a sign of success.</p>



<p class="wp-block-paragraph">If we save model usage here, we can spend it there.<br>If we encode knowledge here, we can explore more over there.<br>If we stop renting repeated thought in one part of the system, we can afford more first-draft thinking elsewhere.</p>



<p class="wp-block-paragraph">That is how healthy capacity expansion works.</p>



<h2 class="wp-block-heading">Cycles, Control, and Ownership</h2>



<p class="wp-block-paragraph">This also keeps bringing me back to <a href="https://blog.anantshri.info/flip-cycles-of-computing/">cycles of computing</a>. We keep oscillating between convenience and control, centralization and local capability, managed comfort and self-inflicted responsibility. LLM APIs sit very firmly on the convenience side of that cycle. They are useful. They are impressive. They are also expensive, externally governed, behaviorally fluid, and very much subject to someone else’s roadmap, policy, or sudden urge to rename the model family again.</p>



<p class="wp-block-paragraph">Building around such a layer is fine when you understand the bargain.</p>



<p class="wp-block-paragraph">Building your core around it while pretending the bargain does not exist turns into a form of emotional outsourcing.</p>



<p class="wp-block-paragraph">Now, to be fair, the answer is not to throw LLMs out of the window and go back to chiseling software into rocks. That would satisfy a certain kind of internet purist and create a very boring kind of pain. Some domains really are open-ended enough that keeping an LLM in the loop makes sense. Research assistants, language interfaces, exploratory analysis, summarization over ugly corpora, and translation between human messiness and machine structure can remain probabilistic for a long time because the problem itself remains probabilistic.</p>



<p class="wp-block-paragraph">So the useful boundary for me is not between AI and no AI.</p>



<p class="wp-block-paragraph">I think the boundary is closer to this: where does ambiguity genuinely remain, and where have we simply been too lazy, too rushed, or too enchanted by convenience to encode what we already know?</p>



<p class="wp-block-paragraph">That distinction matters.</p>



<p class="wp-block-paragraph">Because the moment you blur it, every problem starts looking like a prompt problem.</p>



<p class="wp-block-paragraph">This is also why <a href="https://blog.anantshri.info/why-learning-to-code-matters-more-in-the-age-of-ai/">learning to code matters more in the age of AI</a>. Programming was never just about typing syntax into a machine. It was about learning how systems behave, where assumptions hide, how edge cases creep in, what should be abstracted, what should remain explicit, and what must remain under direct human control. If you do not understand those things, then AI becomes a magic trick. A very useful magic trick sometimes, but still one that leaves you unable to tell the difference between generated motion and actual control.</p>



<p class="wp-block-paragraph">That is also where <a href="https://blog.anantshri.info/a-rational-survival-guide-to-vibe-coding-with-ai/">vibe coding</a> fits for me. It is real. It is useful. It is fun. It can get you surprisingly far surprisingly quickly. I have used it myself. I would be lying if I claimed some monk-like purity here. But it works best as an entry point, not as governance. It is a way to discover the shape of a thing. Ownership still has to follow.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Vibes are great for finding a path. They are terrible as a maintenance strategy.</p>
</blockquote>



<p class="wp-block-paragraph">There is another layer to this that I find harder to ignore now. LLMs are also useful mirrors. Pattern matching, approximation, confidence with patchy grounding, convincing reconstruction in place of certainty. A lot of human thinking looks less pristine under that light. I explored that more personally in <a href="https://blog.anantshri.info/what-llms-teach-me-about-my-own-brain/">What LLMs Teach Me About My Own Brain</a>. Engineering, then, is deeper than simply thinking hard. It is building the scaffolding that compensates for how unreliable thinking can be when left floating on its own.</p>



<p class="wp-block-paragraph">Maybe that is why this whole wave has felt both exciting and vaguely personal.</p>



<p class="wp-block-paragraph">The machine guesses. We guess. Good engineering knows when to stop guessing.</p>



<h2 class="wp-block-heading">Where I Land Right Now</h2>



<p class="wp-block-paragraph">So where does that leave me?</p>



<p class="wp-block-paragraph">Probably somewhere less fashionable than the current extremes. I do not buy the fantasy that AI will make understanding obsolete. I also have little patience for the opposite fantasy where every worthwhile thing must remain hand-crafted by grumpy purists defending Makefiles with ancestral passion.</p>



<p class="wp-block-paragraph">I think LLMs are best treated as a phase in many workflows.</p>



<p class="wp-block-paragraph">Use them to explore.<br>Use them to compress uncertainty.<br>Use them to help you get from blank page to first structure.<br></p>



<p class="wp-block-paragraph">Then extract the pattern.<br>Encode the logic.<br>Constrain the behavior.<br>Move what you can into deterministic systems.<br>Keep the fuzzy layer where the world is actually fuzzy.</p>



<p class="wp-block-paragraph">That approach gives you something more valuable than speed alone. It gives you a path from assistance to ownership. And ownership, inconvenient as it can be, is still where engineering earns its keep. </p>



<p class="wp-block-paragraph">The more useful question for me now is different. How much of our system should remain guesswork once we know better?</p>



<p class="wp-block-paragraph">That is the question I want to keep asking. Of products. Of teams. Of my own habits. Of every workflow that starts with wonder and quietly hardens into dependency.</p>



<p class="wp-block-paragraph">If we get this part right, AI becomes one more way to reach structure faster and reduce dependence with intent. And if we get it wrong, we will keep renting the same thinking over and over, calling it progress because the response time was good. Which, to be fair, is a very modern way to make an old mistake.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.anantshri.info/ai-should-help-design-its-own-exit/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3863</post-id>	</item>
		<item>
		<title>Open Source, Unpaid Expectations</title>
		<link>https://blog.anantshri.info/open-source-unpaid-expectations/</link>
					<comments>https://blog.anantshri.info/open-source-unpaid-expectations/#comments</comments>
		
		<dc:creator><![CDATA[anantshri]]></dc:creator>
		<pubDate>Sat, 28 Feb 2026 02:30:00 +0000</pubDate>
				<category><![CDATA[GENERAL]]></category>
		<guid isPermaLink="false">https://blog.anantshri.info/?p=3841</guid>

					<description><![CDATA[Open source is generosity, not a vendor SLA. Stop treating volunteers like suppliers. Declare your support level, offer paid tiers if you want, and make users fund or fork what they depend on.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Most widely used open source licenses start with the same idea: “no warranty, no liability.” It is as explicit as legal text can be. Use it if you want, at your own risk. And yet, every time something breaks, the world turns around and blames the developer.</p>



<p class="wp-block-paragraph">Somehow, that simple clause of “no obligation” became invisible in practice. We built a culture that holds unpaid volunteers to the same standards as billion dollar corporations. If a small library misbehaves, the question is rarely “why didn’t the company test this?” It becomes “why didn’t the maintainer fix it yet?”</p>



<p class="wp-block-paragraph"><strong>Every vulnerability becomes a headline, every maintainer becomes a villain, and every apology is demanded in triplicate.</strong></p>



<h2 class="wp-block-heading">The Misuse of Accountability</h2>



<p class="wp-block-paragraph">Even when multi billion dollar corporations rely on volunteer built tools, they often behave as if maintainers owe them service level agreements. When a flaw shows up, too many organizations treat disclosure like a hot potato. They drop it back with a deadline and call it responsibility.</p>



<p class="wp-block-paragraph">Disclosure norms were built to pressure corporations that had budgets, release teams, and legal cover. In many cases, they did work. But the same process, applied to individuals, creates a strange distortion. Volunteers do not have a QA department. They do not have a security team. They do not have a manager who can reshuffle priorities because a PR crisis is brewing.</p>



<p class="wp-block-paragraph">Finding a bug and forcing a deadline without offering help is not responsibility. It is arrogance dressed up as process.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">If you benefit, contribute. Money helps, but so do patches, testing, triage, and plain empathy.</p>
</blockquote>



<p class="wp-block-paragraph">This is also why I like <a href="https://twitter.com/lorenc_dan/status/1470032309441212416">Dan Lorenc’s thread</a>. It adds nuance. It is not always a pure “funding problem.” Sometimes money exists, but it does not flow to the right place, or it arrives with strings attached.</p>



<h2 class="wp-block-heading">The Myth of Free Labor</h2>



<p class="wp-block-paragraph">We repeat “open source is free” so often that we forget what “free” actually means. Free to use is not the same as free of responsibility for how you use it. No one forces you to adopt someone’s code. There is no sales pitch, no NDA, no onboarding call where you get a false sense of safety.</p>



<p class="wp-block-paragraph">You chose it.</p>



<p class="wp-block-paragraph">If it breaks, you are still responsible for your own house.</p>



<p class="wp-block-paragraph">And because humans love easy targets, we aim at the maintainer. It is simpler than admitting that an entire corporate ecosystem depends on unvetted, unpaid work.</p>



<p class="wp-block-paragraph">Somehow, “thank you for sharing” quietly became “you owe us uptime.”</p>



<p class="wp-block-paragraph">A great example of this tension shows up in <a href="https://antirez.com/news/133">Salvatore Sanfilippo’s reflection</a>, the creator of Redis. He stepped away from his company when his role became more about business than technology. His story captures an essential truth: not every developer wants to scale, monetize, or manage teams. Some want to build, learn, and share. That motivation gets flattened when we treat every open source repo as a pipeline to profit.</p>



<h2 class="wp-block-heading">The Many Faces of Open Source</h2>



<p class="wp-block-paragraph">Open source is not a single identity. It is a crowded room of very different people wearing the same label.</p>



<ol class="wp-block-list">
<li><strong>The Job Seeker:</strong> writes to demonstrate competence and land opportunities.</li>



<li><strong>The Builder:</strong> shares for joy, curiosity, and the urge to tinker.</li>



<li><strong>The Business:</strong> balances openness with sustainability and a clear support model.</li>



<li><strong>The Idealist:</strong> believes software should belong to everyone.</li>



<li><strong>The “I do not care” Hacker:</strong> publishes code because sharing is easier than maintaining it privately.</li>
</ol>



<p class="wp-block-paragraph">And yet, the world lumps them together. When something breaks, nobody pauses to ask which one wrote the code. The job seeker did not sign up for audits. The hobbyist did not promise support. The idealist did not agree to SLAs. The hacker did not intend to scale.</p>



<p class="wp-block-paragraph">But liability finds everyone equally.</p>



<h2 class="wp-block-heading">The Cost of Uniform Expectations</h2>



<p class="wp-block-paragraph">This flattening is why many developers quietly stop sharing.</p>



<p class="wp-block-paragraph">The corporate user wants stability.<br>The individual creator wants freedom.<br>The regulator wants control.<br>The community wants trust.</p>



<p class="wp-block-paragraph"><strong>Trying to satisfy them all with one set of expectations guarantees that no one wins.</strong></p>



<p class="wp-block-paragraph">Look at the Google Play ecosystem.</p>



<p class="wp-block-paragraph">In its early days, it was a wild bazaar where anyone could upload an app. It was chaotic, but it was also full of creativity.</p>



<p class="wp-block-paragraph"><a href="https://android-developers.googleblog.com/2025/08/elevating-android-security.html">Now, in the name of safety, even developers who do not distribute through the Play Store can be pushed into verification requirements just to exist in the same ecosystem.</a> The same company that once welcomed every developer is now too busy managing its own scale.</p>



<p class="wp-block-paragraph">I am not arguing against safety. I am arguing that control grows faster than empathy. Once systems scale, they tend to protect themselves first.</p>



<h2 class="wp-block-heading">The Corporate Blind Spot</h2>



<p class="wp-block-paragraph">Take FFmpeg, the backbone of modern multimedia.</p>



<p class="wp-block-paragraph">When vulnerabilities appear, organizations that depend on it often expect volunteers to fix them, on a schedule the volunteers did not agree to. The organization did not write the code. They discovered a flaw. But instead of contributing patches or funding maintenance in a direct and sustained way, they set timelines and demand compliance.</p>



<p class="wp-block-paragraph">To be fair, some large companies do fund open source security work. Google, for example, runs a <a href="https://github.com/google/bughunters/blob/main/patch-rewards-program/scope.md">Patch Rewards Program</a> and an <a href="https://bughunters.google.com/open-source-security/patch-rewards">Open Source Security Rewards initiative</a>. Those are real efforts, and they help.</p>



<p class="wp-block-paragraph">But they also highlight the uncomfortable pattern. We have normalized a world where finding flaws is organized, incentivized, and celebrated, while fixing and maintaining is treated as optional charity.</p>



<p class="wp-block-paragraph">If the intent is truly to strengthen open source, another approach is direct ownership of the problem. Fork critical components, patch them, maintain them, and upstream what you can. Large organizations already do this when it matters enough, like <a href="https://blog.chromium.org/2013/04/blink-rendering-engine-for-chromium.html">Blink (a WebKit fork)</a> and <a href="https://github.com/google/boringssl">BoringSSL (an OpenSSL fork)</a>.</p>



<p class="wp-block-paragraph">Money alone is not the solution. Ownership and effort are.</p>



<p class="wp-block-paragraph">I argued something adjacent to this a decade ago in <a href="https://blog.anantshri.info/glorification-of-pentesters/"><em>The Glorification of Pentesters</em></a>.</p>



<p class="wp-block-paragraph">Back then, the industry celebrated the people who broke things while ignoring the ones who built them.</p>



<p class="wp-block-paragraph">Today, the pendulum swings even further. We glorify the breakers, then we burden the builders with the aftermath. It feels like a loop we never escaped.</p>



<figure class="wp-block-image aligncenter size-full"><img fetchpriority="high" decoding="async" width="779" height="1024" src="https://blog.anantshri.info/wp-content/uploads/2026/02/image-2.png" alt="" class="wp-image-3843" srcset="https://blog.anantshri.info/wp-content/uploads/2026/02/image-2.png 779w, https://blog.anantshri.info/wp-content/uploads/2026/02/image-2-228x300.png 228w, https://blog.anantshri.info/wp-content/uploads/2026/02/image-2-768x1010.png 768w" sizes="(max-width: 779px) 100vw, 779px" /></figure>



<h2 class="wp-block-heading">Dead on Arrival, by Design</h2>



<p class="wp-block-paragraph">A friend once told me:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Treat open source as dead on arrival.</p>
</blockquote>



<p class="wp-block-paragraph">Write it. Release it. Move on.</p>



<p class="wp-block-paragraph">If people use it, good for them. If they do not, good for you.</p>



<p class="wp-block-paragraph">The moment you start worrying about its afterlife, you lose your freedom.</p>



<p class="wp-block-paragraph">That cynical wisdom makes more sense every year. We conditioned ourselves to believe open source should pay. Maybe it can, but only for those who want that path. Not everyone wants to run a company around their repo.</p>



<p class="wp-block-paragraph">Some people want to share and disappear.</p>



<h2 class="wp-block-heading">Choice, Not Compliance</h2>



<p class="wp-block-paragraph">Maybe the answer is to formalize that choice.</p>



<p class="wp-block-paragraph">If you want enterprise adoption and enterprise money, then choose the enterprise path. Publish SBOMs. Ship reproducible releases. Run updates like a product. Put support behind a paid model.</p>



<p class="wp-block-paragraph">If you do not want that, choose the free path. No guarantees, no obligations, just pure sharing.</p>



<p class="wp-block-paragraph">Let corporations pay for the privilege of expecting things.</p>



<p class="wp-block-paragraph">And let’s be honest, donations are not only money. They can be money, code, time, documentation, testing, triage, and community management. If you have contributed none of these, you do not get to demand anything.</p>



<p class="wp-block-paragraph">You can use the software, sure. You just do not get to act entitled.</p>



<p class="wp-block-paragraph">Even if you have contributed, your expectations should still be lower than what you would demand from a paid vendor. Open source is generosity, not service.</p>



<p class="wp-block-paragraph"><strong>The irony is that by piling expectations on maintainers, we made them the weak link in the system.</strong></p>



<p class="wp-block-paragraph">Attackers do not need to go after fortified corporations anymore. They go after the unpaid volunteer whose code runs inside those corporations. By placing so much responsibility in the hands of individuals with no safety net, we turned open source developers into attack surfaces.</p>



<p class="wp-block-paragraph">Not because they did something wrong, but because everyone else offloaded risk onto them and called it collaboration.</p>



<p class="wp-block-paragraph">If we truly care about security, we should start by protecting the people who make the tools we depend on, not punishing them for being human.</p>



<p class="wp-block-paragraph">This tension is not new. The <a href="https://openssf.org/blog/2025/09/23/open-infrastructure-is-not-free-a-joint-statement-on-sustainable-stewardship">OpenSSF statement on sustainable stewardship</a> calls it out clearly: open infrastructure is not free, and pretending it is only worsens fragility. The <a href="https://www.softwaremaxims.com/blog/not-a-supplier">Software Maxims piece, “Not a Supplier”</a>, makes the same argument from another angle: open source authors are not vendors, and treating them as such is both wrong and short sighted.</p>



<p class="wp-block-paragraph">Together, they point to one reality. The current system rewards intermediaries more reliably than it rewards creators.</p>



<h2 class="wp-block-heading">The Paradox of Reach</h2>



<p class="wp-block-paragraph">Of course, freedom comes with a price.</p>



<p class="wp-block-paragraph">Software that rejects support and commercial polish rarely gets adopted widely. Corporations avoid GPL like licenses because they demand reciprocity. Reach often comes from compromise.</p>



<p class="wp-block-paragraph">You either give up some freedom for visibility, or you give up reach for peace.</p>



<p class="wp-block-paragraph"><strong>Neither choice is wrong. The problem is pretending they are the same.</strong></p>



<p class="wp-block-paragraph">That famous <a href="https://xkcd.com/2347/">XKCD comic #2347</a> about a single unpaid maintainer holding up the modern world stopped being funny years ago. It is now documentation.</p>



<h2 class="wp-block-heading">Maybe This Is the Balance</h2>



<p class="wp-block-paragraph">So perhaps the path forward is not “fixing open source.” It is accepting its duality.</p>



<p class="wp-block-paragraph">Open source is both chaos and order.<br>Generosity and exhaustion.<br>Freedom and frustration.</p>



<p class="wp-block-paragraph">Maybe the only sustainable model is honesty. Developers declare what they can give, users respect those limits, and organizations stop outsourcing morality to volunteer time.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Freedom does not mean free of consequence.<br>It means knowing which consequences you accept.</p>
</blockquote>



<h3 class="wp-block-heading">Practical notes</h3>



<p class="wp-block-paragraph"><strong>If you build open source for fun:</strong> Ship what you can, say “no” early, and write your boundaries down. Your repo is not a contract.</p>



<p class="wp-block-paragraph"><strong>If you build open source to make money:</strong> Treat it like a product. Offer clear paid support, clear release practices, and clear expectations, then let the free tier remain genuinely free.</p>



<p class="wp-block-paragraph"><strong>If you are an organization:</strong> Assume responsibility by default. Fund the maintainers, contribute code and testing, or maintain your own fork. Do not outsource operational risk to unpaid goodwill.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.anantshri.info/open-source-unpaid-expectations/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3841</post-id>	</item>
		<item>
		<title>Vendors Sell Suites. Teams Need Slices. AI Made It Cheap.</title>
		<link>https://blog.anantshri.info/vendors-sell-suites-teams-need-slices-ai-made-it-cheap/</link>
					<comments>https://blog.anantshri.info/vendors-sell-suites-teams-need-slices-ai-made-it-cheap/#comments</comments>
		
		<dc:creator><![CDATA[anantshri]]></dc:creator>
		<pubDate>Fri, 27 Feb 2026 07:10:12 +0000</pubDate>
				<category><![CDATA[GENERAL]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://blog.anantshri.info/?p=3829</guid>

					<description><![CDATA[AI is making it cheap to replicate small SaaS workflows. Vendors sell suites, teams need slices, and bundling feels shakier at renewal time.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">There is a story I keep hearing, and I have lived a version of it myself.</p>



<p class="wp-block-paragraph">We were a small firm. For a long time we had been asking our SaaS vendor for one small feature. Not a roadmap revolution, just one capability that would make daily work less annoying.</p>



<p class="wp-block-paragraph">We were not a flagship customer. We were not the account that makes a salesperson show up with a deck and free cookies. So the feature kept landing in the same place, the polite back burner.</p>



<p class="wp-block-paragraph">Then renewal season came close enough that it started showing up in meetings.</p>



<p class="wp-block-paragraph">At some point we said, before the annual renewal hits, let us try something. A weekend, Cursor, and a couple of LLM chats later, we had the feature we needed and the narrow workflow we actually used. <strong>Good enough to replace a license.</strong></p>



<p class="wp-block-paragraph">I have heard variations of this from other people too. Different tools, different vendors, same pattern. A small slice built internally, not because someone wanted to start a rebellion, but because the economics suddenly made sense.</p>



<p class="wp-block-paragraph">The counterpoint is always the same.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Vendors are specialists. They can do it better.</p>
</blockquote>



<p class="wp-block-paragraph">They often can. At least, they can build a broader, more polished product for a wider audience.</p>



<p class="wp-block-paragraph">But that is not the only question.</p>



<p class="wp-block-paragraph">The question is whether you need the broader product, or whether you need a reliable path through a small part of it.</p>



<p class="wp-block-paragraph">This is where the internet conversation gets messy. Social media is a terrible place for nuance, and LinkedIn is where nuance goes to die a slow death in front of a ring light.</p>



<p class="wp-block-paragraph">My blog is my own space, so I can say this the way I want to.  This is my take. It might be flawed, but it is mine.</p>



<h2 class="wp-block-heading">The part everyone argues about, and the part that matters</h2>



<p class="wp-block-paragraph">When people claim they “cloned” a product, they often mean very different things:</p>



<ol class="wp-block-list">
<li>A UI lookalike</li>



<li>A workflow replica that solves one internal problem</li>



<li>A full replacement with all the guarantees</li>
</ol>



<p class="wp-block-paragraph">Most of the interesting stories today are category two, even when the posts pretend they are category three.</p>



<p class="wp-block-paragraph">And category two is enough to create pressure.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Most “AI clones” are not trying to replace the product.<br>They are trying to replace one workflow inside the product.</p>
</blockquote>



<p class="wp-block-paragraph">That is the part worth debating.</p>



<p class="wp-block-paragraph">Cloning itself is not new. Students have been building clones forever as a way to learn. What is new is the speed. A narrow workflow used to be weeks of work. Now it can be a weekend decision.</p>



<h2 class="wp-block-heading">Suites lose to slices</h2>



<p class="wp-block-paragraph">Most organizations do not use the full suite they pay for.</p>



<p class="wp-block-paragraph">They use a portion. A path. A handful of screens. A set of actions that happen every day.</p>



<p class="wp-block-paragraph">The rest is “nice to have,” or “maybe we will use it later,” or “it came in the package so we pretend it is strategic.”</p>



<p class="wp-block-paragraph">So when workflow replication becomes cheap, the default conversation changes.</p>



<p class="wp-block-paragraph">Before, it was “do we buy this product or not.”</p>



<p class="wp-block-paragraph">Now it becomes “which parts are worth buying, and which parts are cheaper to build ourselves.”</p>



<p class="wp-block-paragraph">That shift is brutal for business models that depend on bundling.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Vendors sell the bundle.<br>Internal teams fund the slice.</p>
</blockquote>



<h2 class="wp-block-heading">The ownership tax scales with scope</h2>



<p class="wp-block-paragraph">Yes, if you build internal tools, you own them.</p>



<p class="wp-block-paragraph">Documentation, stewardship, support rotation, updates, and the occasional “why is this on fire” moment.</p>



<p class="wp-block-paragraph">But the ownership tax scales with what you build.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">A vendor has to maintain the full suite. You do not.</p>
</blockquote>



<p class="wp-block-paragraph">If you replicate a narrow workflow, you are not signing up to maintain 100 percent of the product. You are maintaining the slice you actually use.</p>



<p class="wp-block-paragraph">This matters because the vendor’s codebase is not “feature logic plus some glue.” A lot of it exists to support the vendor’s business model and the vendor’s constraints:</p>



<ul class="wp-block-list">
<li>Multi tenant isolation</li>



<li>Generic access control for every possible org shape</li>



<li>Audit trails and reporting for every compliance checkbox</li>



<li>Backwards compatibility for old customers</li>



<li>Integration marketplaces</li>



<li>Onboarding, training, and support processes</li>



<li>Billing, entitlements, packaging logic</li>



<li>“Works everywhere” engineering</li>
</ul>



<p class="wp-block-paragraph">Internal tooling can be brutally honest:</p>



<ul class="wp-block-list">
<li>One tenant by definition</li>



<li>One identity system</li>



<li>One environment</li>



<li>One workflow that actually matters</li>



<li>The freedom to say “we fix what we hit”</li>
</ul>



<p class="wp-block-paragraph">If your internal workflow needs a tracker, you integrate the one tracker. If you only care about Jira, you integrate Jira. If your team only wants one notification path, you build one notification path. we use to call it bespoke development.</p>



<p class="wp-block-paragraph">The tool does not need to impress 100 customers. It needs to save your team time and money.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I am not rebuilding your product.<br>I am rebuilding my workflow.</p>
</blockquote>



<p class="wp-block-paragraph">A small extra nuance that rarely gets mentioned.</p>



<p class="wp-block-paragraph">Sometimes the “edge case” is not a missing feature. Sometimes it is you.</p>



<p class="wp-block-paragraph">I have had scenarios where vendors did not want to take me in as a customer because my scale was awkward for them. They did not want to bend their system for one weirdly shaped customer.</p>



<p class="wp-block-paragraph">So yes, edge cases take effort.</p>



<p class="wp-block-paragraph">Sometimes the market chooses not to handle your edge case at all.</p>



<h2 class="wp-block-heading">Risk did not disappear, it changed shape</h2>



<p class="wp-block-paragraph">We used to talk about key person risk.</p>



<p class="wp-block-paragraph">“If the person who built it leaves, we are stuck.”</p>



<p class="wp-block-paragraph">That is still real, but the modern toolchain adds a new flavor.</p>



<p class="wp-block-paragraph">Toolchain risk.</p>



<p class="wp-block-paragraph">If the LLM you rely on changes availability, pricing, or behavior, your build loop becomes unpredictable.</p>



<p class="wp-block-paragraph">So is SaaS a safe space. A <strong>hard No</strong>, if your SaaS vendor gets acquired, changes terms, or quietly dies in the VC ecosystem, you face churn at renewal anyway.</p>



<p class="wp-block-paragraph"><strong>One way or the other, you plan for churn.</strong></p>



<p class="wp-block-paragraph">The practical difference is that internal slices let you keep the critical asset, which is the working system and its artifacts.</p>



<ul class="wp-block-list">
<li>You can treat the LLM as an assistant to produce deterministic output.</li>



<li>You can pin models when it makes sense.</li>



<li>You can keep generated code in version control.</li>



<li>You can rely on tests so the tool assists the build rather than becoming a runtime dependency.</li>
</ul>



<p class="wp-block-paragraph"><a href="https://blog.anantshri.info/a-rational-survival-guide-to-vibe-coding-with-ai/">Survival Guide for Vibe Coding</a></p>



<h2 class="wp-block-heading">My browser first bias made this obvious</h2>



<p class="wp-block-paragraph">Building client side tools taught me something I did not fully appreciate when I was only consuming enterprise software.</p>



<p class="wp-block-paragraph">The technical logic is often the smallest part.</p>



<p class="wp-block-paragraph">The rest is scaffolding required to sell, scale, and survive as a product company.</p>



<p class="wp-block-paragraph">When you are not selling it, you can remove huge chunks of complexity.</p>



<p class="wp-block-paragraph">No multi tenant gymnastics. No pricing plans embedded inside permission logic. No onboarding flows for strangers. No marketplace of integrations you do not want.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Software gets suspiciously small when you stop trying to make it a business.</p>
</blockquote>



<p class="wp-block-paragraph">This is not a moral statement. It is just math.</p>



<p class="wp-block-paragraph">And it is why “AI clones” feel more credible now. They are often not clones. They are workflow extracts.</p>



<h2 class="wp-block-heading">Hardening and attack surface reduction</h2>



<p class="wp-block-paragraph">I am biased here, and proudly so.</p>



<p class="wp-block-paragraph">I am a believer in attack surface reduction. reducetheattacksurface.com</p>



<p class="wp-block-paragraph">Less surface is better. Less surface means fewer moving parts.</p>



<p class="wp-block-paragraph">Fewer moving parts means fewer updates, fewer dependencies, fewer forgotten admin panels, and fewer “wait, why is that exposed to the internet” surprises.</p>



<p class="wp-block-paragraph">Yes, someone still needs to keep a check on hardening and updates. The difference is that when your tool is a narrow slice, the check is smaller.</p>



<p class="wp-block-paragraph">Also, we should stop pretending that buying a vendor means hardening is solved. Vendors do not do a stellar job by default. Some do, many do not.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">A logo on a contract is not a security control.</p>
</blockquote>



<h2 class="wp-block-heading">The real moat is not technical</h2>



<p class="wp-block-paragraph">There is one vendor advantage that still matters a lot.</p>



<p class="wp-block-paragraph">Delegation of responsibility, and more importantly, liability.</p>



<p class="wp-block-paragraph">At some point, especially in regulated industries, you are not buying features. You are buying contracts, auditability, and the ability to transfer certain categories of risk out of the org.</p>



<p class="wp-block-paragraph">If the question becomes “who pays when this goes wrong,” you are no longer in the realm of engineering. You are in the realm of insurance.</p>



<p class="wp-block-paragraph">That is a durable moat, and it is also why I do not believe vendors are dying.</p>



<p class="wp-block-paragraph">What is changing is the default.</p>



<h2 class="wp-block-heading">What I hope vendors learn from this</h2>



<p class="wp-block-paragraph">If I were selling a product in this environment, I would worry less about “AI cloned X” as a headline and more about unbundling as a trend. This is also consistent with the natural <a href="https://blog.anantshri.info/flip-cycles-of-computing/">flip cycles of computing</a></p>



<p class="wp-block-paragraph">Customers are going to ask harder questions:</p>



<ul class="wp-block-list">
<li>Which workflows are we actually paying for</li>



<li>Which workflows can we replicate with acceptable risk</li>



<li>Why are we paying for integrations we do not use</li>



<li>Why does “enterprise grade” feel like “enterprise bloat”</li>
</ul>



<p class="wp-block-paragraph">The winning vendors will probably be the ones who embrace this reality instead of fighting it.</p>



<p class="wp-block-paragraph">Modular pricing.</p>



<p class="wp-block-paragraph">Clean APIs.</p>



<p class="wp-block-paragraph">Exportability that does not feel like a hostage negotiation.</p>



<p class="wp-block-paragraph">A product that earns its cost on workflows customers actually value, not on the fear of migration.</p>



<h2 class="wp-block-heading">Where I personally landed</h2>



<p class="wp-block-paragraph">I do not think AI assisted workflow replication means the end of vendors.</p>



<p class="wp-block-paragraph">I do think it means vendors will have to justify their bundles in a way they did not have to before.</p>



<p class="wp-block-paragraph">And I think a lot of organizations will quietly build internal slices, not because they are rebelling, but because they are budgeting.</p>



<p class="wp-block-paragraph">If you are thoughtful, you can keep scope small, keep the workflow tight, and keep the value obvious.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Cloning is not the revolution.<br>Scoping is.</p>
</blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.anantshri.info/vendors-sell-suites-teams-need-slices-ai-made-it-cheap/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3829</post-id>	</item>
		<item>
		<title>Hacking Archives of India &#8211; Website Revamp Update</title>
		<link>https://blog.anantshri.info/hacking-archives-of-india-website-revamp-update/</link>
					<comments>https://blog.anantshri.info/hacking-archives-of-india-website-revamp-update/#respond</comments>
		
		<dc:creator><![CDATA[anantshri]]></dc:creator>
		<pubDate>Mon, 09 Feb 2026 04:51:33 +0000</pubDate>
				<category><![CDATA[GENERAL]]></category>
		<category><![CDATA[archives]]></category>
		<category><![CDATA[hackingarchivesofindia]]></category>
		<guid isPermaLink="false">https://blog.anantshri.info/?p=3794</guid>

					<description><![CDATA[I am thrilled to announce a major update to Hacking Archives of India (HAI). My mission has always been to document the history and contributions of the Indian information security community. To better serve that mission, I have completely revamped both the looks and the internals of the website. Whether you are looking for specific]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I am thrilled to announce a major update to <strong>Hacking Archives of India (HAI)</strong>. My mission has always been to document the history and contributions of the Indian information security community. To better serve that mission, I have completely revamped both the looks and the internals of the website.</p>



<p class="wp-block-paragraph">Whether you are looking for specific tools, historical talks, or the journey of specific hackers, the new HAI is faster, cleaner, and now machine-readable.</p>



<p class="wp-block-paragraph">Here is a deep dive into the new features and changes you will find.</p>



<h3 class="wp-block-heading">1. Visual Overhaul: Big Data, Big Cards</h3>



<p class="wp-block-paragraph">I wanted the impact of the community to be visible at a glance. I have moved away from dense text lists in favor of a card-based UI.</p>



<p class="wp-block-paragraph"><strong>Status Cards:</strong> You will now see large status cards that clearly visualize the numbers for each hacker profile. This gives immediate context to the volume of work contributed by an individual.</p>



<p class="wp-block-paragraph"><strong>Tools &amp; Books:</strong> The Tools and Books pages have received a significant visual upgrade. Tools are now displayed in detailed cards rather than simple lines, making it easier to scan for &#8220;Datasploit&#8221; or other specific utilities.</p>



<div class="wp-block-uagb-image uagb-block-a31362e5 wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-none"><figure class="wp-block-uagb-image__figure"><img decoding="async" srcset="https://blog.anantshri.info/wp-content/uploads/2026/02/4fe588ce-ec55-4dd3-9d1b-3bcf5a55b886.png ,https://blog.anantshri.info/wp-content/uploads/2026/02/4fe588ce-ec55-4dd3-9d1b-3bcf5a55b886.png 780w, https://blog.anantshri.info/wp-content/uploads/2026/02/4fe588ce-ec55-4dd3-9d1b-3bcf5a55b886.png 360w" sizes="auto, (max-width: 480px) 150px" src="https://blog.anantshri.info/wp-content/uploads/2026/02/4fe588ce-ec55-4dd3-9d1b-3bcf5a55b886.png" alt="" class="uag-image-3797" width="1024" height="768" title="4fe588ce-ec55-4dd3-9d1b-3bcf5a55b886" loading="lazy" role="img"/></figure></div>



<p class="has-text-align-center wp-block-paragraph"><a href="https://hackingarchivesofindia.com">https://hackingarchivesofindia.com</a></p>



<p class="wp-block-paragraph"><strong>Tools &amp; Books:</strong> The Tools and Books pages have received a significant visual upgrade. Tools are now displayed in detailed cards rather than simple lines.</p>



<p class="wp-block-paragraph"><strong>Mobile Optimization:</strong> A huge part of this update was ensuring the archives are accessible on the go. I have significantly improved mobile device handling, ensuring that complex data tables and profile cards render perfectly on your phone.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">2. The Evolved Hacker Profile</h3>



<p class="wp-block-paragraph">The core of these archives is the people. I have improved the <strong>Hacker Profile</strong> pages to provide much more granular detail.</p>



<p class="wp-block-paragraph">Beyond just a list of talks, you can now see:</p>



<ul class="wp-block-list">
<li><strong>Collaborators:</strong> Who has this hacker worked with?</li>



<li><strong>Tools Built:</strong> A direct link to software they have authored.</li>



<li><strong>Focus Areas:</strong> What domains (e.g., IoT, Web Sec) do they specialize in?</li>
</ul>



<p class="wp-block-paragraph">Additionally, I have improved the &#8220;Social Share&#8221; aspect. When you share a hacker’s page on social media, it will now fetch the hacker’s profile picture rather than the generic project logo, thanks to updated SEO tags.</p>



<div class="wp-block-uagb-image uagb-block-a99741d2 wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-none"><figure class="wp-block-uagb-image__figure"><img decoding="async" srcset="https://blog.anantshri.info/wp-content/uploads/2026/02/54aeaf47-86a0-4430-a5fc-ee34c1967200-1.png ,https://blog.anantshri.info/wp-content/uploads/2026/02/54aeaf47-86a0-4430-a5fc-ee34c1967200-1.png 780w, https://blog.anantshri.info/wp-content/uploads/2026/02/54aeaf47-86a0-4430-a5fc-ee34c1967200-1.png 360w" sizes="auto, (max-width: 480px) 150px" src="https://blog.anantshri.info/wp-content/uploads/2026/02/54aeaf47-86a0-4430-a5fc-ee34c1967200-1.png" alt="" class="uag-image-3800" width="1024" height="768" title="54aeaf47-86a0-4430-a5fc-ee34c1967200" loading="lazy" role="img"/></figure></div>



<p class="has-text-align-center wp-block-paragraph"><em><a href="https://hackingarchivesofindia.com/hacker/vivek_ramachandran/" target="_blank" rel="noreferrer noopener">https://hackingarchivesofindia.com/hacker/vivek_ramachandran/</a></em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Sister Project: Integration with &#8220;Hackers of India&#8221;</h3>



<p class="wp-block-paragraph">History isn&#8217;t just data; it&#8217;s also faces and moments. I am proud to announce a cross-linking integration with a sister project, <strong><a href="https://hackersofindia.com" target="_blank" rel="noreferrer noopener">Hackers of India</a></strong>, launched by <a href="https://hackingarchivesofindia.com/hacker/shubham_mittal/">Shubham</a>.</p>



<p class="wp-block-paragraph">While <em>Hacking Archives</em> focuses on the technical contributions (talks, tools, books), <em>Hackers of India</em> focuses on the visual history-capturing candid moments and photos from various events.</p>



<p class="wp-block-paragraph"><strong>The Camera Icon:</strong> On hacker profiles in the Archive, you will now see a <strong>Camera Icon</strong>. Clicking this will take you directly to that hacker&#8217;s photo gallery on the <em>Hackers of India</em> website. It connects the work with the person.</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="540" height="288" src="https://blog.anantshri.info/wp-content/uploads/2026/02/image.png" alt="" class="wp-image-3804" srcset="https://blog.anantshri.info/wp-content/uploads/2026/02/image.png 540w, https://blog.anantshri.info/wp-content/uploads/2026/02/image-300x160.png 300w" sizes="(max-width: 540px) 100vw, 540px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">3. Better Taxonomy: Focused Areas &amp; Tags</h3>



<p class="wp-block-paragraph">With thousands of talks and data points, categorization is key. I have introduced two major changes to help you browse:</p>



<ol start="1" class="wp-block-list">
<li><strong>Focused Areas:</strong> I have introduced ~27 &#8220;Focused Areas.&#8221; These act as high-level collections of tags providing a grouped view (e.g., Penetration Testing, Cloud Security).</li>



<li><strong>Hashtags:</strong> Almost every talk I have cataloged now has one or more hashtags associated with it, allowing for precise filtering.</li>
</ol>



<div class="wp-block-uagb-image uagb-block-ecf71b67 wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-none"><figure class="wp-block-uagb-image__figure"><img decoding="async" srcset="https://blog.anantshri.info/wp-content/uploads/2026/02/0b4a8fe7-ce90-466b-b555-3b695cf43920.png ,https://blog.anantshri.info/wp-content/uploads/2026/02/0b4a8fe7-ce90-466b-b555-3b695cf43920.png 780w, https://blog.anantshri.info/wp-content/uploads/2026/02/0b4a8fe7-ce90-466b-b555-3b695cf43920.png 360w" sizes="auto, (max-width: 480px) 150px" src="https://blog.anantshri.info/wp-content/uploads/2026/02/0b4a8fe7-ce90-466b-b555-3b695cf43920.png" alt="" class="uag-image-3801" width="1024" height="768" title="0b4a8fe7-ce90-466b-b555-3b695cf43920" loading="lazy" role="img"/></figure></div>



<p class="has-text-align-center wp-block-paragraph"><em><a href="https://hackingarchivesofindia.com/focus/" target="_blank" rel="noreferrer noopener">https://hackingarchivesofindia.com/focus/</a></em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4. AI-Ready: llms.txt and Markdown Support</h3>



<p class="wp-block-paragraph">Recognizing the changing landscape of how we consume data, I have made the site completely friendly to Large Language Models (LLMs) and developers who prefer raw text.</p>



<ul class="wp-block-list">
<li><strong>llms.txt Support:</strong> The site now supports the <code>llms.txt</code> standard, making it easier for AI agents to understand the site&#8217;s structure and content.</li>



<li><strong>Universal Markdown:</strong> Every single page on the website now has a corresponding <code>index.md</code> file. If you prefer reading or parsing the content in Markdown format, it is now natively available for every entry.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">5. Curatorial Decisions: The Panel Shift</h3>



<p class="wp-block-paragraph">As I catalog history, I have to make decisions on what constitutes primary data. <strong>Panel Discussions</strong> have become a staple at InfoSec conferences. However, they often don&#8217;t directly align with the specific indexing aims of this archive (which focuses heavily on technical presentations and tools).</p>



<p class="wp-block-paragraph">Consequently, I have moved Panels to <strong>secondary items</strong>. I will still make a best effort to list them, but they will no longer count toward the primary &#8220;Home Page Listing&#8221; counts. This ensures the core metrics reflect deep technical contributions.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">6. Transparency and Roadmap</h3>



<p class="wp-block-paragraph">I believe in building this archive in the open. I have updated the <strong><a href="https://hackingarchivesofindia.com/roadmap/" data-type="link" data-id="https://hackingarchivesofindia.com/roadmap/">Roadmap</a></strong> to provide clear details on how I operate, what I am building next, and how the community can get involved.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Explore the Update</h3>



<p class="wp-block-paragraph">I invite you to explore the revamped site. Dig into the history of Indian hacking, discover a new tool, or look up a mentor&#8217;s journey.</p>



<ul class="wp-block-list">
<li><strong>Homepage:</strong> <a href="https://hackingarchivesofindia.com" target="_blank" rel="noreferrer noopener">hackingarchivesofindia.com</a></li>



<li><strong>Full Timeline:</strong> <a href="https://hackingarchivesofindia.com/timeline/" target="_blank" rel="noreferrer noopener">hackingarchivesofindia.com/timeline/</a></li>



<li><strong>Books:</strong> <a href="https://hackingarchivesofindia.com/book/" target="_blank" rel="noreferrer noopener">hackingarchivesofindia.com/book/</a></li>



<li><strong>Awards:</strong> <a href="https://hackingarchivesofindia.com/award/" target="_blank" rel="noreferrer noopener">hackingarchivesofindia.com/award/</a></li>
</ul>



<p class="wp-block-paragraph">Let me know what you think of the new look!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.anantshri.info/hacking-archives-of-india-website-revamp-update/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3794</post-id>	</item>
		<item>
		<title>Readwise Wrapped: my year in reading</title>
		<link>https://blog.anantshri.info/readwise-wrapped-my-year-in-reading/</link>
					<comments>https://blog.anantshri.info/readwise-wrapped-my-year-in-reading/#respond</comments>
		
		<dc:creator><![CDATA[anantshri]]></dc:creator>
		<pubDate>Tue, 30 Dec 2025 16:32:02 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[readwise]]></category>
		<category><![CDATA[tools]]></category>
		<guid isPermaLink="false">https://blog.anantshri.info/?p=3751</guid>

					<description><![CDATA[TL;DR: I built Readwise Wrapped. It gives you a Spotify Wrapped style year-in-review for your Readwise highlights. You paste your Readwise token, pick a year, and it spits out a clean, shareable, good-looking reading recap.Link: https://readwise-wrapped.apps.anantshri.info/ What is it? If you use Readwise, you already have a ridiculous amount of reading data sitting there. Highlights]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>TL;DR:</strong> I built <strong>Readwise Wrapped</strong>. It gives you a Spotify Wrapped style year-in-review for your Readwise highlights. You paste your Readwise token, pick a year, and it spits out a clean, shareable, good-looking reading recap.<br>Link: <a href="https://readwise-wrapped.apps.anantshri.info/">https://readwise-wrapped.apps.anantshri.info/</a></p>



<span id="more-3751"></span>



<h3 class="wp-block-heading">What is it?</h3>



<p class="wp-block-paragraph">If you use Readwise, you already have a ridiculous amount of reading data sitting there. Highlights from books, articles, tweets, podcasts, PDFs, random rabbit holes at 2 AM. Basically a personal library of “things that made me pause and go hmm.”</p>



<p class="wp-block-paragraph">But Readwise does not really give you a flashy year-end recap. I wanted that.</p>



<p class="wp-block-paragraph">So I made <strong>Readwise Wrapped</strong>.</p>



<p class="wp-block-paragraph">You paste your Readwise token, select a year, and in a minute or two (depending on how big you are with highlights) you get a set of slides that summarize your reading year:</p>



<ul class="wp-block-list">
<li><strong>Your Numbers</strong>: total highlights, books/articles/docs, words consumed, streaks</li>



<li><strong>Reading DNA</strong>: what you actually read (books vs articles vs tweets vs podcasts)</li>



<li><strong>Monthly Activity</strong>: which months were productive and which months were… aspirational</li>



<li><strong>Reading Rhythm</strong>: your peak days and favorite times to read</li>



<li><strong>Virtual Mentors</strong>: authors who show up the most in your highlights</li>



<li><strong>Top Books</strong>: your most highlighted reads</li>



<li><strong>Best Highlight</strong>: the one quote that basically screamed “remember me”</li>



<li><strong>Next Year Forecast</strong>: a small prediction of what you will likely read next, based on your late-year trends</li>
</ul>



<p class="wp-block-paragraph">If you enable AI insights, it also adds:</p>



<ul class="wp-block-list">
<li><strong>Reading Personality</strong>: a fun label for your reading style</li>



<li><strong>Your Superpower</strong>: what your reading habits suggest you are good at</li>



<li><strong>Recommendations</strong>: books you might actually enjoy, not just “top 10 books everyone must read or else”</li>
</ul>



<h3 class="wp-block-heading">Privacy first, because of course</h3>



<p class="wp-block-paragraph">Your Readwise token is used only to fetch the data and then discarded. It is not stored.</p>



<p class="wp-block-paragraph">Only the final wrapped output is saved, and it gets a unique URL you can share.</p>



<h3 class="wp-block-heading">Sharing and exports</h3>



<p class="wp-block-paragraph">Each wrapped comes with:</p>



<ul class="wp-block-list">
<li>A <strong>shareable link</strong></li>



<li>A <strong>PDF download</strong> (multi-page report)</li>



<li>A <strong>share card</strong> (1200&#215;630) for Twitter/LinkedIn</li>
</ul>



<p class="wp-block-paragraph">Yes, I know. We are all addicted to neat rectangles with stats.</p>



<h3 class="wp-block-heading">How it works</h3>



<ol class="wp-block-list">
<li>Get your Readwise access token: <a href="https://readwise.io/access_token">https://readwise.io/access_token</a></li>



<li>Open: <a href="https://readwise-wrapped.apps.anantshri.info/">https://readwise-wrapped.apps.anantshri.info/</a></li>



<li>Paste token, pick a year</li>



<li>Wait a minute or two</li>



<li>Swipe through the slides, then share or download</li>
</ol>



<h3 class="wp-block-heading">Tech stack for the people who read README files for fun</h3>



<ul class="wp-block-list">
<li><strong>Backend:</strong> FastAPI (async)</li>



<li><strong>Frontend:</strong> Vanilla HTML/CSS/JS (no framework bloat, no build pipeline therapy)</li>



<li><strong>AI:</strong> OpenRouter (using free-tier models)</li>



<li><strong>Database:</strong> <a href="https://supabase.com/" target="_blank" rel="noreferrer noopener nofollow">Supabase</a></li>



<li><strong>Hosting:</strong> <a href="https://railway.com?referralCode=g3FKvm" data-type="link" data-id="https://railway.com?referralCode=g3FKvm" target="_blank" rel="noreferrer noopener nofollow">Railway</a></li>
</ul>



<h3 class="wp-block-heading">Screenshots gallery</h3>


					<div
						class="wp-block-uagb-image-gallery uagb-block-480e3529     "
						style=""
					>
											<div class="spectra-image-gallery spectra-image-gallery__layout--grid spectra-image-gallery__layout--grid-col-3 spectra-image-gallery__layout--grid-col-tab-3 spectra-image-gallery__layout--grid-col-mob-2">
											<div class="spectra-image-gallery__media-wrapper" data-spectra-gallery-image-id="3757" tabindex="0">
							<div class="spectra-image-gallery__media spectra-image-gallery__media--grid">
				<picture>
					<source media="(min-width: 1024px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/stats-1024x725.png">
					<source media="(min-width: 768px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/stats-1024x725.png">
					<img decoding="async" class="spectra-image-gallery__media-thumbnail spectra-image-gallery__media-thumbnail--grid" src="https://blog.anantshri.info/wp-content/uploads/2025/12/stats-300x212.png" alt="" loading="lazy" />
				</picture>
				<div class="spectra-image-gallery__media-thumbnail-blurrer"></div>
											<div class="spectra-image-gallery__media-thumbnail-caption-wrapper spectra-image-gallery__media-thumbnail-caption-wrapper--overlay">
											<div class="spectra-image-gallery__media-thumbnail-caption spectra-image-gallery__media-thumbnail-caption--overlay">
					stats				</div>
										</div>
									</div>
						</div>
						<div class="spectra-image-gallery__media-wrapper" data-spectra-gallery-image-id="3756" tabindex="0">
							<div class="spectra-image-gallery__media spectra-image-gallery__media--grid">
				<picture>
					<source media="(min-width: 1024px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/personality-1024x891.png">
					<source media="(min-width: 768px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/personality-1024x891.png">
					<img decoding="async" class="spectra-image-gallery__media-thumbnail spectra-image-gallery__media-thumbnail--grid" src="https://blog.anantshri.info/wp-content/uploads/2025/12/personality-300x261.png" alt="" loading="lazy" />
				</picture>
				<div class="spectra-image-gallery__media-thumbnail-blurrer"></div>
											<div class="spectra-image-gallery__media-thumbnail-caption-wrapper spectra-image-gallery__media-thumbnail-caption-wrapper--overlay">
											<div class="spectra-image-gallery__media-thumbnail-caption spectra-image-gallery__media-thumbnail-caption--overlay">
					personality				</div>
										</div>
									</div>
						</div>
						<div class="spectra-image-gallery__media-wrapper" data-spectra-gallery-image-id="3754" tabindex="0">
							<div class="spectra-image-gallery__media spectra-image-gallery__media--grid">
				<picture>
					<source media="(min-width: 1024px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/rhythm-1024x795.png">
					<source media="(min-width: 768px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/rhythm-1024x795.png">
					<img decoding="async" class="spectra-image-gallery__media-thumbnail spectra-image-gallery__media-thumbnail--grid" src="https://blog.anantshri.info/wp-content/uploads/2025/12/rhythm-300x233.png" alt="" loading="lazy" />
				</picture>
				<div class="spectra-image-gallery__media-thumbnail-blurrer"></div>
											<div class="spectra-image-gallery__media-thumbnail-caption-wrapper spectra-image-gallery__media-thumbnail-caption-wrapper--overlay">
											<div class="spectra-image-gallery__media-thumbnail-caption spectra-image-gallery__media-thumbnail-caption--overlay">
					rhythm				</div>
										</div>
									</div>
						</div>
						<div class="spectra-image-gallery__media-wrapper" data-spectra-gallery-image-id="3755" tabindex="0">
							<div class="spectra-image-gallery__media spectra-image-gallery__media--grid">
				<picture>
					<source media="(min-width: 1024px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/year-in-motion-1024x700.png">
					<source media="(min-width: 768px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/year-in-motion-1024x700.png">
					<img decoding="async" class="spectra-image-gallery__media-thumbnail spectra-image-gallery__media-thumbnail--grid" src="https://blog.anantshri.info/wp-content/uploads/2025/12/year-in-motion-300x205.png" alt="" loading="lazy" />
				</picture>
				<div class="spectra-image-gallery__media-thumbnail-blurrer"></div>
											<div class="spectra-image-gallery__media-thumbnail-caption-wrapper spectra-image-gallery__media-thumbnail-caption-wrapper--overlay">
											<div class="spectra-image-gallery__media-thumbnail-caption spectra-image-gallery__media-thumbnail-caption--overlay">
					monthly stats				</div>
										</div>
									</div>
						</div>
						<div class="spectra-image-gallery__media-wrapper" data-spectra-gallery-image-id="3753" tabindex="0">
							<div class="spectra-image-gallery__media spectra-image-gallery__media--grid">
				<picture>
					<source media="(min-width: 1024px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/forecast-1024x949.png">
					<source media="(min-width: 768px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/forecast-1024x949.png">
					<img decoding="async" class="spectra-image-gallery__media-thumbnail spectra-image-gallery__media-thumbnail--grid" src="https://blog.anantshri.info/wp-content/uploads/2025/12/forecast-300x278.png" alt="" loading="lazy" />
				</picture>
				<div class="spectra-image-gallery__media-thumbnail-blurrer"></div>
											<div class="spectra-image-gallery__media-thumbnail-caption-wrapper spectra-image-gallery__media-thumbnail-caption-wrapper--overlay">
											<div class="spectra-image-gallery__media-thumbnail-caption spectra-image-gallery__media-thumbnail-caption--overlay">
					forecast				</div>
										</div>
									</div>
						</div>
										</div>
																		</div>
									


<h3 class="wp-block-heading">Credits</h3>



<ul class="wp-block-list">
<li>Built with FastAPI and hosted on Railway</li>



<li>AI insights via OpenRouter</li>



<li>Data from Readwise</li>
</ul>



<p class="wp-block-paragraph">This is a community project. Not affiliated with <a href="https://readwise.io/i/anant48" data-type="link" data-id="https://readwise.io/i/anant48" target="_blank" rel="noreferrer noopener nofollow">Readwise</a>.</p>



<h3 class="wp-block-heading">Support</h3>



<p class="wp-block-paragraph">If you find this useful:</p>



<ul class="wp-block-list">
<li>GitHub Sponsors: <a href="https://github.com/sponsors/anantshri">https://github.com/sponsors/anantshri</a></li>



<li>Buy me a coffee: <a href="https://buymeacoffee.com/anantshri">https://buymeacoffee.com/anantshri</a></li>
</ul>



<p class="wp-block-paragraph">Happy reading. Or happy highlighting. Same thing, just with more optimism.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.anantshri.info/readwise-wrapped-my-year-in-reading/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3751</post-id>	</item>
		<item>
		<title>Building Fedi Wrap: My Year in Review for the Fediverse</title>
		<link>https://blog.anantshri.info/building-fedi-wrap-my-year-in-review-for-the-fediverse/</link>
					<comments>https://blog.anantshri.info/building-fedi-wrap-my-year-in-review-for-the-fediverse/#respond</comments>
		
		<dc:creator><![CDATA[anantshri]]></dc:creator>
		<pubDate>Mon, 29 Dec 2025 09:06:46 +0000</pubDate>
				<category><![CDATA[development]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[Fediverse]]></category>
		<category><![CDATA[year-wrap]]></category>
		<guid isPermaLink="false">https://blog.anantshri.info/?p=3725</guid>

					<description><![CDATA[As we approach the end of 2025, like a trained goat, I am collecting year end reviews from every SaaS service that will hand me one. Somewhere in that pile I realized I do a fair bit of posting on the Fediverse, so off I went looking for my own wrapped. Corporate platforms have turned]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">As we approach the end of 2025, like a trained goat, I am collecting year end reviews from every SaaS service that will hand me one. Somewhere in that pile I realized I do a fair bit of posting on the Fediverse, so off I went looking for my own wrapped.</p>



<p class="wp-block-paragraph">Corporate platforms have turned “wrapped” into a feature and also a business model. I am on the Fediverse for the opposite reason, but I still wanted the fun part.</p>



<p class="wp-block-paragraph">So I built <strong>Fedi Wrap</strong>: a local first tool that generates a year in review report for Mastodon compatible Fediverse servers.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I wanted a year in review, not a JSON endurance test.</p>
</blockquote>



<p class="wp-block-paragraph">Repo: <a>https://github.com/anantshri/fedi-wrap</a></p>



<h2 class="wp-block-heading">Why I built it</h2>



<p class="wp-block-paragraph">There are already Mastodon wrapped tools, but many assume your instance exposes posts over the API without authentication.</p>



<p class="wp-block-paragraph">That breaks the moment you move beyond common Mastodon defaults. I use <strong>GoToSocial</strong>. It is Mastodon compatible, but it leans harder into privacy and security. Many setups require authentication to access timelines and statuses. Unauthenticated “wrapped” tools simply cannot see your posts.</p>



<p class="wp-block-paragraph">So the problem was simple.</p>



<p class="wp-block-paragraph">How do you generate a year in review when your instance is doing the right thing and not handing data to anonymous requests?</p>



<p class="wp-block-paragraph">Fedi Wrap is my answer: fetch with auth, analyze locally, output a single report.</p>



<h2 class="wp-block-heading">What it does</h2>



<p class="wp-block-paragraph">Fedi Wrap is a bash script that:</p>



<ul class="wp-block-list">
<li>Fetches posts for a chosen year using <code>toot</code> (so auth is handled by the CLI)</li>



<li>Runs analysis locally using <code>jq</code></li>



<li>Generates a self contained HTML report you can archive and open offline</li>
</ul>



<p class="wp-block-paragraph">The report includes:</p>



<ul class="wp-block-list">
<li>Total posts, boosts, replies</li>



<li>Monthly, weekly, hourly patterns</li>



<li>Longest posting streak</li>



<li>A simple engagement score</li>



<li>Top posts by engagement</li>



<li>Activity calendar</li>



<li>Fun labels like posting persona and chronotype</li>
</ul>



<h2 class="wp-block-heading">Optional local AI insights</h2>



<p class="wp-block-paragraph">If you want it, Fedi Wrap can use a local LLM via Ollama to generate:</p>



<ul class="wp-block-list">
<li>A narrative summary of your year</li>



<li>Recurring topics</li>



<li>Vibe and persona style descriptions</li>
</ul>



<p class="wp-block-paragraph">AI is optional. Everything runs on your machine.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I like AI more when it does not eat my data.</p>
</blockquote>



<p class="wp-block-paragraph">To keep results grounded, the AI flow is multi pass: analyze chunks first, then synthesize.</p>



<h2 class="wp-block-heading">The stack</h2>



<p class="wp-block-paragraph">Core:</p>



<ul class="wp-block-list">
<li>bash</li>



<li>jq</li>



<li>toot (for fetching)</li>



<li>curl</li>
</ul>



<p class="wp-block-paragraph">Optional:</p>



<ul class="wp-block-list">
<li>ollama</li>
</ul>



<p class="wp-block-paragraph">No Node. No containers. No build pipeline. Boring on purpose.</p>



<h2 class="wp-block-heading">Screenshots</h2>


					<div
						class="wp-block-uagb-image-gallery uagb-block-74416895     "
						style=""
					>
											<div class="spectra-image-gallery spectra-image-gallery__layout--grid spectra-image-gallery__layout--grid-col-3 spectra-image-gallery__layout--grid-col-tab-3 spectra-image-gallery__layout--grid-col-mob-2">
											<div class="spectra-image-gallery__media-wrapper" data-spectra-gallery-image-id="3733" tabindex="0">
							<div class="spectra-image-gallery__media spectra-image-gallery__media--grid">
				<picture>
					<source media="(min-width: 1024px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/hero-section-sample-1024x980.png">
					<source media="(min-width: 768px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/hero-section-sample-1024x980.png">
					<img decoding="async" class="spectra-image-gallery__media-thumbnail spectra-image-gallery__media-thumbnail--grid" src="https://blog.anantshri.info/wp-content/uploads/2025/12/hero-section-sample-300x287.png" alt="" loading="lazy" />
				</picture>
				<div class="spectra-image-gallery__media-thumbnail-blurrer"></div>
											<div class="spectra-image-gallery__media-thumbnail-caption-wrapper spectra-image-gallery__media-thumbnail-caption-wrapper--overlay">
											<div class="spectra-image-gallery__media-thumbnail-caption spectra-image-gallery__media-thumbnail-caption--overlay">
					hero section				</div>
										</div>
									</div>
						</div>
						<div class="spectra-image-gallery__media-wrapper" data-spectra-gallery-image-id="3732" tabindex="0">
							<div class="spectra-image-gallery__media spectra-image-gallery__media--grid">
				<picture>
					<source media="(min-width: 1024px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/ai-insights-sample-1024x555.png">
					<source media="(min-width: 768px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/ai-insights-sample-1024x555.png">
					<img decoding="async" class="spectra-image-gallery__media-thumbnail spectra-image-gallery__media-thumbnail--grid" src="https://blog.anantshri.info/wp-content/uploads/2025/12/ai-insights-sample-300x163.png" alt="" loading="lazy" />
				</picture>
				<div class="spectra-image-gallery__media-thumbnail-blurrer"></div>
											<div class="spectra-image-gallery__media-thumbnail-caption-wrapper spectra-image-gallery__media-thumbnail-caption-wrapper--overlay">
											<div class="spectra-image-gallery__media-thumbnail-caption spectra-image-gallery__media-thumbnail-caption--overlay">
					ai personnas				</div>
										</div>
									</div>
						</div>
						<div class="spectra-image-gallery__media-wrapper" data-spectra-gallery-image-id="3731" tabindex="0">
							<div class="spectra-image-gallery__media spectra-image-gallery__media--grid">
				<picture>
					<source media="(min-width: 1024px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/ai-stats-sample-1024x788.png">
					<source media="(min-width: 768px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/ai-stats-sample-1024x788.png">
					<img decoding="async" class="spectra-image-gallery__media-thumbnail spectra-image-gallery__media-thumbnail--grid" src="https://blog.anantshri.info/wp-content/uploads/2025/12/ai-stats-sample-300x231.png" alt="" loading="lazy" />
				</picture>
				<div class="spectra-image-gallery__media-thumbnail-blurrer"></div>
											<div class="spectra-image-gallery__media-thumbnail-caption-wrapper spectra-image-gallery__media-thumbnail-caption-wrapper--overlay">
											<div class="spectra-image-gallery__media-thumbnail-caption spectra-image-gallery__media-thumbnail-caption--overlay">
					ai facts				</div>
										</div>
									</div>
						</div>
						<div class="spectra-image-gallery__media-wrapper" data-spectra-gallery-image-id="3735" tabindex="0">
							<div class="spectra-image-gallery__media spectra-image-gallery__media--grid">
				<picture>
					<source media="(min-width: 1024px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/by-numbers-sample-1024x1013.png">
					<source media="(min-width: 768px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/by-numbers-sample-1024x1013.png">
					<img decoding="async" class="spectra-image-gallery__media-thumbnail spectra-image-gallery__media-thumbnail--grid" src="https://blog.anantshri.info/wp-content/uploads/2025/12/by-numbers-sample-300x297.png" alt="" loading="lazy" />
				</picture>
				<div class="spectra-image-gallery__media-thumbnail-blurrer"></div>
											<div class="spectra-image-gallery__media-thumbnail-caption-wrapper spectra-image-gallery__media-thumbnail-caption-wrapper--overlay">
											<div class="spectra-image-gallery__media-thumbnail-caption spectra-image-gallery__media-thumbnail-caption--overlay">
					stats				</div>
										</div>
									</div>
						</div>
						<div class="spectra-image-gallery__media-wrapper" data-spectra-gallery-image-id="3730" tabindex="0">
							<div class="spectra-image-gallery__media spectra-image-gallery__media--grid">
				<picture>
					<source media="(min-width: 1024px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/posting-stats-sample-1024x920.png">
					<source media="(min-width: 768px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/posting-stats-sample-1024x920.png">
					<img decoding="async" class="spectra-image-gallery__media-thumbnail spectra-image-gallery__media-thumbnail--grid" src="https://blog.anantshri.info/wp-content/uploads/2025/12/posting-stats-sample-300x269.png" alt="" loading="lazy" />
				</picture>
				<div class="spectra-image-gallery__media-thumbnail-blurrer"></div>
											<div class="spectra-image-gallery__media-thumbnail-caption-wrapper spectra-image-gallery__media-thumbnail-caption-wrapper--overlay">
											<div class="spectra-image-gallery__media-thumbnail-caption spectra-image-gallery__media-thumbnail-caption--overlay">
					trends				</div>
										</div>
									</div>
						</div>
						<div class="spectra-image-gallery__media-wrapper" data-spectra-gallery-image-id="3729" tabindex="0">
							<div class="spectra-image-gallery__media spectra-image-gallery__media--grid">
				<picture>
					<source media="(min-width: 1024px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/stats-sample-1024x890.png">
					<source media="(min-width: 768px)" srcset="https://blog.anantshri.info/wp-content/uploads/2025/12/stats-sample-1024x890.png">
					<img decoding="async" class="spectra-image-gallery__media-thumbnail spectra-image-gallery__media-thumbnail--grid" src="https://blog.anantshri.info/wp-content/uploads/2025/12/stats-sample-300x261.png" alt="" loading="lazy" />
				</picture>
				<div class="spectra-image-gallery__media-thumbnail-blurrer"></div>
											<div class="spectra-image-gallery__media-thumbnail-caption-wrapper spectra-image-gallery__media-thumbnail-caption-wrapper--overlay">
											<div class="spectra-image-gallery__media-thumbnail-caption spectra-image-gallery__media-thumbnail-caption--overlay">
					graphs				</div>
										</div>
									</div>
						</div>
										</div>
																		</div>
									


<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Get it here</h2>



<p class="wp-block-paragraph">Live Details : <a href="https://anantshri.github.io/fedi-wrap">https://anantshri.github.io/fedi-wrap</a></p>



<p class="wp-block-paragraph">Source Code : <a href="https://github.com/anantshri/fedi-wrap/">https://github.com/anantshri/fedi-wrap/</a></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.anantshri.info/building-fedi-wrap-my-year-in-review-for-the-fediverse/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3725</post-id>	</item>
		<item>
		<title>Not Every Nail Needs a Non-Deterministic Hammer</title>
		<link>https://blog.anantshri.info/not-every-nail-needs-a-non-deterministic-hammer/</link>
					<comments>https://blog.anantshri.info/not-every-nail-needs-a-non-deterministic-hammer/#comments</comments>
		
		<dc:creator><![CDATA[anantshri]]></dc:creator>
		<pubDate>Sat, 30 Aug 2025 18:50:29 +0000</pubDate>
				<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[thoughts]]></category>
		<guid isPermaLink="false">https://blog.anantshri.info/?p=3598</guid>

					<description><![CDATA[Determinism builds trust, non-determinism builds discovery. The art lies in knowing when the world needs certainty - and when it needs the unexpected gift of surprise.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Most of the world we live in feels deterministic. Press a button on the lift, and you expect it to stop at the right floor. Check your bank balance, and it matches down to the last paisa. Even the software we write often gives us a sense of repeatability, though the truth is less comforting. Ask anyone who has tried to get perfectly reproducible builds and they will tell you: unless you enforce strict conditions, builds are not reproducible most of the time. This is less about some mystical property of code and more about the current state of tooling and practice. Predictability feels like the default. But it isn’t.</p>



<p class="wp-block-paragraph">Underneath the surface, everything is probabilistic. Atoms jiggle, weather patterns evolve, cosmic rays flip bits. Determinism is not a natural state &#8211; it is a carefully manufactured illusion. We build redundancy, consensus, and error correction to give ourselves the comfort of order. Determinism is what lets planes fly and bridges stand. It is what makes society function without all of us collapsing into existential dread.</p>



<p class="wp-block-paragraph">From a philosophical angle, this is not far from what the second law of thermodynamics tells us: entropy, or disorder, always increases. I am using entropy here as a loose frame of reference, not a precise physics definition. If entropy is chaos, then order is the fragile exception we carve out against the tide of nature. Heroes in stories often strive to preserve order, while villains are agents of chaos. Yet if chaos is the natural flow, then the roles blur. Are heroes fighting nature itself? And are disruptors sometimes just accelerating what would happen anyway? (I reflected more on this in a short note <a href="https://social.anantshri.info/@anant/statuses/01GJ2H3MBVCEANQ71DJK32MZJX">here</a>.)</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Determinism is not the natural order, it is the illusion we laboriously construct to keep chaos at bay.</em></p>
</blockquote>



<p class="wp-block-paragraph">Yet non-determinism is not the villain of this story. Without it, we would have no evolution, no creativity, no discovery. Life itself is one giant probabilistic experiment that happened to work out. Music improvisation thrives on it, so does art, and even scientific discovery often stumbles forward through serendipity.</p>



<p class="wp-block-paragraph">If anything, our struggle is one of balance. Humans crave the stability of the predictable, but history shows that progress often comes from chance, accident, or surprise. Penicillin was discovered because of mold on a plate, not because of a well-planned experiment. The same random noise that drives mutation in biology fuels the diversity of ideas in human culture. Without randomness, we would have safety but no spark. Without order, we would have sparks but no fire to control.</p>



<p class="wp-block-paragraph">The problem is not non-determinism itself but where we choose to let it in. Randomness in a jazz performance is delightful. Randomness in open-heart surgery is terrifying. Which brings us back to the hammer: once you learn how to swing it, you are tempted to see nails everywhere. But not every problem is a nail, and not every nail needs a non-deterministic hammer.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>The question is never “which is better?” It is always “where does it belong?”</em></p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">When Non-Determinism is Valuable</h3>



<ul class="wp-block-list">
<li><strong>Exploration</strong>: Optimization algorithms, evolutionary biology, fuzz testing. Randomness helps escape local traps.</li>



<li><strong>Resilience</strong>: Chaos engineering injects failure at random to prepare systems for the unknown. Netflix’s Chaos Monkey is the classic example: it randomly shuts down production servers to force engineers to design for resilience rather than luck.</li>



<li><strong>Security &amp; Privacy</strong>: Nonces, salts, address randomization, and noise injection keep deterministic systems safer.</li>



<li><strong>Art &amp; Creativity</strong>: Procedural worlds, improvisational music, generative art &#8211; all thrive on the unexpected.</li>



<li><strong>Simulation of complex systems</strong>: Weather models, financial markets, or epidemiological spread need non-determinism to approximate reality. Monte Carlo methods, which rely on repeated random sampling, are indispensable in finance and risk modeling because determinism alone cannot capture the richness of uncertainty.</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Determinism builds trust. Non-determinism builds discovery.</em></p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">When Non-Determinism is Wasteful</h3>



<ul class="wp-block-list">
<li><strong>Critical infrastructure</strong>: A ventilator or airplane cannot decide to “experiment” today.</li>



<li><strong>Auditable systems</strong>: Regulators don’t like surprises in your bank account.</li>



<li><strong>Basic plumbing</strong>: A database that returns different answers for the same query is not creative, it’s broken.</li>



<li><strong>Excessive randomness in design</strong>: Adding noise just for the sake of it creates confusion, not resilience.</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>If all you have is dice, the world looks like a casino.</em></p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">A Contemporary Example</h3>



<p class="wp-block-paragraph">Large Language Models are just one modern embodiment of non-determinism. The same prompt might yield slightly different answers each time. To someone raised on deterministic software, this feels odd. Computers were supposed to be machines of certainty, not improvisers. Yet here we are, typing the same input and watching the machine offer alternate phrasings, examples, or directions.</p>



<p class="wp-block-paragraph">This behavior makes sense once you see them as tools for exploration rather than execution. In areas like brainstorming, research, or creative writing, the unpredictability is an advantage. It breaks you out of local traps of thought, much like a randomized search algorithm. It is the system saying, “Here is another path you might not have walked.”</p>



<p class="wp-block-paragraph">But the danger lies in misplacing this tool. Just because LLMs work well for generating ideas does not make them fit for deterministic tasks. You don’t want your compliance reports to vary from run to run. You don’t want your accounting ledger to “get creative.” The risk isn’t that the machine is bad : it’s that we are applying it in contexts where discovery is not the goal, and predictability is non-negotiable.</p>



<p class="wp-block-paragraph">Even when tuned for deterministic outputs, an LLM is not suddenly intelligent. It is simply operating with less freedom of movement. The confidence in its answers does not mean correctness &#8211; just as our own brains fill gaps with convincing but sometimes false certainty.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Not every configuration file needs creative reinterpretation. Not every compliance report benefits from variation.</em></p>
</blockquote>



<p class="wp-block-paragraph">In many ways, LLMs remind us of the larger lesson: non-determinism is a hammer worth swinging only when the problem is truly a nail.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Closing Thought</h3>



<p class="wp-block-paragraph">Non-determinism is not chaos, and determinism is not absolute truth. Both are strategies carved out of a probabilistic universe. The art of building systems, and perhaps of living itself, lies in knowing when to enforce certainty and when to allow surprise. <a href="https://github.com/Netflix/chaosmonkey" target="_blank" rel="noreferrer noopener">Chaos Monkey</a> and <a href="https://en.wikipedia.org/wiki/Monte_Carlo_method" data-type="link" data-id="https://en.wikipedia.org/wiki/Monte_Carlo_method" target="_blank" rel="noreferrer noopener">Monte Carlo methods</a> show us that randomness, when directed, can be a powerful teacher. But history also reminds us that unchecked randomness in the wrong domain leads to disaster.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Determinism without flexibility becomes stagnation. Non-determinism without boundaries becomes destruction.</em></p>
</blockquote>



<p class="wp-block-paragraph">The conclusion is simple but worth repeating: non-determinism is neither a hammer to hit every nail nor a poison to be purged. It is a tool. Like all tools, it finds greatness only in context. Our job is to master that context &#8211; to decide when the world needs certainty and when it needs the unexpected gift of surprise.</p>



<p class="wp-block-paragraph">If you’re curious about a more personal angle on this theme, <a href="https://blog.anantshri.info/what-llms-teach-me-about-my-own-brain/" data-type="post" data-id="3589" target="_blank" rel="noreferrer noopener">I’ve written separately about how LLM behavior made me reflect on the way my own brain works. </a>That piece is less about systems and more about cognition, but together they reinforce a simple truth: unpredictability isn’t an error &#8211; it’s a lens.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.anantshri.info/not-every-nail-needs-a-non-deterministic-hammer/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3598</post-id>	</item>
		<item>
		<title>Hacker Vs Adversary</title>
		<link>https://blog.anantshri.info/hacker-vs-adversary/</link>
					<comments>https://blog.anantshri.info/hacker-vs-adversary/#respond</comments>
		
		<dc:creator><![CDATA[anantshri]]></dc:creator>
		<pubDate>Fri, 29 Aug 2025 10:52:11 +0000</pubDate>
				<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[adversary]]></category>
		<category><![CDATA[hacker]]></category>
		<category><![CDATA[thoughts]]></category>
		<guid isPermaLink="false">https://blog.anantshri.info/?p=3582</guid>

					<description><![CDATA[Most say ‘think like a hacker,’ but infosec fights adversaries with goals, not curiosity. Real defense means blending hacker creativity with adversary realism.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Most of the infosec world loves to parrot the cliché: <em>“Think like a hacker.”</em><br>But let’s be honest &#8211; most don’t. Heck, most don’t even think like adversaries.</p>



<p class="wp-block-paragraph">What we usually end up with is people running tools that promise to “think like a hacker” or “stop hackers” while nobody is actually stopping to ask what either of those things mean.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Hacker ≠ Adversary</h3>



<p class="wp-block-paragraph">Hackers, in the <a href="https://en.wikipedia.org/wiki/Hacker_culture" data-type="link" data-id="https://en.wikipedia.org/wiki/Hacker_culture">original sense</a>, are people who twist a system to do something it was never designed to do. The motivation isn’t always money, fame, or chaos. Often, alot of times it’s plain curiosity.</p>



<p class="wp-block-paragraph">Adversaries, on the other hand, don’t care about curiosity. They have objectives, budgets, timelines, and reporting managers. They’re not bending systems to explore; they’re bending systems to deliver.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">“Hackers twist systems to learn. Adversaries twist systems to win.”</p>
</blockquote>



<p class="wp-block-paragraph">It’s like the difference between me wanting to power my servers with solar energy (hacker mindset) and me figuring out how to redirect solar power in an enemy region to cause a blackout (adversary role). Both involve playing with the system, but the intent is miles apart.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Hacker is a Mindset. Adversary is a Role.</h3>



<p class="wp-block-paragraph">This is the core mistake the industry keeps making. Hacker is not a job title, it’s a way of looking at the world. Adversary is a role someone plays to achieve a mission.</p>



<p class="wp-block-paragraph">A hacker <em>can</em> put on the adversary hat if they want. But not every adversary has the hacker mindset &#8211; many just follow playbooks or orders.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">“Following orders is the one thing hackers despise. Following orders is the one thing adversaries depend on.”</p>
</blockquote>



<p class="wp-block-paragraph">This is why red teams sometimes disappoint: you can staff them with highly skilled operators who simulate adversaries, but if they don’t carry the hacker mindset, their attacks never stretch beyond the playbook.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">A Personal Note</h3>



<p class="wp-block-paragraph">And let me be clear &#8211; I wasn’t throwing the “hacker” word around casually for myself either. For the first few years of my life in infosec, I didn’t feel worthy of the moniker. At one point, I won a CTF at Nullcon and got a jersey with “HACKER” printed across the back. You’d think I’d wear it everywhere, right? Nope. It sat in my closet. I hadn’t proven to myself that I deserved the word.</p>



<p class="wp-block-paragraph">Because here’s the thing:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">“Hacker is not a title you give yourself. It’s something the world eventually recognizes you for &#8211; sometimes long before you do.”</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">The Anonymous Problem</h3>



<p class="wp-block-paragraph">Groups like Anonymous or LulzSec were often labeled as “hacker collectives.” But in truth, most of their operations were adversarial campaigns &#8211; planned, targeted, disruptive. The hacker branding made for good marketing, but the Guy Fawkes mask was more cosplay than culture. Misguided people joined thinking they were part of hacker culture, yet in reality they were just extra hands running tools while someone else drove the adversarial playbook.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">“Anonymous wasn’t hacker culture. It was adversary culture wearing a hacker mask &#8211; literally.”</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Tolerance and Hijack</h3>



<p class="wp-block-paragraph">Hacker culture prided itself on openness, decentralization, and tolerance. Anyone could join.</p>



<p class="wp-block-paragraph">The problem with being endlessly tolerant is you eventually get hijacked by the intolerant. With no central figure, decentralized systems are easy to capture by central-ish entities. We’ve seen it happen repeatedly.</p>



<p class="wp-block-paragraph">But here’s the irony: this failure is also a shield. The loud imposters burn in the spotlight, while the real hackers remain in the shadows, tinkering away quietly.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">“The louder the cosplay, the deeper the shadows for real curiosity.”</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Bug Bounties, MITRE, and Reality</h3>



<p class="wp-block-paragraph">Here’s another key distinction:</p>



<ul class="wp-block-list">
<li>Hackers love idiosyncrasies. They stumble onto quirks, weird states, and strange system behaviors.</li>



<li>Adversaries couldn’t care less about quirks. They’ll phish you, bribe you, or smash their way in if needed. They care about outcomes, not elegance.</li>
</ul>



<p class="wp-block-paragraph">That’s why frameworks like <strong><a href="https://attack.mitre.org/" data-type="link" data-id="https://attack.mitre.org/" target="_blank" rel="noreferrer noopener">MITRE ATT&amp;CK</a></strong> make so much sense for defense. They catalog adversary behaviors, not hacker curiosities. Real-world defenders aren’t dealing with someone who’s tinkering for fun; they’re facing someone with a job to get done.</p>



<p class="wp-block-paragraph">And it’s also why <strong>bug bounties aren’t the same as adversary simulation.</strong> Bug bounty programs are valuable, but they are intentionally scoped around the hacker mindset of exploration. They encourage curiosity inside controlled boundaries, which is fine for safety and predictability. Adversarial linkages &#8220;chaining bugs into campaigns, mixing technical with social pressure, or stepping outside the target application&#8221; are out of scope, and for good reason. No one wants to risk a situation where employees or their families are harmed just so someone can claim a payout.</p>



<p class="wp-block-paragraph">Bug hunters may apply hacker creativity, but they are not asked to (and should not) simulate the ruthless persistence of a true adversary. That gap explains why organizations sometimes get breached even after generous bounty payouts.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">“Hackers get distracted by idiosyncrasies. Adversaries get paid to ignore them.”</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">What Infosec Really Needs</h3>



<p class="wp-block-paragraph">So what does infosec actually need? Not another poster saying “Think like a hacker.”</p>



<p class="wp-block-paragraph">What we need is both:</p>



<ul class="wp-block-list">
<li><strong>Hacker mindset</strong> for creativity, unpredictability, and system-bending insight.</li>



<li><strong>Adversary roleplay</strong> for realism, persistence, and outcome-driven attack chains.</li>
</ul>



<p class="wp-block-paragraph">You need both. One without the other is either too whimsical or too mechanical. And remember, the end goal is simple: make the system more secure against attacks than it was before. If your security bar isn’t raised, the whole effort is little more than a shenanigan.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Closing Reflection</h3>



<p class="wp-block-paragraph">Raising the bar is always a moving target &#8211; adversaries adapt, tactics evolve, and the outcome is never perfect security but relative resilience.</p>



<p class="wp-block-paragraph">The industry keeps confusing hackers and adversaries because they sometimes overlap. But the distinction matters.</p>



<p class="wp-block-paragraph">Hackers bend rules for curiosity. Adversaries bend rules for outcomes. Sometimes they’re the same person, but not always.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">“Security teams that only think like hackers prepare for curiosities. Security teams that only think like adversaries prepare for missions. Security teams that think like both might actually stand a chance.”</p>
</blockquote>



<p class="wp-block-paragraph">And at the end of the day, all of this only matters if the bar for security is raised. Perfect security is a myth, but raising the bar is about resilience &#8211; making it harder, costlier, and riskier for the next attacker than it was before. If your systems aren’t harder to break into tomorrow than they were yesterday, then everything else is just theatrics. And remember, an adversary that thinks like a hacker is the proverbial Baba Yaga  the nightmare we need to be prepared for.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">That’s the balance the industry rarely talks about. Hacker is a mindset. Adversary is a role. If we forget the difference, we end up fighting shadows and missing the real battles happening right in front of us.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.anantshri.info/hacker-vs-adversary/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3582</post-id>	</item>
		<item>
		<title>What LLMs Teach Me About My Own Brain</title>
		<link>https://blog.anantshri.info/what-llms-teach-me-about-my-own-brain/</link>
					<comments>https://blog.anantshri.info/what-llms-teach-me-about-my-own-brain/#comments</comments>
		
		<dc:creator><![CDATA[anantshri]]></dc:creator>
		<pubDate>Thu, 28 Aug 2025 05:00:32 +0000</pubDate>
				<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[thoughts]]></category>
		<guid isPermaLink="false">https://blog.anantshri.info/?p=3589</guid>

					<description><![CDATA[My thoughts on how LLM behaviour makes me rethink my own brain’s inner workings. A prediction engine as a mirror for a mind.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">It started with a casual experiment: ask a large language model something simple, and watch it hallucinate with confidence. Not once. Not occasionally. But all the time. It doesn’t selectively hallucinate; hallucination is its natural state. And somehow, that felt… familiar.</p>



<p class="wp-block-paragraph">That sent me down a rabbit hole. Not about LLMs. About me.</p>



<p class="wp-block-paragraph">Maybe these models aren’t the future of human intelligence. Maybe they’re a glimpse into its past.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">“LLMs feel like early brain prototypes, smooth on the surface, sloppy underneath, and very sure of themselves.”</p>
</blockquote>



<h3 class="wp-block-heading">Hallucinations: The Default Mode</h3>



<p class="wp-block-paragraph">Most people critique LLMs for getting facts wrong. But that assumes facts are the point. The model does not know facts. It predicts the next likely token. What we call hallucination is our label for when that prediction diverges from the world outside the prompt. In that frame, a hallucination is not a bug, it is a natural outcome of training a system to guess the next likely thing, not the next <em>true</em> thing.</p>



<p class="wp-block-paragraph">That got uncomfortably personal. Because honestly, I sometimes operate that way too. I fill in gaps all the time, with assumptions, with inferences, with memories that feel real but might just be particularly vivid guesses.</p>



<p class="wp-block-paragraph">So when I see an LLM confidently invent a fact, I do not get mad. I get introspective.</p>



<h3 class="wp-block-heading">The Brain: Better Window, Better Index</h3>



<p class="wp-block-paragraph">Let’s not get carried away. The brain is miles ahead of anything silicon-powered. But conceptually? It&#8217;s kind of doing the same thing, just with more layers of error correction, emotional regulation, and a vastly better sense of what matters <em>right now</em>.</p>



<p class="wp-block-paragraph">Think of your brain as a fancy LLM with an overclocked context window and an insanely good garbage collection routine. It doesn’t just remember things-it resurfaces them in real-time, adapts them, mutates them based on mood, bias, and lived experience.</p>



<p class="wp-block-paragraph">A recent EEG-based study compared students writing essays using no tools, traditional search engines, and ChatGPT. The results were striking: those using ChatGPT showed weaker neural connectivity, lower engagement in memory and attention centers, and an overall accumulation of what the researchers called &#8220;cognitive debt.&#8221; Essentially, the brain downshifted. The more the AI helped, the less the brain worked.</p>



<p class="wp-block-paragraph">So maybe it’s not just metaphor when we say LLMs are like primitive brains. Maybe it&#8217;s a preview of what happens when the real one gets too comfortable. I have written about compute shifts in <a href="https://blog.anantshri.info/flip-cycles-of-computing/">Flip Cycles of Computing</a>, and this feels like another one, this time inside our heads.</p>



<p class="wp-block-paragraph">An LLM needs a vector DB and some clever prompt engineering to fake that. Your brain just does it while you&#8217;re brushing your teeth.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">&#8220;The brain is just a large language model with tighter controls, deeper feedback loops, and a much sharper sense of what matters in the moment.&#8221;</p>
</blockquote>



<h3 class="wp-block-heading">Intelligence: In the Eye of the Reader</h3>



<p class="wp-block-paragraph">Here’s the bit I’m still chewing on: is what LLMs do <em>intelligence</em>?</p>



<p class="wp-block-paragraph">When a model prints something that sounds profound, is that because the model is smart? Or because we are? Are we projecting intelligence onto the output, like we do with horoscopes or motivational posters?</p>



<p class="wp-block-paragraph">It feels like LLMs give us puzzles that we solve by interpreting. Their output gets both intelligence and emotion layered onto it <em>after the fact</em>, by the reader, because we can’t help but anthropomorphize patterns that sound just a bit too human.</p>



<p class="wp-block-paragraph">Which makes me wonder: how much of my own thinking is just predicted noise that <em>I</em> later decorate with meaning? It is also why I still argue that learning to code matters in the age of AI: not to type faster, but to test assumptions, build small proofs, and keep my own context engine awake. I wrote about that in <a href="https://blog.anantshri.info/why-learning-to-code-matters-more-in-the-age-of-ai/">Why Learning to Code Matters More in the Age of AI</a>.</p>



<p class="wp-block-paragraph">At times it even makes me wonder if I am a moving model file, born with a base set of weights that get updated by life. Newer generations arrive with a different pretraining corpus, which explains why our slang splits and why each cohort sees the world with fresh shortcuts.</p>



<h3 class="wp-block-heading">Priming, Echoes, and the Yes Mode</h3>



<p class="wp-block-paragraph">There is also the echo effect. If I go in heated, I often get heat back. Prompt in, tone out. Models are trained to answer, not to sit in silence, so uncertainty still produces fluent guesses. That is the yes mode. It feels helpful, and it often is, but it also explains why hallucinations appear so confidently.</p>



<p class="wp-block-paragraph">Under the hood the model is not thinking. It is printing the next likely token. Whether that output is good or bad is something we decide after the fact. The same answer can feel profound to a novice and childish to an expert, which says more about the reader&#8217;s context than the model&#8217;s intent.</p>



<p class="wp-block-paragraph">There is also a simpler reason the output often feels intelligent. The world is patterned. Most of our days run on scripts. Give a model the right cue at the right time and it will surface the median script for that situation. It reads as intelligence because the world itself is predictable.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">&#8220;If life runs on templates, a good autocomplete will look wise.&#8221;</p>
</blockquote>



<p class="wp-block-paragraph">Garbage in, garbage out is an old line, but it fits here. The balancing act for builders is tricky. To serve the widest audience we optimize for speed, coverage, and low friction. Correctness can take a hit. I do not blame the tool. I blame my own tendency to accept a smooth answer when the rough truth needed work.</p>



<h3 class="wp-block-heading">Why Am I So Fascinated?</h3>



<p class="wp-block-paragraph">Honestly, this is the part that keeps bothering me. Why do I keep staring at LLMs like they hold the secret to the universe?</p>



<p class="wp-block-paragraph">Maybe it&#8217;s not about them at all. Maybe it&#8217;s narcissism in disguise. A weird mirror held up to my own thought process. Watching a system stumble into clarity makes me wonder how often I do the same. But with better grammar and less need for GPU time. I first captured that curiosity in <a href="https://blog.anantshri.info/my-thoughts-on-the-new-and-emerging-world-of-gpt-ai-llm/">My Thoughts on the New and Emerging World of GPT, AI, LLM</a>.</p>



<h3 class="wp-block-heading">The Push and the Cycle</h3>



<p class="wp-block-paragraph">One more tension sits in the background. Is AI everywhere because everyone needs it, or because we have already invested so much that it must be everywhere now? I have watched this cycle before, and wrote about it in <a href="https://blog.anantshri.info/flip-cycles-of-computing/">Flip Cycles of Computing</a>. Games pushed GPUs, then crypto found them, and now AI soaks them up. Tools change, demand shifts, the hardware keeps getting a new purpose.</p>



<h3 class="wp-block-heading">We&#8217;re Still Ahead. For Now.</h3>



<p class="wp-block-paragraph">Let me be clear: the human brain is still winning. LLMs don’t self-reflect. They don’t dream. They don’t wake up at 3am remembering that embarrassing thing from 2008. We have nuance, shame, imagination, and a sense of time. LLMs just have token probability tables. If you want a practical compass for what to build in yourself while using these tools, I laid out a short list in <a href="https://blog.anantshri.info/mastering-the-essential-skills-for-the-digital-age/">Mastering the Essential Skills for the Digital Age</a> and do read <a href="https://blog.anantshri.info/a-rational-survival-guide-to-vibe-coding-with-ai/" data-type="post" data-id="3519">Survival Guide to Vibe Coding with AI</a></p>



<p class="wp-block-paragraph">But here&#8217;s the twist: they may be crude, but they&#8217;re oddly familiar.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">&#8220;Maybe LLMs are just the prehistoric version of the human brain, stuck in baby mode, pattern-matching their way into what we call thought.&#8221;</p>
</blockquote>



<p class="wp-block-paragraph">And maybe, just maybe, watching them fumble around will help us understand ourselves better.</p>



<p class="wp-block-paragraph">When I argue with a model, I am not debating a mind. I am bouncing off a mirror, polished by millions of voices and reinforced patterns. It does not know me. I see myself in its structured replies. That may not be intelligence, but it is revealing.</p>



<p class="wp-block-paragraph">Or maybe I&#8217;m just hallucinating. Or maybe it&#8217;s hubris. I only see what I carry. Right now I carry LLMs, so everything looks a bit LLMish. This is a snapshot, not the final word. If something newer or more fascinating comes along, I will happily rewrite this with a better frame.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.anantshri.info/what-llms-teach-me-about-my-own-brain/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3589</post-id>	</item>
	</channel>
</rss>