Mnemo

Mnemosyne

Titan goddess of memory and remembrance, inventor of language, mother of the muses.

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 "Muses."

QuickStart

See Usage for detailed usage information.

  1. Download and run the Argot Server docker image.

    docker run --rm -p 10003:10003 mnemo/argot-server
  2. Open a C, C++, Python, JavaScript, or Common Lisp file and connect your editor or IDE to the server.

    • From Visual Studio Code:

      1. Install the Mnemosyne VS Code extension.
      2. Open the Command Palette (Control+Shift+P) and connect to the Argot Server with the command Mnemosyne: Connect to Argot Server.
      3. Implicitly request help synthesis by selecting part of the file.
    • From Emacs:

      1. Install Eglot (an LSP client for Emacs) M-x package-install-package eglot RET.
      2. Connect to the Argot Server with C-u M-x eglot using localhost:10003 for the host and port.
      3. Explicitly request help synthesis on an active region with M-x eglot-code-actions.
    • From Vim:

      1. Install LanguageClient-neovim using Plug
      2. Configure the language client to use Argot Server:
      use let g:LanguageClient_serverCommands = {
      \ 'javascript': ['tcp://localhost:10003'],
      \ 'python': ['tcp://localhost:10003'],
      \ 'lisp': ['tcp://localhost:10003'],
      \ }
      1. Explicitly request help synthesis on the visual selection with :call LanguageClient#textDocument_visualCodeAction().

More information

For more information about how Mnemosyne works and what it does see:

Copyright (C) 2020 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.