Mission control for AI-assisted development on Windows: GitHub issues, isolated git worktrees and embedded Claude Code terminals in one app.
Report Bug
·
Request Feature
Table of Contents
Kontext lets you work on all your repositories' issues at once and leave Claude running. Pick an issue and Kontext gives it its own git worktree and an embedded Claude Code terminal, lets you open that worktree in your own tools, and lets you switch between issues instantly. The sidebar shows at a glance which issues are idle, working or waiting for you.
- Every issue in one list. Open issues from all your repositories, grouped by repository, searchable, with a status circle per issue.
- One worktree per issue. Selecting an issue clones the repository when needed, creates a
features/{number}-{title}branch in its own worktree, and opens an empty Claude Code session there. Nothing is asked of you, and nothing is shared between issues. - Know when Claude needs you. Claude Code hooks report whether a session is working or waiting for input; the circle in the sidebar changes accordingly.
- Resume where you left off. Sessions are remembered per issue and continued with
claude --resumeafter a restart. - Open it anywhere. Open a worktree in File Explorer, Windows Terminal or its solution file (
.slnxor.sln, in whatever app is registered for it) from the issue's header. - Clean up when done. For a closed issue, Clear session removes the worktree and its branch.
- Modern Architecture: Built with SOLID principles and design patterns for maximum maintainability: a modular monolith with compiler-enforced module boundaries.
- Native Windows look. WinUI 3 with Mica, light and dark themes, and a terminal with zoom and mouse support.
- .NET 10 and WinUI 3 / Windows App SDK
- CommunityToolkit.Mvvm and
Microsoft.Extensions.Hosting(dependency injection) - CommunityToolkit Labs MarkdownTextBlock for the issue descriptions
- Octokit for GitHub
- EasyWindowsTerminalControl for the embedded terminal
- NUnit for tests
Three small shared projects hold what the modules exchange (Kontext.Kernel the basics, Kontext.Domain the data types, Kontext.Contracts the interfaces). Each feature module (GitHub, GitAutomation, TerminalHost, Claude, ExternalTools, Sessions, Presentation) references only those, and only the WinUI project Kontext references them all and wires them together.
Setting up this solution on your local machine is straightforward and will enable you to fully utilize its capabilities. This guide will walk you through the necessary steps to get everything running smoothly.
Before beginning, ensure that your development environment is properly configured. Having the required software and dependencies installed will prevent common issues and streamline the process.
- Windows 10 version 1809 or later (Windows 11 recommended)
- .NET 10 SDK
- Git for Windows on your
PATH - The Claude Code CLI (
claude) on yourPATH - A GitHub account; you sign in with it on first start (GitHub device flow) and Kontext stores the resulting token in Windows Credential Locker
Sign-in needs a GitHub OAuth App with Device Flow enabled. For local development, copy src/Kontext/appsettings.local.example.json to src/Kontext/appsettings.local.json (git-ignored) and set GitHub:ClientId to the app's client id (the client id is not a secret). CI writes the repository variable KONTEXT_GITHUB_CLIENT_ID into appsettings.json before building. Organisations that restrict OAuth apps must approve the app before their repositories and issues become available.
dotnet build Kontext.slnx -c Release
.\src\Kontext\bin\Release\net10.0-windows10.0.19041.0\win-x64\Kontext.exeStop a running instance before building again, because it locks the build output. Kontext keeps its clones, worktrees and state under %LOCALAPPDATA%\Kontext; set KONTEXT_DATA_DIR to use another folder, for example when trying things out.
dotnet test Kontext.slnx -c ReleaseWarnings are treated as errors. Tests are split by kind, one project per kind and module:
Kontext.*.UnitTestsare fast and in-memory: no filesystem, processes or network.Kontext.*.IntegrationTeststouch the real world: the filesystem, a loopback HTTP server, or realgitagainst a temporary repository.Kontext.ArchitectureTestsandKontext.CompositionTestscheck the module boundaries and the dependency injection wiring.
To run only the unit tests:
Get-ChildItem tests -Recurse -Filter *.UnitTests.csproj | ForEach-Object { dotnet test $_.FullName -c Release }Publishing a GitHub release tagged like v1.2.3 runs the tests, then builds a signed, self-contained x64 MSIX and attaches it to the release together with Kontext.cer, the public certificate. The tag sets the package version. ARM64 is not built because the embedded terminal control only ships x64 binaries.
One-time setup:
- Signing uses the
CERTIFICATE_BASE64(the.pfx, base64 encoded) andCERTIFICATE_PASSWORDsecrets. They are organization secrets ofbuning-software, shared with the other Buning Software apps, and this repository has to be allowed to use them (organization Settings, Secrets and variables, Actions). The certificate subject must equalPublisherinsrc/Kontext/Package.appxmanifest(CN=BuningSoftware). To create a new certificate, for example when it expires, usegenerate_certificate.ps1in the Surveil repository, update both organization secrets, and never commit the.pfx. - Set the repository variable
KONTEXT_GITHUB_CLIENT_ID. An installed MSIX is read-only, so the client id has to be built in; the release fails without it.
To install a release, first trust Kontext.cer once (open it, choose Install Certificate, Local Machine, Trusted People), then open the .msix. Kontext still keeps its data under %LOCALAPPDATA%\Kontext: the package turns off file redirection so your clones and worktrees stay visible to Explorer, terminals and IDEs.
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b features/feature-title) - Commit your Changes (
git commit -m 'Added feature') - Push to the Branch (
git push origin features/feature-title) - Open a Pull Request
Keep the module boundaries described under Built With: every module references only the shared projects, and tests/Kontext.ArchitectureTests enforces it.
Distributed under the GNU Affero General Public License v3.0 License. See LICENSE for more information.