TogetherHelp is a small self-hosted helper for colleague-to-colleague support in Windows Remote Desktop / Citrix environments.
A user who needs help creates a short one-time code. A permitted helper enters that code. TogetherHelp resolves the target Windows server, user and session ID and starts the built-in Windows Remote Assistance client (msra.exe /offerra). The person receiving help must explicitly approve the connection and remote control.
TogetherHelp does not implement a remote-desktop protocol and the broker never receives screen contents, keyboard input or mouse input.
- Windows client: C# / WinForms / .NET 10
- Broker: C# / ASP.NET Core / .NET 10
- Deployment: Docker + any HTTPS reverse proxy
- Remote-control transport: Windows Remote Assistance
- The requester starts
TogetherHelp.exeinside their Windows/Citrix session. - The requester chooses Create connection code.
- The broker stores a short-lived mapping of server + user + session and returns an 8-digit code.
- A helper enters the code in the same client.
- The code is consumed once and the broker returns the target metadata.
- The helper client starts:
msra.exe /offerra <server> "<DOMAIN\\user>:<session-id>"
- Windows asks the target user to approve the support session.
- 8-digit cryptographically random one-time codes
- default lifetime: 5 minutes
- codes are stored only as HMAC-SHA256 values
- all pending requests are kept only in RAM
- broker restart intentionally invalidates every pending code
- rate limiting is enabled
- allowed server names can be restricted by regular expression
- the broker has no remote-control capability itself
- Windows policy decides which AD users/groups may offer assistance
- the target user must explicitly approve Remote Assistance
The MVP broker does not authenticate API clients. Deploy it only behind an HTTPS reverse proxy and preferably restrict access to trusted internal networks/VPN. Do not expose the broker directly to the public Internet without adding authentication and stronger abuse controls.
Broker logs contain Windows user identities and session metadata. Treat those logs according to your organization's privacy and retention policy.
Configure Offer Remote Assistance on all Windows session hosts and allow a dedicated helper group. See docs/windows-gpo.md.
cp .env.example .env
openssl rand -base64 48
# put the generated value into CODE_PEPPER in .env
docker compose up -d --build
curl http://127.0.0.1:8095/healthzAdd the example reverse-proxy configuration from deploy/nginx-example.conf to your HTTPS virtual host.
Set the broker URL, then run the client:
$env:TOGETHERHELP_API = 'https://support.example.org/remote-assistance/api/'
.\TogetherHelp.exeFor build and deployment details see docs/deployment.md.
The repository includes GitHub Actions for the Windows client and broker. Locally:
dotnet build src/TogetherHelp.Broker/TogetherHelp.Broker.csproj -c ReleaseWindows client:
dotnet publish src/TogetherHelp.Client/TogetherHelp.Client.csproj `
--configuration Release `
--runtime win-x64 `
--self-contained true `
--output artifacts/clientTogetherHelp is intended for interactive, consent-based support. It is not intended for unattended access, hidden monitoring, privilege elevation, or endpoint administration.
Apache License 2.0.