Counting developers
Developer and Business licenses are priced per named developer. The library counts nothing: it never phones home, and the number of developers in your key is for your records (see What the check does not do). The number comes from you. This page says who counts, what we ask for once a year, and how a script in one file produces the number from your source control, on your own machine, sending nothing.
Who counts
- Count the developers who write, change, build or debug code that calls IntentSharp.
- People who only operate or use the finished application do not count, however many they are. Deployments are unlimited.
- Seats are named. When a developer leaves the team, the seat passes to the person who replaces them. A seat is not shared between two people who both work on the code.
These are rules 1 to 3 on the pricing page, which every edition follows.
The yearly count
Once a year we email your licensing contact and ask for the number of developers at your organization who use IntentSharp, as section 5.5 of the license provides. Reply with the number; we do not need names. If it is higher than your license covers, we add the developers for the rest of your term at the per-developer price of your order, so one key and one renewal date still cover everyone. If it is lower, the license runs on as it is, and the renewal can be for fewer developers when you tell us at least 30 days before the term ends.
The script
count-developers.ps1 counts the developers who changed code that calls IntentSharp in a period, from the git history on your machine. It needs PowerShell 7.2 or later and git, on Windows, macOS or Linux. It is one file that you can read before you run it: it reads git history, prints to the console, writes nothing and sends nothing. The link opens the script as text. To save it, right-click the link and choose Save link as, or run:
Invoke-WebRequest https://intentsharp.com/tools/count-developers.ps1 -OutFile count-developers.ps1
In each repository you give it, it reads:
- the project files that git tracks:
.csproj,.fsproj,.vbproj,.propsand.targets. A project is IntentSharp code when it has aPackageReferencetoIntentSharp,IntentSharp.CatalogorIntentSharp.Extensions.AI, alone or in a semicolon-separated list, with or without aVersionattribute, so Central Package Management works. A reference inside an XML comment does not count; - the commits of the last 12 months that changed anything in those projects' folders, leaving out merge commits: the people who wrote the merged commits are counted, not the person who merged them;
- each commit's author name and email, as git resolves them through the repository's
.mailmapfile.
It groups the commits by email across every repository, prints one row per person, and then the number of distinct people.
Run it from a PowerShell 7 prompt, with the root of the repository that holds your application. The root is the
folder that holds .git; a folder inside the repository stops the script with a message that names the root, so the
number is never for part of a repository:
pwsh ./count-developers.ps1 -Path C:\src\my-app
For several repositories, give each root. A person with commits in more than one is counted once:
pwsh ./count-developers.ps1 -Path C:\src\app-one, C:\src\app-two
For another period, give its first and last day. Both days count:
pwsh ./count-developers.ps1 -Path C:\src\my-app -Since 2025-10-01 -Until 2026-09-30
-Include adds folders that are not inside a referencing project, for intent files or code kept elsewhere; a folder
that no longer exists is accepted when the repository's history has it. -Quiet prints only the number.
Get-Help ./count-developers.ps1 -Full lists every parameter. On Windows, a file saved from a browser may be blocked
from running until you run Unblock-File ./count-developers.ps1 once.
Reading the output
Name Email First Last Commits
----------- ------------------- ---------- ---------- -------
Dana Reyes dana@example.com 2025-11-03 2026-02-27 14
Sam Okafor sam@example.com 2026-03-04 2026-09-18 31
Sequential ranges can be one reassigned seat; see the docs page.
Developers who changed IntentSharp code between 2025-10-01 and 2026-09-30: 2
- Each row is one person: the name and email of their most recent commit, the first and last day they changed IntentSharp code in the period, and the number of commits. Dates are always written as year, month, day.
- One person with two emails appears twice until the repository's
.mailmapfile maps the second email to the first. The script resolves names and emails exactly asgit logdoes. - The note about sequential ranges appears when one person's last commit is before another person's first. The two may be one seat that passed from someone who left to the person who replaced them, which rule 3 allows. The number printed is still the count of distinct people; if a row is someone who has left, do not count them in your reply.
- People who build or debug the code but never commit, such as a developer who pairs and never pushes under their own name, are not in the table and still count. Add them to the number.
Limits
- It finds direct package references only. A project that uses IntentSharp through another project of yours, with a
ProjectReferenceto the project that references the package, is not found; give its folder with-Include. - A squash merge is one commit with one author. The other people whose work went into it, co-author trailers included, are not seen unless they also have commits of their own.
- A project moved, renamed or removed during the period is seen at its current folder only, so the commits to its
old folder before the move are not counted. Give the old folder with
-Include: a folder that the history has is accepted although it is no longer on disk. - It reads the branch that is checked out in each repository. Fetch and check out your main branch first, so that merged work is in the history it reads.
- Code built from a copy outside source control is not seen.
What to report
Reply to our email with one number: the developers who use IntentSharp at your organization today. Start from the number the script prints, add anyone who builds or debugs the code without committing, and leave out anyone who has left the team. We do not need the table or any names. Questions go to licensing@c2consultants.net.