{"id":26172179,"url":"https://github.com/clarkfieseln/tea2adt","last_synced_at":"2026-04-22T05:33:00.734Z","repository":{"id":281341747,"uuid":"944979756","full_name":"ClarkFieseln/tea2adt","owner":"ClarkFieseln","description":"Command-line utility for Remote Shell, Remote AI Prompt, Chat and File Transfer, that reads and writes encrypted data across peer-to-peer or broadcast audio connections, using minimodem and gpg","archived":false,"fork":false,"pushed_at":"2025-06-28T08:33:00.000Z","size":10169,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-03T01:59:57.336Z","etag":null,"topics":["ai-prompt","audio","client-side-scan","data-diode","e2ee-encryption","encryption","gnupg","gpg","linux","linux-shell","minimodem","modem","ollama","prompt-engineering","python","real-time","remote-control","reverse-shell","shell-script","text-to-speech"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ClarkFieseln.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-08T11:25:40.000Z","updated_at":"2025-06-28T08:33:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"a9bc7bad-784a-4715-bf6c-9cfde788b2b4","html_url":"https://github.com/ClarkFieseln/tea2adt","commit_stats":null,"previous_names":["clarkfieseln/tea2adt"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/ClarkFieseln/tea2adt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClarkFieseln%2Ftea2adt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClarkFieseln%2Ftea2adt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClarkFieseln%2Ftea2adt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClarkFieseln%2Ftea2adt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ClarkFieseln","download_url":"https://codeload.github.com/ClarkFieseln/tea2adt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClarkFieseln%2Ftea2adt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32122722,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T00:31:26.853Z","status":"online","status_checked_at":"2026-04-22T02:00:05.693Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-prompt","audio","client-side-scan","data-diode","e2ee-encryption","encryption","gnupg","gpg","linux","linux-shell","minimodem","modem","ollama","prompt-engineering","python","real-time","remote-control","reverse-shell","shell-script","text-to-speech"],"created_at":"2025-03-11T19:53:31.822Z","updated_at":"2026-04-22T05:33:00.729Z","avatar_url":"https://github.com/ClarkFieseln.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- # ![plot](./tea2adt_source/tea2adt.png) --\u003e\n![plot](https://raw.githubusercontent.com/ClarkFieseln/tea2adt/refs/heads/main/tea2adt_source/tea2adt.png)\n\n# tea2adt\ntea2adt is a command-line utility for Chat, Remote Shell, Remote AI Prompt and File Transfer, that reads and writes encrypted data across peer-to-peer or broadcast audio connections, using [minimodem](https://github.com/kamalmostafa/minimodem \"minimodem\") and [gpg](https://github.com/gpg/gnupg \"gpg\").\n\nIt is a powerful tool that can be combined with any audio infrastructure (like PSTN, cellular network, internet, radio, walkie-talkies) to provide a secure communication channel through an audio tunnel.\n\nThe audio interfaces behave like data-diodes, each allowing unidirectional data transmission only, thus preventing data-leaks and malware-injection.\n\nThis enables an \"enhanced\"-end-to-end encryption (E-E2EE) which notably increases security and privacy, especially when the end devices are completely offline (air-gapped-system), thus providing an effective barrier against \"legal or illegal\" client-side-scanning!\n\nSee also \u003chttps://www.codeproject.com/Articles/5295970/Audio-Chat-for-Quite-Good-Privacy-AC4QGP\u003e\n\n\n## Installation\n```\n  pip install tea2adt\n```\n\n   or with git:\n\n```\n  git clone https://github.com/ClarkFieseln/tea2adt.git\n\n  cd tea2adt_source\n\n  chmod +x tea2adt\n\n  chmod +x *.sh\n```\n   \n  during first execution you will be asked to install dependencies: minimodem, gpg, bc, tmux, ...\n  \n  but you can also install them yourself with:\n```\n  sudo apt install minimodem\n  sudo apt install gpg\n  sudo apt install bc\n  sudo apt install tmux\n  ...\n```\n\n## How to use (pip installation)\n### Chat/Messenger\n\n```\n  tea2adt -c\n```\nenter and confirm password\n\nOn the other device a chat, a remote shell or a remote AI prompt can be started.\n\n### Remote Shell\n\n```\n  tea2adt -s\n```\nthen enter and confirm password\n\nOn the other device a chat shall be started to command the remote shell.\n\nNote that this is technically a \"reverse shell\" which gives access to your system!\n\n### Remote AI Prompt\n\n```\n  tea2adt -l\n```\nthen enter and confirm password\n\nOn the other device a chat shall be started to interact with the remote AI prompt.\n\nWith this option you may remotely access your local, secure, and self-hosted AI model (like ollama) or AI agent (like OpenClaw) in a secure way!\n\n### File Transfer\n\n```\n  tea2adt -f\n```\nenter and confirm password\n\nOn the other device a file transfer shall be started.\n\n### Probe\nTo check connectivity and adjust volumes if required.\n\n```\n  tea2adt -p\n```\n\nIn addition, a separate terminal will be opened to read unencrypted probe messages being sent by the other side.\n\n## Configuration\nAdapt the configuration as required using the 'terminal GUI' with:\n\n```\n  tea2adt -g\n```\n\u003c!-- # ![plot](./img/terminal_gui.jpg) --\u003e\n![plot](https://raw.githubusercontent.com/ClarkFieseln/tea2adt/refs/heads/main/img/terminal_gui.jpg)\n\nAlternatively, you may change the configuration by editing the files in the cfg folder directly. The 'Location' can be found with:\n\n```\n  tea2adt -d\n```\n\nThe most important settings are:\n\n* baud\n* keepalive_time_sec\n* retransmission_timeout_sec\n* split_tx_lines\n* volume_microphone\n* volume_speaker_left\n* volume_speaker_right\n* llm_cmd\n* text_to_speech\n\n## How to use (git installation)\nWhen installed with git, tea2adt may be called with: \n\n```\n  python3 tea2adt.py -c\n  # or\n  ./tea2adt -c\n```\nThis is an example to start a chat, but this is the same for any other option.\n\nFor more information check the [documentation](https://github.com/ClarkFieseln/tea2adt/blob/main/doc/documentation.md).\n\n## Features\non top of the audio modem provided by minimodem and encryption provided by GPG, tea2adt offers a reliable transport layer and many other features:\n\n- modes: chat, remote-shell, remote-AI-prompt, file transfer (future: sniffer)\n  \n- text-to-speech (TTS): synthesize speech from the text received in the chat\n\n- full-duplex communication\n\n- retransmit messages automatically after communication errors\n\n- split big messages into smaller data chunks in order to increase the probability of reception, thus reducing retransmissions\n\n- [keepalive] messages\n  \n- redundant transmission of \"data-messages\"\n   \n- composition of piped commands hidden to the user\n\n- tmp folder located in a configurable path beneath $HOME, independent of the current path.\n\n- probe, to check volume on receiver and adjust manually if needed\n\n  (very high and very low volumes may produce signal distortions)\n  \n- \"braodcast\" transmissions also possible, e.g. when ACKs are deactivated\n\n   use-case: walkie-talkie, Radio station, ...\n   \n- several configuration options: preamble, trailer, delays, cipher algorithm, confidence, log to file, verbose, etc.\n\n## Possible Abuses\nplease don't do the following if you are not allowed (it might be illegal!):\n\n- exfiltrate data over the air or cable to a nearby or remote computer\n\n- remote control over the air or cable from a nearby or remote computer\n\n- exfiltrate data from a computer evading classical auditing\n\n  (be aware that if you do this on your employer's computer you might be infringing the law!)\n  \n- use the tool as a \"side-channel\" for covert communication e.g. to spread or inject malware,\n\n  even worse when combined with steganography (e.g. low volumes, data hidden in noise)\n  \n## Typical Configuration\n\n\u003c!-- # ![plot](./img/figure2.jpg) --\u003e\n![plot](https://raw.githubusercontent.com/ClarkFieseln/tea2adt/refs/heads/main/img/figure2.jpg)\nA: tea2adt in offline PC (Alice)\n\nD: tea2adt in offline PC (Bob)\n\nB, C: smartphone with call session (mobile, messenger app, etc.)\n\ndiodes: audio connections (sink/speaker -\u003e source/microphone)\n\n## Communication in Linux over Linphone\n\n\u003c!-- # ![plot](./screenshots/20250128_153603.jpg) --\u003e\n![plot](https://raw.githubusercontent.com/ClarkFieseln/tea2adt/refs/heads/main/screenshots/20250128_153603.jpg)\n\nA: tea2adt in offline PC (Alice)\n\nD: tea2adt in offline PC (Bob)\n\nB, C: smartphone with [Linphone](https://www.linphone.org) call session\n\n## Communication in Termux over qTox\n\n\u003c!-- # ![plot](./screenshots/20250114_121116.jpg) --\u003e\n![plot](https://raw.githubusercontent.com/ClarkFieseln/tea2adt/refs/heads/main/screenshots/20250114_121116.jpg)\n\nA: tea2adt in offline smartphone with Termux (Alice)\n\nD: tea2adt in offline smartphone with Termux (Bob)\n\nB, C: PC with qTox call session\n\n## Communication in Linux over Walkie Talkies\n\n\u003c!-- # ![plot](./screenshots/20241231_140418.jpg) --\u003e\n![plot](https://raw.githubusercontent.com/ClarkFieseln/tea2adt/refs/heads/main/screenshots/20241231_140418.jpg)\n\n## Split Configuration\n\n\u003c!-- # ![plot](./img/figure3.jpg) --\u003e\n![plot](https://raw.githubusercontent.com/ClarkFieseln/tea2adt/refs/heads/main/img/figure3.jpg)\n\nA: tea2adt in offline PC (Alice)\n\nD: tea2adt in offline PC (Bob)\n\nB1, B2, C1, C2: waklie-talkie\n\n## Text-to-speech (TTS)\n\n\u003c!-- # ![plot](./img/tts.jpg) --\u003e\n[![Text-to-speech](https://raw.githubusercontent.com/ClarkFieseln/tea2adt/refs/heads/main/img/tts.jpg)](https://www.youtube.com/watch?v=fSdJY9vLBVk\u0026list=PLX24fhcibpHUx7ej_Tp4neobJUqOkqliN\u0026index=12)\n\nThe text received in the chat is synthesized to speech and output to a separate audio interface.\n\nText-to-speech demo video: https://www.youtube.com/watch?v=-ikTdBzhCSw\u0026list=PLX24fhcibpHUx7ej_Tp4neobJUqOkqliN\u0026index=10\n\n## Remote AI Prompt\n\n\u003c!-- # ![plot](./screenshots/20250318_161119.jpg) --\u003e\n[![Text-to-speech](https://raw.githubusercontent.com/ClarkFieseln/tea2adt/refs/heads/main/screenshots/20250318_161119.jpg)](https://www.youtube.com/watch?v=6jYEBNAay64\u0026list=PLX24fhcibpHXllvUgFUw6Ly9cwQcTcKac\u0026index=1\u0026pp=gAQBiAQB)\n\nWith this option you may remotely access your local, secure, and self-hosted AI (like ollama) or AI agent (like OpenClaw) in a secure way!\n\nRemote AI prompt, demo video: https://www.youtube.com/watch?v=6jYEBNAay64\u0026list=PLX24fhcibpHXllvUgFUw6Ly9cwQcTcKac\u0026index=1\u0026pp=gAQBiAQB\n\n## Limitations\nThe data transfer is usually done at low rates, typical of audio systems. Therefore, this tool is not adequate to transmit big files which may take a long time to complete.\n\n## Hints\nAvoid using tools like PulseEffects, they may produce glitches!\n\nIn PuseEffects you may check the 'Add to Block List' option for minimodem and qtox.\n\n## PyPi Project\n\nhttps://pypi.org/project/tea2adt\n\n## GitHub Project\n\nhttps://github.com/ClarkFieseln/tea2adt\n\n## Documentation\n\nhttps://github.com/ClarkFieseln/tea2adt/blob/main/doc/documentation.md\n\n## Screenshots\n\nhttps://github.com/ClarkFieseln/tea2adt/tree/main/screenshots\n\n## Videos\n\nhttps://www.youtube.com/playlist?list=PLX24fhcibpHXllvUgFUw6Ly9cwQcTcKac\n\n## License\n\n(c) 2025 Clark Fieseln\n\nThis repository is licensed under the MIT license. See LICENSE for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclarkfieseln%2Ftea2adt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclarkfieseln%2Ftea2adt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclarkfieseln%2Ftea2adt/lists"}