diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for pms-infrastructure
 
+## 0.0.8.0 -- 2025-09-07
+
+* Support invalidChars configs.
+
 ## 0.0.7.0 -- 2025-08-17
 
 * Fixed proc-message.
diff --git a/pms-infrastructure.cabal b/pms-infrastructure.cabal
--- a/pms-infrastructure.cabal
+++ b/pms-infrastructure.cabal
@@ -20,7 +20,7 @@
 -- PVP summary:     +-+------- breaking API changes
 --                  | | +----- non-breaking API additions
 --                  | | | +--- code changes with no API change
-version:            0.0.7.0
+version:            0.0.8.0
 
 -- A short (one-line) description of the package.
 synopsis:           pms-infrastructure
diff --git a/src/PMS/Infrastructure/DS/Core.hs b/src/PMS/Infrastructure/DS/Core.hs
--- a/src/PMS/Infrastructure/DS/Core.hs
+++ b/src/PMS/Infrastructure/DS/Core.hs
@@ -139,13 +139,15 @@
       tout     = 30 * 1000 * 1000
 
   prompts <- view DM.promptsDomainData <$> lift ask
+  invalidChars <- view DM.invalidCharsDomainData <$> lift ask
+  invalidCmds <- view DM.invalidCmdsDomainData <$> lift ask
   ptyTMVar  <- view ptyAppData <$> ask
   procTMVar <- view processHandleAppData <$> ask
   lockTMVar <- view lockAppData <$> ask
 
   (cmdTmp, argsArrayTmp,addPrompts)  <- getCommandArgs name argsBS
-  cmd <- liftIOE $ DM.validateCommand cmdTmp
-  argsArray <- liftIOE $ DM.validateArgs argsArrayTmp
+  cmd <- liftIOE $ DM.validateCommand invalidChars invalidCmds cmdTmp
+  argsArray <- liftIOE $ DM.validateArgs invalidChars argsArrayTmp
 
   $logDebugS DM._LOGTAG $ T.pack $ "ptyConnectTask: cmd. " ++ cmd ++ " " ++ show argsArray
 
@@ -309,6 +311,8 @@
       argsBS = DM.unRawJsonByteString $ dat^.DM.argumentsPtyMessageCommandData
       tout = 30 * 1000 * 1000 
   prompts <- view DM.promptsDomainData <$> lift ask
+  invalidChars <- view DM.invalidCharsDomainData <$> lift ask
+  invalidCmds <- view DM.invalidCmdsDomainData <$> lift ask
   ptyTMVar  <- view ptyAppData <$> ask
   procTMVar <- view processHandleAppData <$> ask
   lockTMVar <- view lockAppData <$> ask
@@ -316,7 +320,7 @@
   let args = argsDat^.argumentsStringToolParams
 
   $logDebugS DM._LOGTAG $ T.pack $ "ptyMessageTask: args. " ++ args
-  return $ ptyMessageTask ptyTMVar procTMVar lockTMVar args prompts tout callback
+  return $ ptyMessageTask ptyTMVar procTMVar lockTMVar args prompts invalidChars invalidCmds tout callback
 
 -- |
 --
@@ -325,10 +329,12 @@
                -> STM.TMVar ()
                -> String  -- arguments line
                -> [String]  -- prompt list
+               -> [String]  -- invalidChars
+               -> [String]  -- invalidCmds
                -> Int       -- timeout microsec
                -> DM.ToolsCallCommandCallback ()
                -> IOTask ()
-ptyMessageTask ptyTMVar _ lockTMVar args prompts tout callback = flip E.catchAny errHdl $ do
+ptyMessageTask ptyTMVar _ lockTMVar args prompts invalidChars invalidCmds tout callback = flip E.catchAny errHdl $ do
   hPutStrLn stderr $ "[INFO] PMS.Infrastructure.DS.Core.work.ptyMessageTask run. " ++ args
 
   STM.atomically (STM.readTMVar ptyTMVar) >>= \case
@@ -347,7 +353,7 @@
 
     go :: Pty -> IO ()
     go pty = do
-      msg <- DM.validateMessage args
+      msg <- DM.validateMessage invalidChars invalidCmds args
       let cmd = TE.encodeUtf8 $ T.pack $ msg ++ DM._LF
       hPutStrLn stderr $ "[INFO] PMS.Infrastructure.DS.Core.work.ptyMessageTask writePty : " ++ BS.unpack cmd
       writePty pty cmd
