Acp.Net.Process
0.1.1
dotnet add package Acp.Net.Process --version 0.1.1
NuGet\Install-Package Acp.Net.Process -Version 0.1.1
<PackageReference Include="Acp.Net.Process" Version="0.1.1" />
<PackageVersion Include="Acp.Net.Process" Version="0.1.1" />
<PackageReference Include="Acp.Net.Process" />
paket add Acp.Net.Process --version 0.1.1
#r "nuget: Acp.Net.Process, 0.1.1"
#:package Acp.Net.Process@0.1.1
#addin nuget:?package=Acp.Net.Process&version=0.1.1
#tool nuget:?package=Acp.Net.Process&version=0.1.1
Acp.Net.Process
Process, runtime bridge, shutdown, and transcript helpers for .NET ACP integrations.
🇹🇷 Türkçe sürüm: README.tr.md
Minimal Runtime Policy Example
var runner = new AcpProcessRunner(new AcpProcessOptions
{
AgentName = "my-acp-agent",
Command = "python3",
Arguments = ["agent.py"],
TranscriptPath = "artifacts/agent-transcript.ndjson",
RunArtifactPath = "artifacts/agent-run.json",
RequiredTools =
[
AcpRequiredExecutable.Throw("python3"),
AcpRequiredExecutable.Warn("rg")
]
});
Missing Throw tools fail before the agent starts and produce an EnvironmentFailure run artifact. Missing Warn tools are written to the transcript and artifact but the agent still starts.
This package intentionally does not model the ACP protocol schema. It produces the agent's stdio streams and works with any ACP protocol/JSON-RPC package — for example AgentClientProtocol, dotacp, or LibAcp. The samples use AgentClientProtocol.
Install
dotnet add package Acp.Net.Process --prerelease
Basic Usage
using AcpNet.Process;
using AgentClientProtocol;
var runner = new AcpProcessRunner(new AcpProcessOptions
{
Command = "python3",
Arguments = ["/home/user/agent.py"],
Runtime = AcpRuntime.Auto,
TranscriptPath = "agent-transcript.ndjson",
RequiredExecutables = ["rg", "git"],
Shutdown = AcpShutdownPolicy.GracefulThenKill(TimeSpan.FromSeconds(2))
});
await using var session = await runner.StartAsync();
using var connection = new ClientSideConnection(
_ => client,
session.Stdout,
session.Stdin);
connection.Open();
var cwdForAgent = session.ToAgentPath(Directory.GetCurrentDirectory());
Windows note:
AcpRuntime.Autoruns the command natively unless it detects a WSL agent. For a POSIX agent such aspython3, setRuntime = AcpRuntime.Wslexplicitly (see below), or keepAutowith a WSL agent path. As of0.1.0-alpha.2, when a bare command likepython3resolves only to a Windows Store execution-alias stub,Autoroutes it through WSL and preflight reports the stub as missing instead of hanging.
Windows + WSL
When a Windows .NET process needs to run a WSL/Linux ACP agent, use AcpRuntime.Wsl or leave AcpRuntime.Auto with WSL paths:
var runner = new AcpProcessRunner(new AcpProcessOptions
{
Command = "python3",
Arguments = ["/home/user/agent.py"],
Runtime = AcpRuntime.Wsl,
WslDistribution = "Ubuntu"
});
The runner maps UNC/Windows paths to WSL paths and starts the process through wsl.exe.
Use session.ToAgentPath(...) for ACP payload paths such as NewSessionRequest.Cwd when the agent runs in WSL.
Environment Shaping
var runner = new AcpProcessRunner(new AcpProcessOptions
{
Command = "gemini",
Arguments = ["--acp"],
Runtime = AcpRuntime.Wsl,
AdditionalPathEntries = ["/usr/bin", "/home/user/.local/bin"],
Environment = new Dictionary<string, string?>
{
["GEMINI_DEBUG"] = "1"
},
RequiredExecutables = ["rg", "git", "node"]
});
RequiredExecutables are checked before the agent starts and written to the transcript as preflight.tool.found or preflight.tool.missing events.
Public API
AcpProcessRunnerAcpProcessOptionsAcpProcessSessionAcpRequiredExecutableAcpMissingExecutablePolicyAcpExecutablePreflightResultAcpPreflightExceptionAcpRunArtifactAcpRunFailureKindAcpRuntimeAcpShutdownPolicyAcpTranscriptRecorder
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.1 | 146 | 7/26/2026 |
| 0.1.0 | 103 | 7/17/2026 |
| 0.1.0-alpha.2 | 70 | 6/13/2026 |
| 0.1.0-alpha.1 | 68 | 6/11/2026 |
0.1.1: Two silent-failure fixes found by the first real consumer. WSL route: arguments after -- are now POSIX-quoted for the shell that actually receives them, so payloads containing parentheses, semicolons or quotes no longer produce empty stdout or syntax errors. RecordingTextReader: Read, ReadToEnd and the other TextReader members forward to the inner reader instead of inheriting defaults that silently returned empty; char-level reads are recorded per line. No API changes.