← Back to task

Commit d2c1a19a

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 =