Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Agentic AI

Around November of 2025, agentic AI exploded in usefulness, and has changed how a lot of software is written, reviewed, and maintained. “Agentic” AI is more than a chatbot; it has access to “tool calls”, which can read and write files, and most importantly it runs in a loop so it can verify that code passes checks. This is closer to how a human codes; we run code and verify outputs, we do not write working code from scratch without running it.

It helps to separate two very different things that often get lumped together as “Agentic AI”:

The recommendations below are aimed at the first case, and at keeping your project from being overwhelmed by the second.

Disclosure and transparency

We recommend full disclosure. Knowing what model was used lets a reviewer run a model from a different model family to help them review the contribution. A maintainer has a better idea of what to expect based on the model used. And it’s generally more respectful to not keep your process hidden when contributing to open source; maybe the maintainer would like to try that model too. If you heavily edit the model output, then use your discretion; but being open about the whole process is generally better!

Always follow the policy of the project you are contributing to. The following are general guidelines.

Credit AI in commits. Follow the convention used by the Linux kernel and add a trailer. Never allow the model to add itself as a co-author. The code is still yours (and your responsibility); the AI is a tool, not an author or copyright holder, which is what co-authored-by is for. An AI must never add a Signed-off-by: line, because certifying the DCO is a legal act only a human can perform.

Write your own PR descriptions. Generated PR summaries tend to be verbose, impersonal, and a chore to read. Write the description yourself. If a PR or comment does contain AI-generated prose, mark it clearly, for example with a short disclaimer line at the top; you can still write a human written message above that disclaimer.

Keep human review human-to-human. Maintainers should never have to argue with a bot. Don’t make a reviewer talk to an AI without knowing it; if an AI is responding on your behalf, say so (e.g. with an AI disclaimer at top). Respect a reviewer’s time by responding personally.

Don’t submit slop. Don’t open a PR that a maintainer could finish faster than they can review it, and don’t mass-file unsolicited PRs. Reviewing an AI-generated PR can take far longer than writing it did. If the change is trivial with AI, the maintainers probably could just trigger the AI themselves. Make sure the pull request is welcome: check issues, ask first, etc.

Don’t use AI on “good first issues”. These exist to teach new contributors, not to be a button an AI presses -- a maintainer could do that. LLVM and Mozilla explicitly forbid it, and other projects are dropping the label entirely. (And yes, a human wrote the preceding em-dash!)

AI_POLICY.md

A growing convention is to add an AI_POLICY.md to your repository so contributors know what is expected of AI-assisted work. There is no single right answer; pick the stance that matches your project’s tolerance and capacity. The tabs below sketch three levels you can adapt.

All in
Moderate
Minimal

AI-assisted contributions are welcome on the same footing as any other, as long as they meet the project’s quality bar and are disclosed. This is very similar to the Linux kernel policy. CPython is close too, but only appreciates disclosure instead of requiring it.

# AI Policy

AI-assisted contributions are welcome. We ask that you:

- Disclose that AI was used and name the tool/model.
- Review and understand every line you submit; you are responsible for it.
- Meet the same quality, testing, and style standards as any contribution.
- Not use fully autonomous agents to open issues or PRs.
- Respond to reviewers yourself.
- Clearly mark AI text in descriptions and issues.

This applies to issues and comments as well as pull requests. Using AI for
translation or grammar help is fine. Contributions that ignore this policy may
be closed.

Only humans can be named as co-authors, and AI can _never_ sign off on a
commit. The Linux kernel trailer can be used to credit AI assistance, like
this:

```text
Assisted-by: <harness>:<model>
```

AGENTS.md

Harnesses read a project context file to learn how your repository works -- preferred command runners, architecture notes, conventions, and gotchas. A good context file makes the AI far more effective without bloating every prompt. The cross-tool standard is AGENTS.md; most harnesses can generate a first draft for you (often via an /init command).

Keep it focused on what is not obvious from the code: how to run the tests, which tools to prefer, where generated files live, and any traps. Treat it as documentation you maintain, not a dumping ground.

How you track the file is a separate decision:

Commit it
Ignore it
Leave it out

Commit AGENTS.md so every contributor (and their harness) shares the same project context, and you can enforce project conventions this way. This is a good default for projects with at least one maintainer also using AI harnesses. (Ignoring CLAUDE.md and .claude/ in your .gitignore is also a good idea, due to that not supporting standards and being fairly common.)

User-level configuration

Beyond per-project context, most harnesses support a user-level config that applies everywhere (for example ~/.claude/CLAUDE.md or ~/.config/opencode/AGENTS.md). This is the place for your personal, cross-project preferences, such as:

Example user-level file
You are on macOS, but have GNU sed. `python3` can be used if python without
dependencies is needed. Use `uv run` if in a python package.

Use `prek -a --quiet` instead of `pre-commit run -a` for linting.

If you make a commit, follow conventional commits and add a trailer:
`Assisted-by: <harness>:<model>`, where `<harness>` is the current agent
harness, and `<model>` is the AI model.

Prefix PR descriptions and comments on PRs with the line ":robot: _AI text
below_ :robot:" to indicate you are an agent speaking on a user's behalf.

Skills

Skills are reusable, named sets of instructions for repetitive workflows that you can invoke on demand: dropping a Python version, checking trusted publishing, applying a project’s changelog style, and so on. They follow a shared skills standard, so a skill you write can work across multiple tools. See skills.sh for a catalog and more background.

If you find yourself giving the AI the same multi-step instructions repeatedly, that’s a good candidate for a skill. AI can help you write skills. You can store skills (like changelog skills) in a repository at .agents/skills, or for your user at ~/.agents/skills. The gh skills command can help you manage them.

A few harness features worth knowing

The details vary by tool, but most modern harnesses share a common vocabulary:

As you’ll learn, effective use of AI is mostly context management. If the AI makes bad decisions, it’s probably missing context: load design documents, issues, conversations, and files (forcibly with @ if needed) before starting, and use planning mode to have it ask you questions. If it becomes forgetful mid-task, the context is too full: use /compact liberally, and don’t let verbose output fill the context with junk.

Common concerns

What AI is good at

AI is fantastic at anything that has a clear pass/fail condition. This means it’s great at fixing up a failing PR, addressing linter failures, polishing off anything that’s failing tests into making it pass tests. That’s why good tests and strong linters and type checking are so helpful to AI, they give it a better pass/fail to work with. Do keep an eye on it, though, sometimes it will skip something instead of fixing it; sometimes that’s correct, but decision making is not as strong of an AI skill as pass/fail checks!

AI knows a massive library of tricks and details. It will hallucinate new tricks sometimes, of course (that’s why the pass/fail is important above!). Make it validate anything (newer models often have this in the system prompts, so it is model and harness dependent; for example, Claude Opus 4.8+ acts paranoid and validates without request).

AI doesn’t mind long or annoying tasks: iterating with a CI that takes minutes or hours, running things through Docker, figuring out how to build projects, etc. You’ll realize that things you know are good ideas, but you were too time constrained to try before are perfect candidates for AI. Want to find the 20 most important downstream projects and test them all before and after some change you made? AI is happy to do it!

As new models are coming that are better than humans at finding and exploiting vulnerabilities, we need to be running those models on our code to find and fix bugs before they can be exploited.

What should you try?

Regardless of what AI companies tell you, one of the hardest things to do with a model is write new code. Especially from scratch (it will mimic the current style). That’s also something that tends to be fairly enjoyable: Don’t make AI do stuff you’d rather do yourself! Start by using the AI to do the stuff you don’t like. Then start having it do things you wouldn’t do because you don’t have time to do it. Here are some suggestions for prompts to try:

For an existing PR:

Smaller ideas:

Tips

If you want to see your usage across harnesses, Wes McKinney (of Pandas fame) has AgentsView, which reads local files from most harnesses and summarizes for you. Try uvx agentsview usage daily, for example. A similar tool is npx ccusage, which despite the name supports multiple harnesses too.

If you use Claude Code, npx ccstatusline is much better than having the AI try to write its own status line.

A very powerful technique is “rubber duck”, where you develop code with one model, then review it with a different model, feeding the review back into the original model, and iterate. This can provide a significantly better result than either model on its own, moving up about 74% to the next model class in some tests. You don’t need a specialized mode (copilot has one), you can do this yourself if you have access to two model families.

Don’t just do what you’d do with AI; have it do what you wouldn’t do. If you are developing a feature, ask AI to take several projects that use yours and adapt them to your new feature. Take a PR where someone started using your library and ask for all the pain points they faced transitioning to it. Have AI try to find a way to break your feature or library. Look for gaps in your docs. Have it follow your tutorial and tell you what was missing. It is happy to use Docker or start up a database or other tools that you might not have time to set up for a small problem.

You can mix it in at your pace. If you are writing, try adding TODO comments for things like adding links, then ask AI to find them and fix them. With marimo pair, you can work on a notebook or slides but have AI connected and able to help you edit anything you ask for, like splitting a slide into columns, adding a summary slide, or analyzing a SQLite database and adding a plot.

If there’s something repetitive, use AI to write a script to do it; it will use fewer tokens and be more reliable than having AI do the repetitive thing directly.