diff --git a/.travis.yml b/.travis.yml
index 74e2d43..9f6e2d7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -21,8 +21,7 @@ install:
 # command to run tests, e.g. python setup.py test
 script:
   - tox
-  - prospector --zero-exit > lint.txt
-  - inline-plz --parser=prospector --filename=lint.txt
+  - inline-plz
 
 # After you create the Github repo and add it to Travis, run the
 # travis_pypi_setup.py script to finish PyPI deployment setup
diff --git a/inlineplz/env/local.py b/inlineplz/env/local.py
index 2a60f74..31f9c9c 100644
--- a/inlineplz/env/local.py
+++ b/inlineplz/env/local.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 from __future__ import absolute_import
 
-import subprocess
+import os
 
 from inlineplz.env.base import EnvBase
 import inlineplz.util.git as git
@@ -9,5 +9,5 @@ import inlineplz.util.git as git
 
 class Local(EnvBase):
     def __init__(self):
-        if subprocess.check_call(['git status']):
+        if os.path.exists('.git'):
             self.commit = git.current_sha()
diff --git a/inlineplz/linters/__init__.py b/inlineplz/linters/__init__.py
new file mode 100644
index 0000000..e123811
--- /dev/null
+++ b/inlineplz/linters/__init__.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+
+"""Linter configurations."""
+
+from __future__ import absolute_import
+
+import os
+import subprocess
+
+from inlineplz import parsers
+
+LINTERS = {
+    'prospector': {
+        'run': ['prospector', '--zero-exit'],
+        'dotfile': '.prospector.yaml',
+        'parser': parsers.ProspectorParser
+    }
+}
+
+
+def lint():
+    messages = []
+    for config in LINTERS.values():
+        if config.get('dotfile') in os.listdir(os.getcwd()):
+            output = subprocess.check_output(config.get('run')).decode('utf-8')
+            messages.extend(config.get('parser')().parse(output))
+    return messages
diff --git a/inlineplz/main.py b/inlineplz/main.py
index 073f14d..d9819c3 100644
--- a/inlineplz/main.py
+++ b/inlineplz/main.py
@@ -8,6 +8,7 @@ import argparse
 from inlineplz import interfaces
 from inlineplz import parsers
 from inlineplz import env
+from inlineplz import linters
 
 
 def main():
@@ -17,8 +18,6 @@ def main():
     parser.add_argument('--repo', type=str)
     parser.add_argument('--repo-slug', type=str)
     parser.add_argument('--token', type=str)
-    parser.add_argument('--filename', type=str, required=True)
-    parser.add_argument('--parser', type=str, required=True, choices=parsers.PARSERS)
     parser.add_argument('--interface', type=str, choices=interfaces.INTERFACES)
     parser.add_argument('--url', type=str)
     parser.add_argument('--dryrun', action='store_true')
@@ -34,8 +33,6 @@ def inline(args):
     Parse input file with the specified parser and post messages based on lint output
 
     :param args: Contains the following
-        filename: Linter output
-        parser: Use a different parser based on the lint tool
         interface: How are we going to post comments?
         owner: Username of repo owner
         repo: Repository name
@@ -53,9 +50,8 @@ def inline(args):
         owner = args.owner
         repo = args.repo
 
-    with open(args.filename) as inputfile:
-        my_parser = parsers.PARSERS[args.parser]()
-        messages = my_parser.parse(inputfile.read())
+    messages = linters.lint()
+
     # TODO: implement dryrun as an interface instead of a special case here
     if args.dryrun:
         for msg in messages:
diff --git a/inlineplz/message.py b/inlineplz/message.py
index 2191043..61011a4 100644
--- a/inlineplz/message.py
+++ b/inlineplz/message.py
@@ -18,4 +18,8 @@ Message:
 
     @property
     def content(self):
-        return '```\n' + '\n'.join(self.comments) + '\n```'
+        if not self.comments:
+            return ''
+        if len(self.comments) > 1:
+            return '```\n' + '\n'.join(self.comments) + '\n```'
+        return '`{0}`'.format(self.comments[0].strip())

detect when running in ci and run/configure automatically
if CI envvars (jenkins/travis/etc) are present, then automatically look up the current console log, find linter command line invocations, and parse them.
diff --git a/tests/parsers/test_prospector.py b/tests/parsers/test_prospector.py
index 2913435..f673b81 100644
--- a/tests/parsers/test_prospector.py
+++ b/tests/parsers/test_prospector.py
@@ -17,10 +17,14 @@ prospector_path = os.path.join(
 def test_prospector():
     with open(prospector_path) as inputfile:
         messages = prospector.ProspectorParser().parse(inputfile.read())
-        assert messages[0].content == '```\npylint: syntax-error / invalid syntax\n```'
+        assert messages[0].content == '`pylint: syntax-error / invalid syntax`'
         assert messages[0].line_number == 34
         assert messages[0].path == 'docs/conf.py'
-        assert messages[1].content == '```\npylint: unused-import / Unused Message imported from message\n```'
+        assert messages[1].content == '`pylint: unused-import / Unused Message imported from message`'
         assert messages[1].line_number == 4
         assert messages[1].path == 'inline-plz/parsers/base.py'
+        assert messages[9].content == ('```\npylint: misplaced-comparison-constant / Comparison '
+                                       'should be __name__ == \'__main__\' (col 3)\npylint: '
+                                       'pretend this is a real message\n```')
+        assert messages[9].line_number == 113
         assert len(messages) == 11
diff --git a/tests/testdata/parsers/prospector.txt b/tests/testdata/parsers/prospector.txt
index 7402079..7c9ed99 100644
--- a/tests/testdata/parsers/prospector.txt
+++ b/tests/testdata/parsers/prospector.txt
@@ -28,6 +28,7 @@ travis_pypi_setup.py
     pylint: bare-except / No exception type(s) specified
   Line: 113
     pylint: misplaced-comparison-constant / Comparison should be __name__ == '__main__' (col 3)
+    pylint: pretend this is a real message
   Line: 114
     pylint: wrong-import-position / Import "import argparse" should be placed at the top of the module (col 4)
 

pip install -e .[dev]
parse_log_pytest
requirements.txt
numpy>=1.16.0 pandas>=1.0.0 pytest
apt-get update apt-get install -y gcc
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi==2025.1.31
cffi==1.17.1
charset-normalizer==3.4.1
cryptography==44.0.2
exceptiongroup==1.2.2
github3.py==4.0.1
idna==3.10
iniconfig==2.1.0
-e git+https://github.com/guykisel/inline-plz.git@f0fb68fa031c40920731a6f31526f6b455768f37#egg=inlineplz
numpy==2.0.2
packaging==24.2
pandas==2.2.3
pluggy==1.5.0
pycparser==2.22
PyJWT==2.10.1
pytest==8.3.5
python-dateutil==2.9.0.post0
pytz==2025.2
requests==2.32.3
six==1.17.0
tomli==2.2.1
tzdata==2025.2
unidiff==0.7.5
uritemplate==4.1.1
urllib3==2.3.0

name: inline-plz
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - certifi==2025.1.31
      - cffi==1.17.1
      - charset-normalizer==3.4.1
      - cryptography==44.0.2
      - exceptiongroup==1.2.2
      - github3-py==4.0.1
      - idna==3.10
      - iniconfig==2.1.0
      - numpy==2.0.2
      - packaging==24.2
      - pandas==2.2.3
      - pluggy==1.5.0
      - pycparser==2.22
      - pyjwt==2.10.1
      - pytest==8.3.5
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - requests==2.32.3
      - six==1.17.0
      - tomli==2.2.1
      - tzdata==2025.2
      - unidiff==0.7.5
      - uritemplate==4.1.1
      - urllib3==2.3.0
prefix: /opt/conda/envs/inline-plz

tests/parsers/test_prospector.py::test_prospector
inlineplz/linters/__init__.py .travis.yml inlineplz/env/local.py inlineplz/main.py inlineplz/message.py
inlineplz/linters/__init__.py .travis.yml inlineplz/env/local.py inlineplz/main.py inlineplz/message.py