diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,12 @@
 # Version history of koji-tool
 
+# 0.7 (2022-01-25)
+- query: new options: '--package' to search recent builds and '--latest'
+- query --method: now defaults to buildArch (use 'any' to include all)
+- query: now defaults to "--before now" (instead of "--from today 00:00')
+- query --arch: map i686 to i386 and armv7hl to armhfp
+- query: do not drop tasks without string request
+
 # 0.6.1 (2022-01-14)
 - install --list: now lists the rpms of a unique nvr
 - install --list: new --latest option which only finds the latest build
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -10,45 +10,50 @@
 
 Query Koji for tasks.
 
-Similar to `koji list-tasks --mine --quiet --all ...`,
+Somewhat like `koji list-tasks --mine --quiet --all ...`,
 but it shows duration, kojiweb urls and build.log size,
 and it uses `date` to parse a specified date string
-and can filter results by package.
+and can filter task results by package or nvr prefix.
 
 ### Usage
 
-By default it lists your Fedora Koji tasks from today.
+By default it lists your 10 most recent Fedora Koji buildArch tasks.
 
 ```shellsession
 $ koji-tool query --help
-Usage: koji-tool query [-S|--server URL] [-u|--user USER] [-l|--limit INT]
+Usage: koji-tool query [-S|--server URL] [-u|--user USER]
+                       [(-L|--latest) | (-l|--limit INT)]
                        [(-t|--task TASKID) | (-c|--children TASKID) |
-                         (-b|--build BUILD)] [-s|--state STATE] [-a|--arch ARCH]
+                         (-b|--build BUILD) | (-p|--package PKG)]
+                       [-s|--state STATE] [-a|--arch ARCH]
                        [(-B|--before TIMESTAMP) | (-F|--from TIMESTAMP)]
                        [-m|--method METHOD] [-D|--debug]
-                       [(-p|--package PKG) | (-n|--nvr PREFIX)]
+                       [(-P|--only-package PKG) | (-N|--only-nvr PREFIX)]
   Query Koji tasks (by default lists your tasks today)
 
 Available options:
   -S,--server URL          Koji Hub [default: Fedora]
   -u,--user USER           Koji user [default: fasid]
+  -L,--latest              Latest build or task
   -l,--limit INT           Maximum number of tasks to show [default: 10]
   -t,--task TASKID         Show task
   -c,--children TASKID     List child tasks of parent
   -b,--build BUILD         List child tasks of build
+  -p,--package PKG         Build tasks of package
   -s,--state STATE         Filter tasks by state (open, close(d), cancel(ed),
                            fail(ed), assigned, free)
   -a,--arch ARCH           Task arch
-  -B,--before TIMESTAMP    Tasks completed before timedate
-  -F,--from TIMESTAMP      Tasks completed after timedate [default: today]
-  -m,--method METHOD       Select tasks by method: [build,buildarch,etc]
-  -D,--debug               Pretty-pretty raw XML result
-  -p,--package PKG         Filter results to specified package
-  -n,--nvr PREFIX          Filter results by NVR prefix
+  -B,--before TIMESTAMP    Tasks completed before timedate [default: now]
+  -F,--from TIMESTAMP      Tasks completed after timedate
+  -m,--method METHOD       Select tasks by method: [build,buildarch,etc] or
+                           'any' (default 'buildArch')
+  -D,--debug               Pretty-print raw XML result
+  -P,--only-package PKG    Filter task results to specified package
+  -N,--only-nvr PREFIX     Filter task results by NVR prefix
   -h,--help                Show this help text
 ```
 
-Example:
+Examples:
 
 ```shellsession
 $ koji-tool query -a aarch64 --from "last week" -s fail
@@ -65,6 +70,13 @@
 Start: Thu Jan 13 10:12:09  2022
 End:   Thu Jan 13 10:14:09  2022
 duration: 0h 2m 0s
+```
+
+List builds:
+```shellsession
+$ koji-tool query --package redhat-rpm-config --limit 2
+redhat-rpm-config-212-1.eln114 (2022-01-23 12:50:46)
+redhat-rpm-config-212-1.fc36 (2022-01-23 11:49:42)
 ```
 
 ## koji-tool install
diff --git a/koji-tool.cabal b/koji-tool.cabal
--- a/koji-tool.cabal
+++ b/koji-tool.cabal
@@ -1,5 +1,5 @@
 name:                koji-tool
-version:             0.6.1
+version:             0.7
 synopsis:            Koji CLI tool for querying tasks and installing builds
 description:
         koji-tool is a CLI interface to Koji with commands to query tasks,
@@ -10,7 +10,7 @@
 license-file:        LICENSE
 author:              Jens Petersen <juhpetersen@gmail.com>
 maintainer:          Jens Petersen <juhpetersen@gmail.com>
-copyright:           2021  Jens Petersen <juhpetersen@gmail.com>
+copyright:           2021-2022  Jens Petersen <juhpetersen@gmail.com>
 category:            Utility
 homepage:            https://github.com/juhp/koji-tool
 bug-reports:         https://github.com/juhp/koji-tool/issues
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -47,20 +47,22 @@
       queryCmd
       <$> strOptionalWith 'S' "server" "URL" "Koji Hub [default: Fedora]" fedoraKojiHub
       <*> optional (strOptionWith 'u' "user" "USER" "Koji user [default: fasid]")
-      <*> optionalWith auto 'l' "limit" "INT" "Maximum number of tasks to show [default: 10]" 10
+      <*> (flagWith' 1 'L' "latest" "Latest build or task" <|>
+           optionalWith auto 'l' "limit" "INT" "Maximum number of tasks to show [default: 10]" 10)
       <*> (Task <$> optionWith auto 't' "task" "TASKID" "Show task"
            <|> Parent <$> optionWith auto 'c' "children" "TASKID" "List child tasks of parent"
            <|> Build <$> strOptionWith 'b' "build" "BUILD" "List child tasks of build"
+           <|> Package <$> strOptionWith 'p' "package" "PKG" "Build tasks of package"
            <|> pure TaskQuery)
       <*> many (parseTaskState <$> strOptionWith 's' "state" "STATE" "Filter tasks by state (open, close(d), cancel(ed), fail(ed), assigned, free)")
       <*> many (strOptionWith 'a' "arch" "ARCH" "Task arch")
-      <*> optional (Before <$> strOptionWith 'B' "before" "TIMESTAMP" "Tasks completed before timedate" <|>
-                    After <$> strOptionWith 'F' "from" "TIMESTAMP" "Tasks completed after timedate [default: today]")
-      <*> (fmap normalizeMethod <$> optional (strOptionWith 'm' "method" "METHOD" "Select tasks by method: [build,buildarch,etc]"))
-      <*> switchWith 'D' "debug" "Pretty-pretty raw XML result"
+      <*> optional (Before <$> strOptionWith 'B' "before" "TIMESTAMP" "Tasks completed before timedate [default: now]" <|>
+                    After <$> strOptionWith 'F' "from" "TIMESTAMP" "Tasks completed after timedate")
+      <*> (normalizeMethod <$> optional (strOptionWith 'm' "method" "METHOD" "Select tasks by method: [build,buildarch,etc] or 'any' (default 'buildArch')"))
+      <*> switchWith 'D' "debug" "Pretty-print raw XML result"
       -- FIXME error if integer (eg mistakenly taskid)
-      <*> optional (TaskPackage <$> strOptionWith 'p' "package" "PKG" "Filter results to specified package"
-                   <|> TaskNVR <$> strOptionWith 'n' "nvr" "PREFIX" "Filter results by NVR prefix")
+      <*> optional (TaskPackage <$> strOptionWith 'P' "only-package" "PKG" "Filter task results to specified package"
+                   <|> TaskNVR <$> strOptionWith 'N' "only-nvr" "PREFIX" "Filter task results by NVR prefix")
 
     , Subcommand "progress"
       "Track running Koji tasks by buildlog size" $
@@ -90,8 +92,10 @@
         "" -> error' "empty disttag"
         (c:_) -> if c == '.' then cs else '.' : cs
 
-    normalizeMethod :: String -> String
-    normalizeMethod m =
+    normalizeMethod :: Maybe String -> Maybe String
+    normalizeMethod Nothing = normalizeMethod (Just "buildarch")
+    normalizeMethod (Just "any") = Nothing
+    normalizeMethod (Just m) =
       case elemIndex (lower m) (map lower kojiMethods) of
-        Just i -> kojiMethods !! i
+        Just i -> Just $ kojiMethods !! i
         Nothing -> error' $! "unknown method: " ++ m
diff --git a/src/Query.hs b/src/Query.hs
--- a/src/Query.hs
+++ b/src/Query.hs
@@ -36,7 +36,8 @@
 import System.FilePath
 import Text.Pretty.Simple
 
-data TaskReq = Task Int | Parent Int | Build String | TaskQuery
+data TaskReq = Task Int | Parent Int | Build String | Package String
+             | TaskQuery
 
 data TaskFilter = TaskPackage String | TaskNVR String
 
@@ -76,6 +77,33 @@
                 else kojiGetBuildTaskID server bld
       whenJust mtaskid $ \(TaskId taskid) ->
         queryCmd server muser limit (Parent taskid) states archs mdate mmethod debug mfilter'
+    Package pkg -> do
+      when (isJust mdate || isJust mfilter') $
+        error' "cannot use --package together with timedate or filter"
+      mpkgid <- getPackageID server pkg
+      case mpkgid of
+        Nothing -> error' $ "no package id found for " ++ pkg
+        Just pkgid -> do
+          options <- setupQuery
+          blds <- listBuilds server $
+                  ("packageID", ValueInt pkgid):options
+          case blds of
+            [bld] -> do
+              case lookupStruct "task_id" bld of
+                Just taskid ->
+                  queryCmd server muser 10 (Parent taskid) states archs mdate mmethod debug mfilter'
+                Nothing -> error' "task id not found"
+            _ -> do
+              mapM_ putStrLn $ mapMaybe buildResult blds
+              where
+                buildResult :: Struct -> Maybe String
+                buildResult bld = do
+                  nvr <- lookupStruct "nvr" bld
+                  state <- readBuildState <$> lookupStruct "state" bld
+                  date <- lookupStruct "completion_time" bld
+                  return $ nvr ++
+                    " (" ++ takeWhile (/= '.') date ++ ")" ++
+                    (if state == BuildComplete then "" else " " ++ show state)
     _ -> do
       query <- setupQuery
       results <- listTasks server query
@@ -85,9 +113,12 @@
   where
     setupQuery = do
       case taskreq of
-        -- FIXME:
+        -- FIXME!
         Task _ -> error' "unreachable task request"
         Build _ -> error' "unreachable build request"
+        Package _ ->
+          return [("queryOpts",ValueStruct [("limit",ValueInt limit),
+                                            ("order",ValueString "-build_id")])]
         Parent parent -> do
           when (isJust muser || isJust mdate || isJust mfilter') $
             error' "cannot use --parent together with --user, timedate, or filter"
@@ -95,7 +126,7 @@
             ("parent", ValueInt parent) : commonParams
         TaskQuery -> do
           date <- cmd "date" ["+%F %T%z", "--date=" ++ dateString mdate]
-          putStrLn $ "completed " ++ maybe "after" show mdate ++ " " ++ date
+          putStrLn $ "completed " ++ maybe "" (++ " ") mmethod ++ maybe "before" show mdate ++ " " ++ date
           user <-
             case muser of
               Just user -> return user
@@ -118,17 +149,22 @@
             Just owner ->
               return $
                 [("owner", ValueInt (getID owner)),
-                 ("complete" ++ maybe "After" (capitalize . show) mdate, ValueString date)]
+                 ("complete" ++ maybe "Before" (capitalize . show) mdate, ValueString date)]
                 ++ commonParams
         where
           commonParams =
             [("decode", ValueBool True)]
             ++ [("state", ValueArray (map taskStateToValue states)) | notNull states]
-            ++ [("arch", ValueArray (map ValueString archs)) | notNull archs]
-            ++ [("method",  ValueString method) | Just method <- [mmethod]]
+            ++ [("arch", ValueArray (map (ValueString . kojiArch) archs)) | notNull archs]
+            ++ [("method", ValueString method) | Just method <- [mmethod]]
 
+          kojiArch :: String -> String
+          kojiArch "i686" = "i386"
+          kojiArch "armv7hl" = "armhfp"
+          kojiArch a = a
+
     dateString :: Maybe BeforeAfter -> String
-    dateString Nothing = "today 00:00"
+    dateString Nothing = "now"
     -- make time refer to past not future
     dateString (Just beforeAfter) =
       let timedate = getTimedate beforeAfter
@@ -151,18 +187,26 @@
       method <- lookupStruct "method" st
       hostid <- lookupStruct "host_id" st
       state <- getTaskState st
-      request <- lookupStruct "request" st >>= getString . head
+      request <- lookupStruct "request" st
       let package =
-            let file = takeFileName request
-            in if ".src.rpm" `isSuffixOf` file
-               then Right $ readNVR $ removeSuffix ".src.rpm" file
-               else Left $ takeBaseName file
+            case (getString . head) request of
+              Nothing -> Left $ unwords $ map showValue $ take 2 request
+              Just req ->
+                let file = takeFileName req
+                in if ".src.rpm" `isSuffixOf` file
+                   then Right $ readNVR $ removeSuffix ".src.rpm" file
+                   else Left $ takeBaseName file
           mparent' = lookupStruct "parent" st :: Maybe Int
       return $
         TaskResult package arch method hostid state mparent' taskid start_time mend_time
       where
         readTime' :: String -> UTCTime
         readTime' = read . replace "+00:00" "Z"
+
+        showValue :: Value -> String
+        showValue (ValueString cs) = cs
+        showValue (ValueInt i) = show i
+        showValue val = show val
 
     filterResults :: [TaskResult] -> [TaskResult]
     filterResults ts =
