Mnemosyne is your automated software development assistant. It
integrates with your IDE and works with you suggesting code, types,
and tests as you work; and continually checking the consistency of
your documentation, types, tests, and implementation—whether
that means running test suites or type checkers, or using ML
techniques to ensure your documentation matches your implementation.
Mnemosyne applies statistical machine learning, formal methods, and
Search Based Software Engineering (SBSE) to enable developers to write
higher quality, higher assurance, and more standards compliant code
more quickly. Mnemosyne transcends CI/CD by making live substantive
contributions to the software development process as the developer
works. Mnemosyne speaks LSP, meaning it integrates seamlessly
with most popular text editors and IDEs. Mnemosyne is extensible,
easily collaborating with varied program synthesis modules or
Mnemosyne extends Microsoft's LSP protocol for IDE integration
to support decorating program subtrees with tests, types, and
prose. We call this extension "Argot LSP," or “Argot” for short.
Inside Mnemosyne Argot allows automated techniques of program test
generation, program analysis, type and invariant inference, and
program synthesis and refactoring (we call these modules "Muses") to communicate with each other as well as
with the developer's IDE.
The result is a collaborative environment centered around the
developer where suggestions for new tests, types, and code edits are
continually made against the software code base. The result is
improved developer productivity and software quality.
See Muses for a complete list of the Modules
or Muses currently implemented and under development for Mnemosyne
with demo videos. Some of these include:
Research in program synthesis and automated software engineering has
leapt forward in recent years thanks to advances in underlying machine
learning and constraint solving technologies. We hope to bridge
research and practice by connecting research technologies to modern
programming languages and IDEs. To ensure practical utility we focus
on the following themes:
Transparency: All results of muses are displayed to the
developer using familiar tests, types, and code edits.
Interactivity: The developer's activities guide muses and
curate their results. Smaller more focused developer interactions
are prioritized over coarse-grained large-scale synthesis.
Incrementality: Intermediate results are communicated back to
the developer and the software project. Synthesis techniques that
proceed function by function are prioritized when scalability is in
Copyright and Acknowledgments
Copyright (C) 2021 GrammaTech, Inc.
This material is based upon work supported by the US Air Force,
AFRL/RIKE and DARPA under Contract No. FA8750-20-C-0208. Any
opinions, findings and conclusions or recommendations expressed in
this material are those of the author(s) and do not necessarily
reflect the views of the US Air Force, AFRL/RIKE or DARPA.
NOTE: Mnemosyne is in early development and is not yet ready for production use.