Training A Digital Intern: Prompts, Skills, Plugins and MCP Explained

16 Oct 2026 | Basile Aelterman

Remember when writing code with an LLM meant saying "You are a world-class software engineer..." and then just pray for the best? That era is over. Today, prompting an AI looks less like manipulating an intern into thinking they are a world-class engineer, and more like building software: reusable skills, plugins you can install, MCP servers that integrate AI into your tools, heck, even package managers for those types of prompts? In this post I’ll unpack what prompting has become, why the clever one-liner is being replaced by infrastructure, and what that means for anyone who wants to get real work out of a coding agent.

What Are Coding Agents?

AI used to write code for applications are called coding agents. These agents have access to your codebase, can apply changes, and write new code for you based on your input. They can also explain code to you, so you don't have to read that giant method that almost your entire codebase relies on and looks like an intern wrote it.

The industry standard coding agent right now as of October 16th 2026, has to be Claude Code by Anthropic. Other examples are Codex by OpenAI, Gemini Code Assist by Google and Grok Build by SpaceXAI.

To use a coding agent, you first boot it up by running the following in your terminal (let's use Claude Code as an example):

claude

Give it some time to load in (should only take a second or two), and it gives you a TUI. On the bottom you will see something that looks like a textbox for you to start prompting Claude.

Let's give it a shot, shall we?

Imagine have a brand new Laravel application, and we want to start off by creating an authentication system. While we could just manually write everything ourselves, why not put our coding agent on this task?

Let's enter this in our textbox on the bottom of our terminal:

Build an authentication system for the User model so a user can log in, log out, and register an account.

And it gets to work.

As you might see, our prompt is very vague. Luckily, Claude is designed to ask you questions if it's uncertain about your command (though this is not something you should rely on. More on this soon). This might appear as simply questions which you'll have to enter in the textbox again, or as multiple choice questions which you can select.

Since this task is fairly simple, Claude will just go ahead and build it.

Forward a few minutes, aaand done! We now have an authentication system implemented into our application. However, it's important to be careful here. Since this is AI, and our prompt was very vague, AI could have just taken a lazy approach and, for example, "forgot" to hash our passwords when persisting our data to our database. Or it could have done too much like create the authentication pages (which we didn't ask for, and don't need yet).

Great, you now know what a coding agent is, and how to use one!

"That's cool, but if it's inconsistent or writes bad code, why should I use it? Is there a way to make my agent write better code?"

What Is Prompt Engineering?

In simple terms, prompt engineering is making up guidelines your agent has to follow before it does anything.

Imagine an intern. If you give them no guidance, advice or tell them about anything, they won't know what to do and just act on instinct. This is bad. We want our intern to know what they should do and how they should do things.

A coding agent is just that, except it has the attention span of a goldfish: Every new session starts from zero. So instead of rewriting our guidelines into every prompt, we write them once and make sure the agent rereads them before it does anything.

In Claude Code, that place is a file called CLAUDE.md in the root of your project. Claude reads it at the start of every session. You can generate a first draft by running /init, which scans your codebase and writes down what it finds. Then you make it yours:

# Project guidelines
- This is a Laravel app. Follow Laravel conventions; don't invent your own folder structure.
- Never store plaintext passwords. Use the hashed cast or Hash::make().
Only build what is asked. No views, routes or migrations unless the task mentions them.
- Write a Pest test for every new feature and run php artisan test before saying you're done.
- If a requirement is ambiguous, ask before writing code.

Remember the two ways our auth system could have gone wrong? Lines two and three fix exactly that. And the last line means we no longer have to hope Claude asks questions.

But CLAUDE.md has a catch: it's read every time, in full. Stuff everything in there, and you waste the agent's limited attention on instructions that have nothing to do with the task at hand. That's where the rest of this post comes in.

Skills

A skill is a folder of instructions the agent only loads when it needs them. Each skill lives in its own folder with a SKILL.md file. The top of that file holds a name and a short description:

---
name: laravel-api-endpoints
description: Use when creating or modifying API endpoints in this Laravel app.
---

# Building API endpoints

1. Create a Form Request for validation; never validate in the controller.
2. Return data through an API Resource, never a raw model.
3. Add a feature test covering the path and at least one validation failure.

Up front, Claude only sees the name and description. When a task matches, say "add an API endpoint for updating a user's profile", it pulls in the full instructions. A skill folder can also hold scripts, templates and reference docs, which the agent only opens when the instructions point to them.

Where do we put 'em? You can put skill files in the .claude/skills/ folder. Claude reads this file from the get go.

Plugins

Once you have a few good skills, commands and settings, you might want to reuse them across different projects. Manually copying folders can get quite old fast. Plugins solve that.

A plugin bundles everything into one package you can install: skills, commands, hooks (scripts that run automatically at certain moments, like formatting code after every edit) and MCP servers (upcoming section).

Plugins are distributed through marketplaces, which are basically repositories that list plugins. In Claude Code, adding a marketplace and installing from it looks something like this:

/plugin marketplace add your-org/claude-plugins # The repository
/plugin install laravel-toolkit@your-org # The package you actually want from that repository

This way, you can bring coding standards, steps for an AI to take while writing code, etc. to all of your projects, and becomes a dependency you install, update and roll back, just like any other library.

English with a package manager. What a time to be alive.

Artifacts

Artifacts in Claude are standalone, interactive work products that Claude generates in a dedicated side window next to your chat.

Claude automatically creates an artifact when content is significant, self-contained (usually over 15 lines), and something you will want to reuse or modify.

Imagine we want to create a CRUD for our users. A CRUD is pretty straightforward and repetitive: create, read, update, delete. Nothing more, nothing less. Since this is a very repetitive task, and we will ask this multiple times, why not store the steps to take to make life easier?

That's what artifacts do. Very simple, and quite nice.

MCP

Everything so far changes what the agent knows. MCP changes what it can do.

The Model Context Protocol is an open standard, introduced by Anthropic in late 2024 for connecting AI to outside tools and data. An MCP server exposes tools, like "query the database" or "fetch the latest error from XYZ", and any agent that speaks MCP can use them. Think of it as USB-C for an LLM: one plug, many devices.

Adding a server to Claude Code is a single command:

claude mcp add <name> -- <command that starts the server>

For our Laravel app, the perfect example is Laravel Boost, an MCP server from the Laravel team.

To use boost, run the following in your terminal:

composer require laravel/boost --dev
php artisan boost:install

Now, Claude can read your database schema, check your logs, and search documentation that matches the exact package versions in your project. Back to our auth example: instead of guessing what your users table looks like, your agent can check it out for themselves. Instead of "remembering" an API from an older Laravel version, it just looks it up.

Boost also ships Laravel-specific guidelines for your agent, which makes it a neat example of this whole post in one package: written guidance plus real tools, installed with a package manager. Nice!

If this sounds appealing to you, we have another post that goes more in-depth on this, and explains how you can set up one for yourself, right here!

Wrapping Up

What a time to be alive as a software developer/engineer, hm? Or just in general.

While a coding agent can technically do all of the writing for you, it's still important to check its output, fine tune prompts, etc. You basically become the product owner, and not really the developer. Making sure your agent knows exactly what you're building is very important. If it doesn't, its output won't match your vision.

So if you hate interns, well you're stuck with one know. So to make your own life (and it's life) easier, maybe try doing some of these things.




Happy coding!

Basile Aelterman

Basile Aelterman

Software Engineer