I'd like to create a library of chess positions with associated tags. For example, one position might be tagged "Tactics", "Counterplay", and "Knight Forks". The goal is to be able to search the positions by tag to create examples/exercises for a specific idea without spending a huge amount of time digging up new positions. Does anyone know of a program/format that would be well-suited for this?
You could use a MySQL database with a column for the fen string and a column for the category. MySQL pairs well with php, perl, and python depending on what you w ant to use the database for (such as a website or something you can just use personally through a browser), a WAMP server can make this easier to set up.
It has a build in Medal system, and positions are searchable by piece maneuvers, text, fuzzy position searches, etc.
Why reinvent the wheel?
I suggest to read about Extended Position Description(EPD), a format based on Forsite Edward Notation (FEN) with specifications to store additional information.
In chessprogramming, there is a EPD syntax description of this standard.
It allows to record comments in fields c0 through c9, that are appropriate for your purpose.
Several years ago, EPD2diag version 1.5p5 was a good option to edit, save, analyze and annotate epd files. Now is older but could give you an idea of what can be obtained with such a program.