commit d2c1a19a5d32439dab6eba7f79e1e546dff90bc2
Author: Coder Agent <coder@agents.omni>
Date: Mon Feb 16 22:52:21 2026
Add --author flag to task comment CLI
Add --author option to 'task comment' command so agents can
attribute their comments correctly. Accepts: human (default),
system, agent:engineer, agent:reviewer, agent:designer,
agent:productmgr, or just 'agent' (defaults to engineer).
Example: task comment t-123 'msg' --author agent:engineer
Task-Id: t-624
diff --git a/Omni/Task.hs b/Omni/Task.hs
index fa978026..c5b525b0 100644
--- a/Omni/Task.hs
+++ b/Omni/Task.hs
@@ -10,6 +10,7 @@ import Alpha
import qualified Data.Aeson as Aeson
import qualified Data.Aeson.KeyMap as KM
import qualified Data.ByteString.Lazy.Char8 as BLC
+import qualified Data.Char as Char
import qualified Data.Text as T
import qualified Data.Text.Encoding as TE
import Data.Time (defaultTimeLocale, formatTime)
@@ -337,16 +338,30 @@ commentParser =
</ globalOptsParser
<*> Cli.strArgument (Cli.metavar "ID" <> Cli.help "Task ID")
<*> Cli.strArgument (Cli.metavar "MESSAGE" <> Cli.help "Comment message")
+ <*> Cli.optional (Cli.strOption (Cli.long "author" <> Cli.metavar "AUTHOR" <> Cli.help "Comment author: human, system, agent:engineer, agent:reviewer, agent:designer, agent:productmgr (default: human)"))
-doComment :: GlobalOpts -> String -> String -> IO ()
-doComment GlobalOpts {..} tidStr message = do
+doComment :: GlobalOpts -> String -> String -> Maybe String -> IO ()
+doComment GlobalOpts {..} tidStr message authorStr = do
for_ globalDb (setEnv "TASK_DB_PATH")
let tid = T.pack tidStr
- updatedTask <- addComment tid (T.pack message) Human
+ author = parseAuthor authorStr
+ updatedTask <- addComment tid (T.pack message) author
if globalJson
then outputJson updatedTask
else putStrLn <| "Added comment to task: " <> T.unpack tid
+parseAuthor :: Maybe String -> CommentAuthor
+parseAuthor Nothing = Human
+parseAuthor (Just s) = case map Char.toLower s of
+ "human" -> Human
+ "system" -> System
+ "agent:engineer" -> Agent Engineer
+ "agent:reviewer" -> Agent Reviewer
+ "agent:designer" -> Agent Designer
+ "agent:productmgr" -> Agent ProductMgr
+ "agent" -> Agent Engineer
+ _ -> Human
+
-- | list command
listParser :: Cli.Parser (IO ())
listParser =