program to output features in a position is there a program available that will take a position as input and output the features in that position such as: bad knight on H3, good bishop on g2, knight outpost on E5, passed pawn on c6, etc.  It would be ideal if it took FEN string and operated from the command line?
It's possible (statically) but you may need to do some works. Let's take a look at Stockfish.

In the terminal, start Stockfish and type eval.



Stockfish knows about your passed pawns, king safety, good knights etc. Your job is to pull it out from the source code.

Let's study Stockfish's evaluation. The source file is at: https://github.com/official-stockfish/Stockfish/blob/master/src/evaluate.cpp

Let's try two examples: bad knight and passed pawn.


Bad knight


The line:

pos.attacks_from&lt;Pt&gt;(s)


gives you the attack bitboard for your knight. The PST table for the knight is in psqt.cpp.

{ S(-144, -98), S(-96,-82), S(-80,-46), S(-73,-14) },
{ S( -83, -69), S(-43,-54), S(-21,-17), S(-10,  9) },
{ S( -71, -50), S(-22,-39), S(  0, -7), S(  9, 28) },
{ S( -25, -41), S( 18,-25), S( 43,  6), S( 47, 38) },
{ S( -26, -46), S( 16,-25), S( 38,  3), S( 50, 40) },
{ S( -11, -54), S( 37,-38), S( 56, -7), S( 65, 27) },
{ S( -62, -65), S(-17,-50), S(  5,-24), S( 14, 13) },
{ S(-194,-109), S(-66,-89), S(-42,-50), S(-29,-13) }


Do you see -29 for the h1 square? 


Passed pawn


The line:

ei.pe-&gt;passed_pawns(Us)


gives you passed pawn information for a colour.