<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged pypi</title>
<link>https://coderlegion.com/tag/pypi</link>
<description>Powered by Question2Answer</description>
<item>
<title>The evolution of Shai-Hulud-style worms</title>
<link>https://coderlegion.com/24620/the-evolution-of-shai-hulud-style-worms</link>
<description>&lt;p&gt;The software supply chain landscape changed forever in early-to-mid 2026. What began as a series of isolated credential-theft incidents quickly mutated into a highly coordinated, multi-registry, self-propagating worm campaign.&lt;/p&gt;
&lt;p&gt;By abusing trusted relationships, hijacking CI workflows, poisoning build caches, and even embedding execution scripts inside compiled native binaries, the threat actors behind this campaign (tracked as TeamPCP) bypassed traditional static scanner defences.&lt;/p&gt;
&lt;p&gt;As of the time of writing, this is a somewhat complete, chronological teardown of the three distinct waves of this campaign: Shai-Hulud, Hades, and Miasma.&lt;/p&gt;
&lt;h3 id=&quot;shai-hulud-mini-shai-hulud-and-similar-worms&quot;&gt;Shai-Hulud, Mini Shai-Hulud and similar worms&lt;/h3&gt;
&lt;p&gt;The Shai-Hulud worm lineage first surfaced in late 2025 as a direct credential stealer targeting the npm ecosystem. However, on May 11th, 2026, a highly automated, modernised variant called Mini Shai-Hulud struck with vastly expanded scope. While it heavily impacted npm, compromising more than 170 packages across the TanStack, Mistral AI, UiPath, and OpenSearch ecosystems, the worm simultaneously breached the broader software supply chain, orchestrating coordinated attacks against PyPI, RubyGems, Docker Hub, and even malicious extensions within VS Code.&lt;/p&gt;
&lt;p&gt;Unlike the earliest waves of Shai-Hulud that relied specifically on stolen static developer credentials, Mini Shai-Hulud (believed to have been created by a different group to TeamPCP), gained entry to these diverse environments via entirely new approaches, like pull request workflow misconfigurations in GitHub Actions (as seen in the TanStack compromise).&lt;/p&gt;
&lt;p&gt;The basic workflow looked like this. An attacker submitted a pull request from a fork. This triggers a workflow that grants write access to the base repository's cache. The attacker proceeds to poison the cache with malicious payloads. Hours later, a legitimate maintainer merges a commit, triggering the standard release workflow. And this all concludes with the release run pulling the poisoned cache and executing the malicious payload invisibly.&lt;/p&gt;
&lt;p&gt;Rather than exposing static tokens, the worm scraped live tokens directly from the GitHub Actions runner’s active memory (the &lt;code&gt;Runner.Worker&lt;/code&gt; process via &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/mem&lt;/code&gt;). Depending on the target ecosystem, it then exchanged these temporary workflow credentials for registry-specific publish tokens, using OIDC token exchange endpoints for npm and PyPI, or harvesting raw API keys for RubyGems and container registries like Docker Hub.&lt;/p&gt;
&lt;p&gt;This allowed the published packages, container images, and extensions to carry valid SLSA Build track provenance signatures. To defenders, the updates appeared completely legitimate and officially attested across all affected registries. It’s the equivalent of deepfakes for the software supply chain.&lt;/p&gt;
&lt;p&gt;Perhaps the most malicious aspect of this multi-registry wave was its defence mechanism. Once inside a developer's local machine or build server (whether pulled via a Python pip install, a Ruby gem, an npm package, or a VS Code extension) the payload established a background daemon named &lt;code&gt;gh-token-monitor&lt;/code&gt;. This daemon monitored whether its stolen tokens had been rotated or revoked, acting as a dead man’s switch. If a defender revoked the token, the daemon immediately triggered a local script that executed &lt;code&gt;rm -rf ~/&lt;/code&gt; and &lt;code&gt;rm -rf ~/Documents&lt;/code&gt;, wiping the victim's entire home directory to eliminate forensic traces and punish the developer.&lt;/p&gt;
&lt;h3 id=&quot;miasma&quot;&gt;Miasma&lt;/h3&gt;
&lt;p&gt;Discovered on June 4th, 2026, Miasma represents the third evolution of the Shai-Hulud family of worm attacks, compromising hundreds of npm components (including packages within the &lt;code&gt;@redhat-cloud-services&lt;/code&gt; and &lt;code&gt;@asyncapi&lt;/code&gt; namespaces).&lt;/p&gt;
&lt;p&gt;In this workflow, a simple npm install forces a node-gyp rebuild which executes a binding.gyp command that drops the Miasma payload. Again, the tactics and techniques of this Shai-Hulud worm have changed multiple times so far this year. Most security scanners and manual reviewers focus closely on scripts blocks in &lt;code&gt;package.json&lt;/code&gt; (watching for &lt;code&gt;preinstall&lt;/code&gt; or &lt;code&gt;postinstall&lt;/code&gt; triggers).&lt;/p&gt;
&lt;p&gt;Miasma bypassed this completely by abusing &lt;code&gt;binding.gyp&lt;/code&gt;. The &lt;code&gt;binding.gyp&lt;/code&gt;, for context, is a legitimate config file used to compile native C++ Node.js add-ons. When a package containing this file is installed, the npm client automatically spawns node-gyp rebuild. The attackers embedded direct command execution wrappers inside the &lt;code&gt;binding.gyp&lt;/code&gt; target configs. The system executes the malicious payload during compilation, completely avoiding the need for suspicious &lt;code&gt;package.json&lt;/code&gt; lifecycle scripts.&lt;/p&gt;
&lt;p&gt;Miasma focused heavily on capturing cloud identities instead of static keys, implementing collectors specifically designed to steal active GCP and Azure SSO credentials. Furthermore, if the infected CI container had access to the host's Docker socket (&lt;code&gt;/var/run/docker.sock&lt;/code&gt;), the malware would’ve performed a Docker escape. It identifies and terminates security monitoring containers (such as Step Security’s &lt;code&gt;harden-runner&lt;/code&gt;), creating a privileged Alpine container to write passwordless sudo access to the host's &lt;code&gt;/etc/sudoers.d&lt;/code&gt;, and altered local DNS resolution to block telemetry reporting domains.&lt;/p&gt;
&lt;h3 id=&quot;hades&quot;&gt;Hades&lt;/h3&gt;
&lt;p&gt;Discovered on June 8th, 2026, straight after the Miasma variant, the campaign expanded to the Python ecosystem, targeting critical academic genomics and phenotype analysis packages on PyPI (&lt;code&gt;ensmallen&lt;/code&gt;, &lt;code&gt;embiggen&lt;/code&gt;, &lt;code&gt;pyphetools&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;In this attack, a simple Python Import loads a .so extension which executes embedded javascript. The embedded javascript code executes a final Bun payload which exfiltrates to a GitHub endpoint.&lt;/p&gt;
&lt;p&gt;In a major evasion upgrade, the attackers did not modify any Python source files. Instead, they embedded the malicious JavaScript loader inside the compiled Rust/C++ binary extension (&lt;code&gt;.abi3.so&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;When a researcher imports the package via Python (&lt;code&gt;import ensmallen&lt;/code&gt;), it triggers &lt;code&gt;dlopen()&lt;/code&gt; on the trojanised &lt;code&gt;.so&lt;/code&gt; file. The shared object discreetly initialises and runs an embedded JavaScript engine to execute the payload. This makes the new attack completely invisible to code-reviewers looking at Python source files.&lt;/p&gt;
&lt;p&gt;The payload's primary file, &lt;code&gt;_index.js&lt;/code&gt;, contains a massive block of comment text representing a fake LLM jailbreak prompt. The decoy simulated classified briefings, asking for technical steps on weaponising biological agents and designing nuclear devices. This was a deliberate attempt to pollute static analysers and AI-assisted tooling, causing them to choke, flag false positives on safety boundaries, or even worse, misclassify the file as a prompt-injection experiment rather than a credential-stealing worm.&lt;/p&gt;
&lt;p&gt;Instead of a standard server, the Hades variant registered dozens of GitHub repositories using the compromise-controlled user account &lt;code&gt;felixEvora&lt;/code&gt;. The repositories used underworld-themed naming conventions (like &lt;code&gt;lethean-tartarus-61322&lt;/code&gt; and &lt;code&gt;abyssal-acheron-97481&lt;/code&gt;) and were described as &lt;strong&gt;Hades – The End for the Damned&lt;/strong&gt;. The exfiltrated data was stored in an encrypted envelope format, signed with GPG keys.&lt;/p&gt;
&lt;h3 id=&quot;keyv-and-cachable-packages-compromised&quot;&gt;keyv and cachable packages compromised&lt;/h3&gt;
&lt;p&gt;In August 2026, the open-sourced Mini Shai-Hulud codebase was weaponised in one of the most widespread multi-registry campaigns to date. The outbreak began with the compromise of npm maintainer &lt;strong&gt;Jared Wray&lt;/strong&gt;'s account. This was the primary developer behind popular, heavily downloaded packages like keyv and cachable.&lt;/p&gt;
&lt;p&gt;From this single entry point, the worm exponentially expanded into over 444 packages across 2,000+ published releases, hit 100 packages in the ServiceTitan ecosystem alone, and aggressively turned every infected machine into an automated propagation node.&lt;/p&gt;
&lt;p&gt;The execution chain relies on the preinstall hook inside the package.json (addressed in npm v.12) to trigger a setup.mjs dropper. To evade standard JavaScript static analysis tuned for &lt;code&gt;Node.js&lt;/code&gt; patterns, the &lt;code&gt;setup.mjs&lt;/code&gt; file detected the host architecture, downloaded a bundled &lt;code&gt;Bun 1.3.13&lt;/code&gt; runtime, and proceeded to execute a massive, heavily obfuscated payload named &lt;code&gt;math_init.js&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Rather than stopping at passive credential dumping, this variant actively probed and harvested deeper infrastructure credentials: It actively queried AWS IMDSv2 and ECS endpoints, enumerated AWS SecretsManager paths, read mounted Kubernetes ServiceAccount tokens, and extracted HashiCorp Vault secrets across KV v1 &amp;amp; v2 mounts. It even hunted local crypto wallets like bitcoin wallet files. It was observed that exfiltration calls were routed to a dynamic domain endpoint. Crucially, if the server returned an execute payload in its JSON response, the worm immediately executed it using eval, giving the threat actors live remote code execution on infected dev machines and CI runners. Finally, if the primary C2 server failed, the worm fell back to using stolen GitHub tokens to automatically create public GitHub repos containing base64-encoded stolen data, tagging the repo descriptions with a distinctive campaign marker. This time &lt;strong&gt;Shai-Hulud: Here We Go Again&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;To ensure propagation, the worm scraped npm creds or even exchanged GitHub Actions OIDC tokens to auto-publish patch updates of packages the maintainer controlled. It inserted &lt;code&gt;@opensearch/setup&lt;/code&gt; as an optional dependency, allowing the payload to silently cascade into downstream installs without causing build failures. Furthermore, it even expanded on the infection vectors directly inside dev workflows by writing malicious GitHub Actions workflows disguised with the name &quot;&lt;strong&gt;Run Copilot&lt;/strong&gt;&quot;, as well as altering AI-related dev tooling via poisoned &lt;code&gt;.claude&lt;/code&gt; and &lt;code&gt;.vscode&lt;/code&gt; config files.&lt;/p&gt;
&lt;h3 id=&quot;shai-hulud-style-worms-will-continue-to-change-shape&quot;&gt;Shai-Hulud-style worms will continue to change shape&lt;/h3&gt;
&lt;p&gt;The open-sourcing or leaking of a complex piece of malware like the Shai-Hulud worm typically triggers a significant shift in the threat landscape. When a sophisticated framework (originally tightly controlled by an advanced group like TeamPCP) becomes publicly accessible, it lowers the barrier to entry for a much wider, more disorganised pool of actors. Independent operators, smaller cybercriminal syndicates, and even security researchers looking to understand its mechanics can dissect the original codebase. This democratisation of advanced tech means that features previously requiring high-level engineering, such as automated supply-chain propagation or complex credential harvesting, become plug-and-play modules for anyone with basic development skills.&lt;/p&gt;
&lt;p&gt;Without a centralised command structure like TeamPCP directing its deployment, the evolution of Shai-Hulud has naturally fragmented into highly specialised or experimental variants (such as &lt;code&gt;IronWorm&lt;/code&gt;). Newer threat actors are combining Shai-Hulud’s core self-propagating mechanisms with different payloads or evasion techniques tailored to their specific objectives. For instance, some variants strip away the heavier components to create lightweight stealth tools, while others swap out the exfiltration methods to target different developer ecosystems beyond npm or GitHub, such as PyPI and Cargo. This fragmentation complicates defense strategies, as defenders can no longer rely on a single set of behavioural signatures or specific infrastructure indicators associated with the original group.&lt;/p&gt;
&lt;p&gt;Furthermore, this post-TeamPCP era accelerated the timeline of dual-use engineering, where threat actors repurpose and optimise techniques from Shai-Hulud in unexpected ways (as seen in the &lt;strong&gt;Suno breach&lt;/strong&gt;). Independent devs often modify the codebase to patch flaws left by the original authors (such as fixing loud fallback routines or refining how the worm handles OIDC token exchanges). Because these new variants are built and deployed by completely unrelated clusters of users, the attribution of attacks becomes incredibly muddy. The signature architecture of Shai-Hulud is no longer a reliable indicator of who is attacking, but rather a reflection of a shared, open-source repository of commodity supply-chain threats. This is glaringly the case with alleged supply chain competitions organised by BreachForums.&lt;/p&gt;
&lt;h3 id=&quot;quick-recap-of-what-you-ve-read&quot;&gt;Quick recap of what you’ve read&lt;/h3&gt;
&lt;p&gt;If the evolution of Shai-Hulud proves anything, it's that attackers are exceptionally creative and relying purely on reactive remediation is a losing strategy. When malware can pass SLSA attestations, bypass package.json inspection via native builds, and hide inside compiled binaries, you simply cannot predict every vector. It only takes one compromised token to trigger a massive downstream disaster. While rapid incident response remains essential, putting heavy effort into proactive preventions, such as universal package cooldown policies and strict pipeline boundaries is the only way to neutralise these threats before they execute. Stopping the attack at the gate will always be easier than cleaning up the damage after a worm gets through.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/24620/the-evolution-of-shai-hulud-style-worms</guid>
<pubDate>Fri, 14 Aug 2026 08:32:08 +0000</pubDate>
</item>
<item>
<title>LibKill: Scan Your Machine for Compromised npm, pip, and Bun Packages</title>
<link>https://coderlegion.com/17708/libkill-scan-your-machine-for-compromised-npm-pip-and-bun-packages</link>
<description>&lt;p&gt;Over the last few weeks, supply chain security has once again become a very real problem for developers.&lt;/p&gt;
&lt;p&gt;We keep seeing the same attack pattern:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-txt&quot;&gt;CI/CD token stolen
→ malicious package version published
→ developers install or update dependencies
→ compromised code lands on real machines
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And the worst part is simple:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You may already have one of those compromised packages on your machine without knowing it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That is why I built &lt;strong&gt;LibKill&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;what-is-libkill-&quot;&gt;What is LibKill?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;LibKill&lt;/strong&gt; is an open-source supply chain security scanner.&lt;/p&gt;
&lt;p&gt;It checks your local development environment against a database of known compromised package artifacts.&lt;/p&gt;
&lt;p&gt;Currently, it scans:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;npm global packages&lt;/li&gt;
&lt;li&gt;pip packages&lt;/li&gt;
&lt;li&gt;Bun cache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then it cross-references what it finds against &lt;strong&gt;2,672+ known compromised package artifacts&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If something suspicious is detected, LibKill can help you remove it interactively.&lt;/p&gt;
&lt;h3 id=&quot;why-i-built-it&quot;&gt;Why I built it&lt;/h3&gt;
&lt;p&gt;Most developers hear about compromised packages after the damage is already done.&lt;/p&gt;
&lt;p&gt;A package gets reported.&lt;br&gt;
A malicious version is removed.&lt;br&gt;
A GitHub advisory appears.&lt;br&gt;
A security company publishes an analysis.&lt;/p&gt;
&lt;p&gt;But then comes the real question:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Is any of this already on my machine?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That question should be easy to answer.&lt;/p&gt;
&lt;p&gt;LibKill is my attempt to make that check fast, local, and simple.&lt;/p&gt;
&lt;h3 id=&quot;features&quot;&gt;Features&lt;/h3&gt;
&lt;p&gt;LibKill currently supports:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scanning npm global packages&lt;/li&gt;
&lt;li&gt;Scanning installed pip packages&lt;/li&gt;
&lt;li&gt;Scanning Bun cache&lt;/li&gt;
&lt;li&gt;Cross-checking against known compromised artifacts&lt;/li&gt;
&lt;li&gt;Interactive removal when threats are found&lt;/li&gt;
&lt;li&gt;Background daemon mode&lt;/li&gt;
&lt;li&gt;Desktop notifications&lt;/li&gt;
&lt;li&gt;macOS, Linux, and Windows support&lt;/li&gt;
&lt;li&gt;Single binary&lt;/li&gt;
&lt;li&gt;Zero runtime dependencies&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is written in Go and distributed as a small standalone binary.&lt;/p&gt;
&lt;h3 id=&quot;installation&quot;&gt;Installation&lt;/h3&gt;
&lt;p&gt;You can install it with one command:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -fsSL https://raw.githubusercontent.com/firfircelik/libkill/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or build it manually:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/firfircelik/libkill.git
cd libkill
make install
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;example-usage&quot;&gt;Example usage&lt;/h3&gt;
&lt;p&gt;After installation, run:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;libkill scan
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To start background monitoring:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;libkill daemon
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If compromised artifacts are found, LibKill will show the results and offer interactive cleanup options.&lt;/p&gt;
&lt;h3 id=&quot;threat-coverage&quot;&gt;Threat coverage&lt;/h3&gt;
&lt;p&gt;LibKill currently covers known compromised artifacts related to campaigns and threat clusters such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mini Shai-Hulud&lt;/li&gt;
&lt;li&gt;Contagious Interview&lt;/li&gt;
&lt;li&gt;StegaBin&lt;/li&gt;
&lt;li&gt;SANDWORM_MODE&lt;/li&gt;
&lt;li&gt;CanisterWorm&lt;/li&gt;
&lt;li&gt;W4SP&lt;/li&gt;
&lt;li&gt;TeamPCP&lt;/li&gt;
&lt;li&gt;and many others&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The threat database is built from public security sources including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Socket.dev&lt;/li&gt;
&lt;li&gt;GitHub Advisory Database&lt;/li&gt;
&lt;li&gt;OSV.dev&lt;/li&gt;
&lt;li&gt;Public security research&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;why-local-scanning-matters&quot;&gt;Why local scanning matters&lt;/h3&gt;
&lt;p&gt;A lot of supply chain security tools focus on repositories, lockfiles, or CI pipelines.&lt;/p&gt;
&lt;p&gt;That is useful, but it does not fully answer what is already installed locally.&lt;/p&gt;
&lt;p&gt;Developers often install tools globally.&lt;/p&gt;
&lt;p&gt;They test packages.&lt;/p&gt;
&lt;p&gt;They use temporary scripts.&lt;/p&gt;
&lt;p&gt;They work across multiple languages and package managers.&lt;/p&gt;
&lt;p&gt;They forget what was installed weeks ago.&lt;/p&gt;
&lt;p&gt;A compromised package does not need to be in your current production repository to be a problem.&lt;/p&gt;
&lt;p&gt;It may already exist somewhere in your local environment.&lt;/p&gt;
&lt;h3 id=&quot;project-details&quot;&gt;Project details&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Language: Go&lt;/li&gt;
&lt;li&gt;License: MIT&lt;/li&gt;
&lt;li&gt;Binary size: around 14 MB&lt;/li&gt;
&lt;li&gt;Dependencies: zero runtime dependencies&lt;/li&gt;
&lt;li&gt;Platforms: macOS, Linux, Windows&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GitHub:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-txt&quot;&gt;https://github.com/firfircelik/libkill
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;final-note&quot;&gt;Final note&lt;/h3&gt;
&lt;p&gt;LibKill is still evolving.&lt;/p&gt;
&lt;p&gt;My goal is to make it a practical local security tool for developers who work with open-source packages every day.&lt;/p&gt;
&lt;p&gt;If you work with npm, Python, Bun, or modern JavaScript tooling, you should not have to guess whether a known compromised artifact exists on your machine.&lt;/p&gt;
&lt;p&gt;You should be able to check it quickly.&lt;/p&gt;
&lt;p&gt;That is what LibKill is for.&lt;/p&gt;
&lt;p&gt;Feedback, issues, and contributions are welcome.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -fsSL https://raw.githubusercontent.com/firfircelik/libkill/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Discussions</category>
<guid isPermaLink="true">https://coderlegion.com/17708/libkill-scan-your-machine-for-compromised-npm-pip-and-bun-packages</guid>
<pubDate>Wed, 13 May 2026 11:02:12 +0000</pubDate>
</item>
<item>
<title>Just Launched: My New Project is Live</title>
<link>https://coderlegion.com/4505/just-launched-my-new-project-is-live</link>
<description>&lt;p&gt;Hey everyone! &lt;/p&gt;
&lt;p&gt;Let’s connect!&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://kamalnaths.my.canva.site/&quot;&gt;Portfolio Website&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/KamalnathS1719&quot;&gt;GitHub&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://huggingface.co/KamalnathS1719&quot;&gt;Hugging.Face-TamilAI-ChatBot&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.linkedin.com/in/kamalnath-s-299304365?utm_source=share&amp;amp;utm_campaign=share_via&amp;amp;utm_content=profile&amp;amp;utm_medium=android_app&quot;&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/kamalnath_s&quot;&gt;Dev.To/Tamil-Lang&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://pypi.org/project/tamil-lang/&quot;&gt;PyPi Python Tamil language&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After weeks of learning, experimenting, and late-night debugging, I'm excited to finally share my latest project with you all:&lt;/p&gt;
&lt;p&gt; TamilLang – A Programming Language in Tamil &lt;/p&gt;
&lt;p&gt;A beginner-friendly, experimental language that brings the logic of Python with the power of native Tamil syntax!&lt;/p&gt;
&lt;p&gt;️ Built With:&lt;br&gt;
– Python&lt;br&gt;
– Unicode parsing&lt;br&gt;
– CLI tool design&lt;br&gt;
– setuptools + PyPI&lt;/p&gt;
&lt;p&gt;✨ Why I Built It:&lt;br&gt;
Many beginners fear coding because of language barriers. TamilLang helps break that barrier by letting you code in your native language. Logic has no language — and this proves it!&lt;/p&gt;
&lt;p&gt; Available on PyPI:&lt;/p&gt;
&lt;p&gt;pip install tamil-lang&lt;/p&gt;
&lt;p&gt; Project Link: &lt;a rel=&quot;nofollow&quot; href=&quot;https://pypi.org/project/tamil-lang/&quot;&gt;https://pypi.org/project/tamil-lang/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; Blog soon on: dev.to/kamalnaths&lt;br&gt;
 I'd love your feedback! Feel free to test it, break it, or contribute. Let’s make tech more accessible, one line of code at a time.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/4505/just-launched-my-new-project-is-live</guid>
<pubDate>Fri, 08 Aug 2025 08:09:08 +0000</pubDate>
</item>
<item>
<title> My AI Learning Journey: From .NET Developer to AI Enthusiast</title>
<link>https://coderlegion.com/4508/my-ai-learning-journey-from-net-developer-to-ai-enthusiast</link>
<description>&lt;p&gt;Hello CoderLegion Community! &lt;/p&gt;
&lt;p&gt;Let’s connect!&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://kamalnaths.my.canva.site/&quot;&gt;Portfolio Website&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/KamalnathS1719&quot;&gt;GitHub&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://huggingface.co/KamalnathS1719&quot;&gt;Hugging.Face-TamilAI-ChatBot&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.linkedin.com/in/kamalnath-s-299304365?utm_source=share&amp;amp;utm_campaign=share_via&amp;amp;utm_content=profile&amp;amp;utm_medium=android_app&quot;&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/kamalnath_s&quot;&gt;Dev.To/Tamil-Lang&lt;/a&gt;&lt;br&gt;
 &lt;a rel=&quot;nofollow&quot; href=&quot;https://pypi.org/project/tamil-lang/&quot;&gt;PyPi Python Tamil language&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’m Kamalnath S, a software engineer with 2 years of .NET development experience (ASP.NET Core, C#, SQL) and a deep interest in Artificial Intelligence.&lt;/p&gt;
&lt;p&gt;After a short health-related break in my career, I made a decision — instead of waiting for the “perfect” course or mentor, I started self-learning AI and Python through free online resources like YouTube, documentation, and open-source projects.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt; What I’ve Learned So Far&lt;/p&gt;
&lt;p&gt;Python fundamentals and object-oriented programming&lt;/p&gt;
&lt;p&gt;AI basics: NLP, machine learning models, and data preprocessing&lt;/p&gt;
&lt;p&gt;Using Hugging Face and Gradio to build interactive AI tools&lt;/p&gt;
&lt;p&gt;Experimenting with AI chatbots (including a Tamil AI chatbot idea)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt; Projects Along the Way&lt;/p&gt;
&lt;p&gt;TamilLang – A Tamil-based programming language (PyPI)&lt;/p&gt;
&lt;p&gt;Student Score Predictor – Simple ML model to predict exam scores&lt;/p&gt;
&lt;p&gt;Small Python scripts to automate repetitive tasks&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt; My Learning Approach&lt;/p&gt;
&lt;p&gt;Free Resources – YouTube tutorials, official docs, GitHub projects&lt;/p&gt;
&lt;p&gt;Hands-on Practice – Build small projects immediately after learning a concept&lt;/p&gt;
&lt;p&gt;Community Engagement – Platforms like CoderLegion, dev.to, GitHub to share and get feedback&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt; Why I’m Sharing This&lt;/p&gt;
&lt;p&gt;I believe in learning in public — sharing not just successes, but also struggles.&lt;br&gt;
If my journey inspires even one developer to start learning AI without fear or expensive courses, it’s worth it.&lt;/p&gt;
&lt;p&gt;I’d love to hear your AI learning stories, tips, and project ideas. Drop a comment or message me anytime! &lt;/p&gt;
</description>
<category>Java</category>
<guid isPermaLink="true">https://coderlegion.com/4508/my-ai-learning-journey-from-net-developer-to-ai-enthusiast</guid>
<pubDate>Fri, 08 Aug 2025 08:08:19 +0000</pubDate>
</item>
<item>
<title>AMEN CLI</title>
<link>https://coderlegion.com/3171/amen-cli</link>
<description>&lt;p&gt;Are you a Python developer tired of the boilerplate when starting a new web project? Do you admire the elegant development experience offered by tools like Laravel's Artisan or Composer? Then look no further than AMEN CLI!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is AMEN CLI?&lt;/strong&gt;&lt;br&gt;
AMEN CLI is a command-line tool designed to streamline the creation of Python web applications. Inspired by the best features of Laravel and Composer, AMEN CLI provides a simple, intuitive way to scaffold new projects with a consistent, well-structured architecture.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Interactive Project Setup:&lt;/strong&gt; AMEN CLI guides you through the project creation process with interactive prompts, making it easy to choose your framework, application type, and project name.&lt;br&gt;
&lt;strong&gt;Multiple Framework Support:&lt;/strong&gt; Whether you prefer the lightweight simplicity of Flask or the modern speed of FastAPI, AMEN CLI has you covered. Support for Bottle and Pyramid is also in the works!&lt;br&gt;
&lt;strong&gt;Web App and API Templates&lt;/strong&gt;: Create both traditional web applications and RESTful APIs with ease, thanks to AMEN CLI's flexible template system.&lt;br&gt;
&lt;strong&gt;Modular Project Structure:&lt;/strong&gt; AMEN CLI generates projects with a clean, modular structure, making it easy to organize your code and maintain your application over time.&lt;br&gt;
&lt;strong&gt;Automatic Virtual Environment Setup:&lt;/strong&gt; Say goodbye to manual virtual environment creation! AMEN CLI automatically sets up a virtual environment for your project, ensuring that your dependencies are isolated and managed correctly.&lt;br&gt;
&lt;strong&gt;Dependency Management:&lt;/strong&gt; AMEN CLI generates a requirements.txt file and installs the necessary packages for your chosen framework, saving you time and effort.&lt;br&gt;
&lt;strong&gt;JWT Authentication:&lt;/strong&gt; Secure your routes with ease using AMEN CLI's built-in JWT (JSON Web Token) authentication.&lt;br&gt;
&lt;strong&gt;Configuration Management:&lt;/strong&gt; Easily manage your project's configuration settings with the amen config command, which opens the .env file in a simple text editor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Create a New Project:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Follow the Interactive Prompts:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Select a framework (Flask, FastAPI, etc.)&lt;/li&gt;
&lt;li&gt;Choose an application type(webapp or api)&lt;/li&gt;
&lt;li&gt;Name your project&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Run Your Application:&lt;/strong&gt;&lt;br&gt;
 &lt;code&gt;amen run &amp;lt;app-name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Additional Commands&lt;br&gt;
AMEN CLI provides several additional commands to help you manage your project:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;amen run :&lt;/strong&gt; Starts the development server for your application.&lt;br&gt;
&lt;strong&gt;amen test :&lt;/strong&gt; Runs the test suite for your application.&lt;br&gt;
&lt;strong&gt;amen check-update:&lt;/strong&gt; Checks for updates to the AMEN CLI tool itself.&lt;br&gt;
&lt;strong&gt;amen config :&lt;/strong&gt; Manages the configuration settings for your application.&lt;/p&gt;
</description>
<category>AI &amp; Machine Learning</category>
<guid isPermaLink="true">https://coderlegion.com/3171/amen-cli</guid>
<pubDate>Tue, 27 May 2025 21:12:35 +0000</pubDate>
</item>
</channel>
</rss>