diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,10 @@
 be selected using regular expressions and the commands may include capture groups.
 
 [![Build Status](https://travis-ci.org/steeloverseer/steeloverseer.png?branch=master)](https://travis-ci.org/steeloverseer/steeloverseer)
+[![Build status](https://github.com/schell/steeloverseer/actions/workflows/stack.yml/badge.svg)](https://github.com/schell/steeloverseer/actions/workflows/stack.yml)
+[![Build status](https://github.com/schell/steeloverseer/actions/workflows/haskell-ci.yml/badge.svg)](https://github.com/schell/steeloverseer/actions/workflows/haskell-ci.yml)
 
+
 Installation
 ============
 
@@ -115,3 +118,30 @@
 We can modify `foo.hs` and trigger `hlint foo.hs` to run. During its execution,
 modifying `bar.hs` will *enqueue* `hlint bar.hs`, while modifying `foo.hs` again
 will *re-run* `hlint foo.hs`.
+
+Transient Files
+---------------
+Sometimes text editors and other programs create short lived files in the 
+directories that `sos` is watching. These can trigger `sos` to run your 
+pipeline. This can often be avoided by using precise include syntax, ie 
+adding explicit matchers like an end-line match:
+
+```
+- pattern: .*\.tex$ 
+```
+
+Alternatively you may use exclude syntax to exclude any transient editor files 
+(eg here's an sosrc used for editing Haskell doctests and ignoring emac's flycheck files):
+
+```
+# This is for testing documentation
+- patterns:
+  - .*/[^_]*\.l?hs$
+  excludes:
+  - \#
+  - flycheck
+  commands:
+  - stack exec doctest -- \0
+```
+
+For more info, see https://github.com/schell/steeloverseer/issues/38
diff --git a/src/Sos/FileEvent.hs b/src/Sos/FileEvent.hs
--- a/src/Sos/FileEvent.hs
+++ b/src/Sos/FileEvent.hs
@@ -7,7 +7,6 @@
 import Sos.Utils
 
 import Data.ByteString (ByteString)
-import Data.Monoid ((<>))
 
 data FileEvent
   = FileAdded    ByteString
diff --git a/src/Sos/Rule.hs b/src/Sos/Rule.hs
--- a/src/Sos/Rule.hs
+++ b/src/Sos/Rule.hs
@@ -11,11 +11,11 @@
 
 import Control.Applicative
 import Control.Monad.Catch (MonadThrow, throwM)
-import Data.Aeson.Types
+import Data.Aeson.Compat ((.:), FromJSON(..), Parser, Value(..))
+import Data.Aeson.Types (typeMismatch)
 import Data.ByteString (ByteString)
 import Data.ByteString.Internal (c2w)
 import Data.Either
-import Data.Foldable (asum)
 import Data.Text (Text)
 import Text.Regex.TDFA
 import Text.Regex.TDFA.ByteString (compile)
diff --git a/steeloverseer.cabal b/steeloverseer.cabal
--- a/steeloverseer.cabal
+++ b/steeloverseer.cabal
@@ -1,13 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.30.0.
+-- This file has been generated from package.yaml by hpack version 0.35.0.
 --
 -- see: https://github.com/sol/hpack
---
--- hash: 8d42197bfca3bf4b40cbdc28e5f5253c3f6a54a083bf03d417f21619817f802e
 
 name:           steeloverseer
-version:        2.1.0.0
+version:        2.1.0.1
 synopsis:       A file watcher and development tool.
 description:    A command line tool that responds to filesystem events. Allows the user to automatically execute commands after files are added or updated. Watches files using regular expressions.
 category:       Development
@@ -16,10 +14,12 @@
 bug-reports:    https://github.com/schell/steeloverseer/issues
 author:         Schell Scivally,
                 Mitchell Rosen
-maintainer:     schell@takt.com
+maintainer:     peterbecich@gmail.com
 license:        BSD3
 license-file:   LICENSE
 build-type:     Simple
+tested-with:
+    GHC==9.2.2
 extra-source-files:
     README.md
 
@@ -39,20 +39,33 @@
       System.FSNotify.Streaming
   hs-source-dirs:
       src
-  default-extensions: BangPatterns DeriveDataTypeable DeriveFunctor FlexibleContexts InstanceSigs LambdaCase OverloadedStrings RecordWildCards ScopedTypeVariables ViewPatterns
+  default-extensions:
+      BangPatterns
+      DeriveDataTypeable
+      DeriveFunctor
+      FlexibleContexts
+      InstanceSigs
+      LambdaCase
+      OverloadedStrings
+      RecordWildCards
+      ScopedTypeVariables
+      ViewPatterns
   ghc-options: -Wall
+  build-tool-depends:
+      hspec-discover:hspec-discover
   build-depends:
       aeson >=0.8
+    , aeson-compat >=0.3.10
     , ansi-terminal >=0.6.2
     , async >=2.0
     , base >=4.0 && <5.0
     , bytestring >=0.10
     , containers >=0.5
     , exceptions
-    , fsnotify >=0.3
+    , fsnotify ==0.3.*
     , managed >=1.0.1
     , mtl >=2.2
-    , process >=1.6 && <1.7
+    , process ==1.6.*
     , regex-tdfa >=1.2
     , semigroups >=0.16
     , stm >=2.4
@@ -66,16 +79,29 @@
   main-is: Main.hs
   hs-source-dirs:
       app
-  default-extensions: BangPatterns DeriveDataTypeable DeriveFunctor FlexibleContexts InstanceSigs LambdaCase OverloadedStrings RecordWildCards ScopedTypeVariables ViewPatterns
+  default-extensions:
+      BangPatterns
+      DeriveDataTypeable
+      DeriveFunctor
+      FlexibleContexts
+      InstanceSigs
+      LambdaCase
+      OverloadedStrings
+      RecordWildCards
+      ScopedTypeVariables
+      ViewPatterns
   ghc-options: -Wall -threaded
+  build-tool-depends:
+      hspec-discover:hspec-discover
   build-depends:
-      async >=2.0
+      aeson-compat >=0.3.10
+    , async >=2.0
     , base >=4.0 && <5.0
     , bytestring >=0.10
     , directory >=1.2
     , exceptions
     , filepath >=1.3
-    , fsnotify >=0.3
+    , fsnotify ==0.3.*
     , managed >=1.0.1
     , mtl >=2.2
     , optparse-applicative >=0.11
@@ -86,10 +112,10 @@
     , streaming >=0.1.0 && <0.3
     , text >=1.2
     , yaml >=0.8
+  default-language: Haskell2010
   if os(darwin)
     build-depends:
         hfsevents >=0.1.3
-  default-language: Haskell2010
 
 test-suite spec
   type: exitcode-stdio-1.0
@@ -99,14 +125,27 @@
       Paths_steeloverseer
   hs-source-dirs:
       test
-  default-extensions: BangPatterns DeriveDataTypeable DeriveFunctor FlexibleContexts InstanceSigs LambdaCase OverloadedStrings RecordWildCards ScopedTypeVariables ViewPatterns
+  default-extensions:
+      BangPatterns
+      DeriveDataTypeable
+      DeriveFunctor
+      FlexibleContexts
+      InstanceSigs
+      LambdaCase
+      OverloadedStrings
+      RecordWildCards
+      ScopedTypeVariables
+      ViewPatterns
   ghc-options: -Wall
+  build-tool-depends:
+      hspec-discover:hspec-discover
   build-depends:
-      async >=2.0
+      aeson-compat >=0.3.10
+    , async >=2.0
     , base >=4.0 && <5.0
     , bytestring >=0.10
     , exceptions
-    , fsnotify >=0.3
+    , fsnotify ==0.3.*
     , hspec
     , managed >=1.0.1
     , mtl >=2.2
