How to Build a Claude Code Plugin for Your Whole Engineering Team

AI & Agents9 min read
L
Lucas RegaladoSsr. Software Developer

How One Engineer's AI Agents Became the Whole Team's Operating System

The first version of the operating system was a zip file in Slack.

On a Wednesday in September I posted it in the engineering channel of a US auto-finance lender, the client I've spent this year with. "Here's the team that helps me with Claude. Adapt it to whatever works for you. In Uruguay people call me Pepe, so my helpers are the Pepitos." Four subagents, two workflows, an install script. Unzip it, open Claude Code inside the folder, say "install this".

The next morning the client's head of engineering asked for a demo at that afternoon's refinement. By five o'clock he had created a repository in the company's GitHub, drawn a chili with code goggles for the README, and written: "Congratulations on your very own repo. Please push your code and let's use this to grow."

Five weeks later that repo is a plugin any engineer there can install in a few minutes: seven subagents, four workflows, the team's rules, a shared knowledge base about their systems, and a status line that shows how much of your Claude plan you've burned. It has a version number, a test suite and twenty-one pull requests of history. I'll call it {client}-os here, because the client stays anonymous and because that is exactly what it is: the operating system Streaver runs on, planted inside a client.

Part one was the morning routine. Part two was the Pepitos. This is part three: what happens when the agents stop being yours.

Pepito, a red chili wearing code goggles, the mascot the client's head of engineering drew the day he created the repositoryPepito got a face the day the repo was born, before I had pushed a single line. The team laughed. At home, my daughter laughs at the name itself: she knows they call me Pepe.

What is a team operating system for AI agents?

It is a Claude Code plugin in a versioned repository that installs the same agents, rules, workflows and knowledge on every engineer's machine, and updates all of them with a git pull. Nobody configures Claude by hand. The team configures it once, in code review, and every machine inherits the decision.

The idea isn't mine. Streaver runs on Streaver OS: the company as a repository, synced to every laptop, with identity enforced at the root, knowledge in one source of truth and one plugin per client engagement. I had been working inside it for months. So when the client asked me to share the Pepitos, the obvious move was the one Streaver had already made on itself, one level down: a plugin that lives in the client's own GitHub, owned by the client, that any of their engineers can install, and that I happen to maintain.

JulyA document and a schedule. The morning routine runs at 08:00.AugustOut of credits by 11 AM. The Pepitos arrive: cheap subagents and a knowledge folder.Sep 9A zip in Slack: "Adapt it to whatever works for you."Sep 10Demo at refinement. The client creates the repo, and a chili.Sep 17The plugin is pushed at 23:57. Phases 1 and 2 open as pull requests.Sep 29Merged after seven review rounds. Announced to the team.Oct 1First Linux install fails. Fixed from a Slack thread the same afternoon: 0.4.3.Oct 2 to 16Model guide, infrastructure gate, data skill, status line, Snyk. 0.9.0.From a zip in Slack to version 0.9.0 in five weeks. The dates are real.

From a personal setup to a team Claude Code plugin

Three things changed, and none of them were the agents' prompts.

Everything personal came out. My agents knew my paths, my client's name, my ticket format, my Jira status names. Each became a setting the installer asks for once, and CI got a hygiene check that fails the build if a personal path, a person's name or anything shaped like a secret lands in the repo. The check exists because I didn't trust myself to remember.

Knowledge split into two layers. What an engineer learns about a repo, how to run it, which CI checks matter, the gotcha that costs an afternoon, lives in a shared bundle inside the plugin, updated by pull request. What the assistant learns about you, handoffs for interrupted tickets, your daily file, your own gotchas, lives in a personal folder on your machine: its own git repo, with a secret scanner on every commit, never pushed to the shared one. The librarian from part two reads both layers and writes only yours. When it finds something clearly team-wide, it says so, and the fix is a PR.

Symlinks became a plugin. My first setup symlinked agent files into Claude's config folder. That works for one laptop. For a team it means a pull on every machine, a symlink for every new file and no way to set a path per person. A Claude Code plugin gives one version for everyone, namespaced names so nothing collides with your own agents, and hooks that ship with the plugin and get reviewed like any code. The checkout you cloned is the marketplace: git pull is the update, and a session that starts on an old version says so.

What the Claude Code plugin installs on day one

The install is three lines you can read before you run them.

git clone <the client's repo>
cd <the client's repo>
./install.sh        # or .\install.ps1 on Windows

The script checks the prerequisites, registers the folder as a private Claude Code plugin marketplace, installs the plugin, creates your personal folder, installs the status line and opens a short wizard for the two things only a person can do: connecting Jira, GitHub and Slack with your own account, and a one-minute tour. Nothing is piped from the internet into a shell. No token is copied anywhere. Every step is logged, and ./uninstall.sh puts your settings back byte for byte. The client vets every tool its engineers use; a readable script in their own GitHub is the most transparent install there is.

Subagents · sevenCoder (Sonnet) writes code to a spec and never commitsScout (Haiku) reads GitHub and CI and never interpretsLibrarian (Haiku) reads both knowledge layers and writes only yoursTicket machine (Sonnet) writes tickets people read and refuses duplicatesSummarizer, triager and PR writer (Sonnet)Workflows · fourImplement a ticket: plan, questions, code, tests, draft PR, self-reviewReview a PR: checks gate, three lanes, a numbered list you pick fromDebug a production error: Sentry and logs crossed with the repo, ticket linkedAnswer a data question: catalog, code, read-only SQL, a draft replyGuardrailsDeny list: no deploys from a laptop, no piped installers, no .env readsModel guide: stops once when the model doesn't fit the taskInfrastructure gate: the shared CDK library firstExtra-usage pause at 100%, compact nudge at 80%Knowledge · two layersShared bundle per repo, inside the plugin, updated by pull requestYour personal folder: handoffs, daily file, your gotchas, never pushed hereStatus line: model, context, usage windows, OS versionInstalled in minutes, removed with one command. Everything in it arrived through a pull request someone approved.

The Claude Code status line

Then your status line looks like this:

Sonnet · ctx 34% · 5h 28% until 19:20 · 7d 82% · by Pepito 0.9.0

Model, context, the five-hour and seven-day usage windows, and the version of the OS you're running. Every percentage turns yellow at 70 and red at 90. And the commands from part two are there, now with a version number: implement a ticket, review a pull request, debug a production error, answer a question about the data warehouse with evidence.

The first install failed, and the OS fixed itself

The day I demoed it, the head of engineering tried the installer on Linux. It stopped: the secret scanner it required isn't in most Linux package managers. He wrote it in the team channel we had opened ten minutes earlier: "First blocker for me is: gitleaks isn't available on Linux."

I tagged Claude in the thread. Not Claude Code on my laptop: the Claude app in Slack, connected to the repo. Make the scanner optional, with a fallback that downloads the official release binary and checks its checksum, and a warning if all of that fails. It opened a draft PR from the thread, wrote the tests, fixed the two findings the other AI reviewer raised and replied on each, and created the Jira ticket under the epic. When I pointed out the ticket wasn't in the team's format, it rewrote it. By mid-afternoon the fix was merged as version 0.4.3, with the head of engineering confirming the install worked. I never opened my editor.

Eleven days later the same Slack Claude wrote a ticket in another channel, freehand. I asked why it wasn't using the OS's format. "Because I didn't know it existed: nothing in this channel's notes pointed me at it. I'm pulling the template from the repo now and will use it from now on." That's when I understood what the repo had become. The format isn't mine anymore. It's where the team's answer lives, and even an agent that runs on nobody's laptop goes there to find it.

Claude Code rules and hooks that came from the team

Head of engineering · Sep 10, 9:26 AMThanks for sharing Pepito! 🌶️ During tech refinement today, would you be able to give a demo on how you use it in your daily work?Head of engineering · Sep 10, 5:02 PMCongratulations on your very own repo. Please push your code and let's use this to grow!A teammate · Sep 30 · translatedThe Pepitos repo is impressive. It helps me: it adds the client's context.Head of engineering · Oct 1We'll start small, but I liked the idea of a channel!Head of engineering · Oct 1First blocker for me is: gitleaks isn't available on Linux.Head of engineering · Oct 2A teammate has done a lot of work on a data agent. I'd like to explore incorporating it so all agents can live together.A teammate · Oct 5 · translatedI'll try to install it today.The repo stopped being mine around here.

The week after the merge, the head of engineering posted a cheat sheet: which Claude model for which kind of task. Two days later that table was a rule in the OS and a hook that reads it before every prompt. Ask the most expensive model for something the sheet assigns to a cheaper one, and Claude stops once, says which model fits and why, and offers the switch. Reply "continue" and it stays quiet for the rest of the session. It doesn't forbid. It teaches, once.

A DevOps colleague wanted infrastructure to go through the team's shared CDK library instead of raw constructs. That became a rule and a gate: a write that builds raw infrastructure where the library has the piece is denied once, with three options. A data teammate had built an agent that answers questions about the warehouse; the head of engineering asked us to fold it in "so all agents can live together", and it became a skill anyone can run. The branch name in my status line, coloured by the state of its pull request, I copied from a teammate's bar. The deny list, no deploys from a laptop, no piped installers, no reading .env files, no production database from a terminal, came from Streaver OS, where it already existed.

None of these were mine to write. The OS is where the team's answers go so nobody gives them twice. Part two closed with "the Pepitos propose, I decide". The team version: the OS proposes, the team decides. Every rule got there through a pull request a person approved, and one command takes them all back out.

The hardest part was teaching, not coding

The installer wasn't the hard part, and neither were the agents. The hard part was making the OS educational without making it annoying.

A rule you enforce silently gets worked around. A rule you explain once gets adopted. So every gate behaves the same way: it stops once, says why, offers a way forward, and never asks again in that session. At 100% of your plan's usage window, before the next tool call, Claude pauses and asks whether to continue on extra usage or switch to a cheaper model from where the work stands. Past 80% of the context window, it suggests compacting, once.

My favourite example is small. I asked it to move two tickets to In Progress. The permission rules refused the Jira transition twice, and the rules say not to insist through another route. So it answered: "Move them to In Progress by hand in Jira. Two clicks." It had the credentials. It had a rule. It handed me the two clicks instead of finding a way around. That is the behaviour I'd spent ten weeks trying to write down, and now every engineer who installs the plugin gets it on day one.

Your company becomes a plugin

Streaver OSThe company as a repositoryIdentity enforced at the rootKnowledge in one source of truthOne plugin per client{client}-osThe same shape, one level downLives in the client's GitHub, in their nameTheir rules, their knowledge, their connectorsMaintained by the engineer on the accountyour-company-osYour knowledge bundleYour ticket formatYour connectorsEverything else travels as isThe same shape, three times. The client-specific parts are a knowledge bundle, a ticket format, a connector list and two names in a manifest.

Here is what I learned planting one of these inside a client. The agents are the easy part. The client-specific parts are four: the knowledge bundle about their repos, the ticket format their people want to read, the connectors they use, and two names in the manifests. Fork those, keep everything else. The installers, the hooks, the gates, the two-layer knowledge, the Friday routine that turns a week of review comments into rules for the coder: all of it travels as is.

That is the line on the Streaver OS page made literal: your engagement becomes a plugin on day one. We rebuilt our own company first, then put the same shape inside a client's GitHub, in their name, reviewed by their head of engineering, now their VP of Engineering and AI, with their rules in it. It runs on macOS and Linux today; Windows is written to spec and waiting for its pilot. What comes next is helping people write their own routines, the way part one's morning brief started, and raising the bar on code and documentation with every Friday review.

The chili is still in the README. It wasn't my idea either.

FAQ

How can I make my whole engineering team follow the same rules when they use AI?
Put the rules in a repository the team installs, not in a document people are asked to read. In our setup a plugin ships a deny list (no deploys from a laptop, no piped installers, no reading .env files), always-on instructions, and hooks that stop once and explain why. Every rule arrives through a pull request a person approved, every machine gets it on the next git pull, and one command removes them all, so nobody has to police anything.
How do I train my team to use Claude Code without burning through the plan?
Make the limits visible and let the tool do the teaching. A status line shows each person's five-hour and seven-day usage windows. A hook pauses once at 100% and offers a cheaper model. A model guide stops once when a cheaper model fits the task and says which one and why. Cheap subagents do the mechanical reading, so the expensive model only ever sees short answers. People pick up the habit from the nudges, not from a training session.
How can I share the AI agents one engineer built with the rest of the team?
Package them as a Claude Code plugin in a private repository: agents, skills and hooks with a manifest, namespaced so they never collide with anyone's own files. Pull everything personal, paths, names and ticket formats, out into settings the installer asks for once, and add a CI check that fails the build when something personal lands in the shared repo. After that, a clone and one script is the whole install.
What should every engineer get when they install a shared AI setup?
The same things on every machine: the subagents and workflows, the rules, a shared knowledge base about the team's repositories, a private folder for what the assistant learns about them, and a status line that shows the model, the context window and the usage windows. It should install in minutes, log every change, and uninstall back to the exact previous settings.
How do I set up a private Claude Code plugin marketplace for my team?
Keep the plugin in a private repository in your own GitHub and give the team an install script to read before they run it. The script registers the cloned folder as a private Claude Code plugin marketplace and installs the plugin from it, so the checkout you cloned is the marketplace: git pull is the update, and a session that starts on an old version says so. Nothing is piped from the internet into a shell, every step is logged, and the uninstall script puts your settings back byte for byte.
Is it safe to let my team install an AI setup from a shared repository?
It is as safe as the repository is readable. Ours installs from a clone with a script you read first, never pipes a download into a shell, copies no tokens (integrations use each person's own connectors), logs every change and restores settings byte for byte on uninstall. Personal knowledge stays on the machine, with a secret scanner on every commit. A readable repo in your own GitHub is the easiest security review there is.
Can I adapt an AI operating system like this to my own company?
Yes, and most of it travels as is. The company-specific parts are four: the knowledge bundle about your repositories, the ticket format your people want to read, the connectors you use, and two names in the manifests. Agents, hooks, gates, installers and the weekly routine that turns review comments into rules for the coder stay the same. The first version reached the client's GitHub in one evening; the weeks after were the team's own rules arriving as pull requests.

Want this inside your team?

Streaver builds applied AI and agentic systems that own real work end to end, with humans on the decisions. If your engineers each run their own AI setup and nothing they learn reaches the next desk, we can plant an operating system in your GitHub, with your knowledge, your tools and your rules in it.

Sources

Plugins overview: Claude Code Docs, Create a marketplace: Claude Code Docs, Hooks reference: Claude Code Docs

Have a project in mind?

Let’s build something that ships.

Streaver embeds senior product teams inside companies building AI-native software, from whiteboard to live customers.