<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ben Santora</title>
    <description>The latest articles on Forem by Ben Santora (@tekk74).</description>
    <link>https://forem.com/tekk74</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3825229%2F539a8c2b-d24c-4d84-b853-704333fde953.png</url>
      <title>Forem: Ben Santora</title>
      <link>https://forem.com/tekk74</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tekk74"/>
    <language>en</language>
    <item>
      <title>Learning to Contribute to FOSS Projects</title>
      <dc:creator>Ben Santora</dc:creator>
      <pubDate>Sat, 11 Apr 2026 09:53:18 +0000</pubDate>
      <link>https://forem.com/tekk74/fork-to-pull-request-the-foss-contribution-workflow-explained-2cd4</link>
      <guid>https://forem.com/tekk74/fork-to-pull-request-the-foss-contribution-workflow-explained-2cd4</guid>
      <description>&lt;p&gt;Contributing to the open source community is more important than ever in 2026. It isn’t particularly difficult, but like so much of the git ecosystem, the workflow isn't intuitive and there are a few pitfalls that can trip you up. This guide outlines a typical example of the complete process.&lt;/p&gt;




&lt;p&gt;Read CONTRIBUTING.md first. Every project has its own conventions — branch naming, commit message format, PR size expectations. Don't skip this.&lt;/p&gt;

&lt;p&gt;For your first few contributions, rather than opening an issue — find one. Browse the project's issues tab, filter by good first issue or documentation, and pick something small that's already been validated as needed. Once you're more familiar with the process, you can contribute to projects you actually use - then you can start identifying and opening your own issues. If your aim is to learn the process, keep the first fix simple. &lt;/p&gt;




&lt;h3&gt;
  
  
  The Workflow
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Fork the repo on GitHub.&lt;/strong&gt;&lt;br&gt;
This creates your own copy under your account. You'll work here, not on the upstream repo directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Clone your fork locally.&lt;/strong&gt;&lt;br&gt;
Clone it into whatever directory you want to work from — this is where all your local editing will happen.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/YOUR_USER/fossproject.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Set up your remotes.&lt;/strong&gt;&lt;br&gt;
By default, &lt;code&gt;origin&lt;/code&gt; points to your fork. Add &lt;code&gt;upstream&lt;/code&gt; so you can pull in future changes from the real project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote add upstream https://github.com/ORIGINAL_ORG/project.git
git remote &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives you two remotes: &lt;code&gt;origin&lt;/code&gt; (your fork, where you push) and &lt;code&gt;upstream&lt;/code&gt; (the real project, where you pull from). You never push to upstream directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Create a branch for your change.&lt;/strong&gt;&lt;br&gt;
A branch is an isolated workspace for your change. Think of it as a copy of the project files that's separate from the main codebase — you make your edits there without touching anything else. When you're done, the branch is what gets submitted as your PR. Create a fresh one for every contribution.&lt;/p&gt;

&lt;p&gt;First, check what branches exist and which is the base branch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The active one has an asterisk next to it. Not all projects use main as their base branch — in my most recent contribution to anomalyco/opencode, dev was used instead. Always check before you start. Get onto that branch, sync it with upstream, then create your new workspace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout dev
git pull upstream dev
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; fix/issue-18953
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Never work directly on the base branch. Each contribution gets its own fresh branch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Make your edit and commit with a conventional message.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add README.md
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"docs: fix typo in installation section"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common prefixes: &lt;code&gt;docs:&lt;/code&gt; &lt;code&gt;fix:&lt;/code&gt; &lt;code&gt;feat:&lt;/code&gt; &lt;code&gt;chore:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Push your branch to your fork.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push origin docs/fix-readme-typo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;7. Open a pull request on GitHub.&lt;/strong&gt;&lt;br&gt;
Reference your issue in the description: &lt;code&gt;Fixes #42&lt;/code&gt;. Keep the description factual and concise — what changed and why.&lt;/p&gt;




&lt;h3&gt;
  
  
  Some pitfalls
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Markdown checkbox format.&lt;/strong&gt; GitHub task lists use &lt;code&gt;- [x]&lt;/code&gt; not &lt;code&gt;- [x ]&lt;/code&gt;. This happened to me recently, while inserting the 'x' in the brackets, a trailing space was created - and that breaks the rendering. Small thing, but it displayed a 'needs compliance' warning with plans to auto-close the PR until I found it and fixed it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Format your commit messages properly.&lt;/strong&gt; Many projects use scripts that read commit messages to automatically build changelogs. A message like 'docs: correct misleading flag' description gets categorized and included correctly. 'fix issue' is likely to get skipped or produces a useless entry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch for abandoned forks with the same name.&lt;/strong&gt; Popular projects sometimes have archived or dead forks that show up in search results. Always check recent commit activity before deciding where to contribute — a PR to an abandoned repo goes nowhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't use AI-generated text in PR descriptions or commit messages.&lt;/strong&gt; Even if you used AI to analyze and understand the codebase, write your own description. Maintainers can usually spot AI-generated text and while it will probably not get rejected, it signals that you didn't really engage with the change.&lt;/p&gt;




&lt;p&gt;Remember, you don't need to be a 10x developer to make a meaningful contribution. I'm a technician, not a software dev - my coding skills are limited, but I'm competent at reading and writing documentation. So that's what I tend to contribute — README gaps, unclear config examples, outdated instructions. etc.. Working on documentation is genuinely valuable work, and welcomed by most projects - developers are often too busy with the code to focus on documentation. But once you learn to navigate the process of contributing, you can contribute with whatever skills are your strengths.  &lt;/p&gt;

&lt;p&gt;If you're not sure where to begin, just search. GitHub's issue search makes it easy to find opportunities:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good first documentation issues (general):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/search?q=label%3A%22good+first+issue%22+label%3Adocumentation&amp;amp;type=issues" rel="noopener noreferrer"&gt;https://github.com/search?q=label%3A%22good+first+issue%22+label%3Adocumentation&amp;amp;type=issues&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filtered for Linux-related projects:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/search?q=label%3A%22good+first+issue%22+label%3Adocumentation+linux&amp;amp;type=issues" rel="noopener noreferrer"&gt;https://github.com/search?q=label%3A%22good+first+issue%22+label%3Adocumentation+linux&amp;amp;type=issues&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's satisfying to start with a project you actually use and want to support. But if that's a large and complex project, start with something smaller - many solo developers welcome help and will post issues too. &lt;/p&gt;

&lt;p&gt;Let's be honest, we all use open source software daily - it's only fair to give back a little. It's also satisfying and interestingly enough, stress-free - because you can choose what you want to work on, where and when. With every passing day, hyperscalers and large proprietary AI and software companies gain more and more control over the world's hardware and software. FOSS needs our encouragement and support more than ever.  &lt;/p&gt;

&lt;p&gt;Ben Santora - April 2026&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>git</category>
      <category>beginners</category>
      <category>contributorswanted</category>
    </item>
    <item>
      <title>Two Excellent Open-Source AI Agents for Your Terminal</title>
      <dc:creator>Ben Santora</dc:creator>
      <pubDate>Fri, 10 Apr 2026 19:26:03 +0000</pubDate>
      <link>https://forem.com/tekk74/two-excellent-open-source-ai-agents-for-your-terminal-11ch</link>
      <guid>https://forem.com/tekk74/two-excellent-open-source-ai-agents-for-your-terminal-11ch</guid>
      <description>&lt;p&gt;In the fast-moving world of AI-assisted development, the spotlight often shines on the models themselves, but it's the frameworks around them — the ones that integrate, manage, and streamline workflows — that define the user's experience and workflow.&lt;/p&gt;

&lt;p&gt;The open-source contributions to CLI agents are largely eclipsed by the proprietary versions - Claude Code, CoPilot, Codex, Cursor etc.. But there are two standout FOSS terminal-based agents I've used that I feel deserve more attention: Crush from the Charmbracelet team and OpenCode from Anomalyco (formerly SST). Interestingly, both evolved from the same early Go-based project before splitting directions in 2025.&lt;/p&gt;

&lt;p&gt;Charmbracelet carried forward the Go tradition with Crush, building both the frontend and backend entirely in Go. Powered by Charm’s elegant libraries like Bubble Tea, Crush delivers a very polished terminal-native experience — no JavaScript, no TypeScript, just clean Go engineering and minimal dependencies.&lt;/p&gt;

&lt;p&gt;The Anomalyco team took the opposite path with OpenCode, rewriting the project in TypeScript and embracing a cloud-native, client/server architecture. Drawing on SST’s serverless expertise, OpenCode integrates with over 75 model providers, supports LSP, desktop apps, and scales across millions of monthly users.&lt;/p&gt;

&lt;p&gt;Charmbracelet’s world is small but passionate — around 15.000 followers, 90+ contributors, and 23K stars. Crush speaks to developers who value terminal craftsmanship and design precision.&lt;/p&gt;

&lt;p&gt;Anomalyco runs at enterprise scale. OpenCode currently shows over 140K stars, 800+ contributors, and 11,000 commits, serving over 6 million developers each month. Its rapid iteration and vast reach come from deep roots in cloud-native tooling.&lt;/p&gt;

&lt;p&gt;These frameworks prove that the experience of running the large language models is just as vital as the models themselves. While Crush offers simplicity and beauty grounded in Go, OpenCode amplifies reach and flexibility through its modern TypeScript architecture.&lt;/p&gt;

&lt;p&gt;Together, they reinforce how open-source diversity powers developer freedom. In a landscape increasingly dominated by proprietary AI platforms, tools like Crush and OpenCode ensure innovation, transparency, and community-driven growth. With AI in particular, keeping FOSS competitive and in the race is important.&lt;/p&gt;

&lt;p&gt;So, a gentle nudge . . .&lt;/p&gt;

&lt;p&gt;If you’ve ever benefited from open-source software — and we all have — consider giving back. Star a project, fix a bug, write or edit documentation, or just share your experiences with these FOSS tools. Every small act keeps the open web alive and thriving. &lt;/p&gt;

&lt;p&gt;Ben Santora - April 2026&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>cli</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
