Unofficial tool. This project is community-built and is not affiliated with or endorsed by Murfy / Murple Corp. Usage is at the user's own risk.
GitHub Action to back up a Murfy LaTeX project into a git repository.
This action requires your Murfy password to be stored as a GitHub Secret. GitHub Secrets are encrypted at rest and never exposed in workflow logs, but you should be aware of the following before proceeding:
- The secret value is a plaintext password. Anyone with admin access to the repository can use (but not read) it; anyone who can write workflow files can potentially expose it in a workflow run.
- Consider using a dedicated Murfy account — or at minimum a unique password — rather than your primary account credentials. As a safety measure, we recommend that account only has read access to the project being synced.
- If your credentials are ever compromised, revoke them from the Murfy dashboard immediately.
If you automate this action on a schedule, please avoid frequent runs. Running this too often generates unnecessary load on Murfy's infrastructure and may result in access being revoked.
- uv
- Google Chrome
uv synccp .env.example .envEdit .env with your Murfy credentials and project name:
MURFY_EMAIL=your@email.com
MURFY_PASSWORD=yourpassword
MURFY_PROJECT=your-project-nameMURFY_PROJECT must match the project name as it appears in the Murfy dashboard (the title shown in the project list).
uv run python sync.pyChrome will open visibly so you can follow along. The downloaded ZIP ends up in ./downloads/{project-name}.zip.
Pin to a specific tagged release rather than @main. Following @main means your workflow silently picks up every future change to this action, including potentially breaking ones.
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: macfernandez/sync-murfy@v1.0.0 # pin to a specific release
id: murfy
with:
email: ${{ secrets.MURFY_EMAIL }}
password: ${{ secrets.MURFY_PASSWORD }}
project: ${{ vars.MURFY_PROJECT }}
# The ZIP is now at steps.murfy.outputs.zip-path
- name: Unzip into folder
run: unzip "${{ steps.murfy.outputs.zip-path }}" -d ./my-folder/It is recommended to store MURFY_EMAIL and MURFY_PASSWORD as repository secrets and MURFY_PROJECT as a repository variable, but the action accepts any combination.
The CSS/XPath selectors in sync.py were confirmed against murfy.ai's DOM at the time of writing. If the site changes and a step breaks, inspect the relevant element with Chrome DevTools (F12 → click the element → Copy selector) and update the corresponding selector in sync.py.