Agent / kontrolowane zadania
Pierwsza kontrolowana zmiana
Zmień powitanie w jednym pliku i sprawdź, czy projekt nadal się buduje. Przykład korzysta z rzeczywistego CLI Agenta w osobnym katalogu testowym.
1. Ustalamy cel i zakres
Mały projekt .NET wypisuje Hello. Chcemy zmienić je na Hello Junexis. Plan wskazuje jeden plik, dokładną zamianę tekstu i budowanie projektu. Nie dotyczy portalu ani Twojego istniejącego repozytorium.
Przed:
Console.WriteLine("Hello");
2. Agent wykonuje jawny plan
| Krok | Działanie | Rola Roda |
|---|---|---|
| Znajdź | Wyszukaj powitanie w projekcie. | Odczyt jest dozwolony przez regułę tej próby. |
| Zmień | Zastąp dokładnie wskazany tekst w Program.cs. | Wymagana polityka zmiany jest jawnie zatwierdzona w planie. |
| Sprawdź | Zbuduj Example.csproj. | Plan jawnie akceptuje ostrzeżenie dotyczące wykonania builda. |
To nie rozmowa z modelem ani samodzielne odgadywanie zamiaru. Agent otrzymał przygotowany plan. Wpisana w nim zgoda nie jest niezależnym dowodem autoryzacji człowieka — klient musi prawidłowo kontrolować jej przekazanie.
3. Widzimy zmianę i wynik
Po wykonaniu:
Console.WriteLine("Hello Junexis");
| Krok | Decyzja | Kod zakończenia |
|---|---|---|
| search | Allow | 0 |
| apply-patch | RequireConfirmation | 0 |
| build | AllowWithWarning | 0 |
Agent zgłosił zakończenie zadania i zmianę Program.cs. Poza wykonaniem planu uruchomiliśmy zbudowany program i sprawdziliśmy, że wypisuje:
Hello Junexis
Build jest krokiem Agenta; dodatkowe uruchomienie programu to osobne sprawdzenie tej próby, nie automatyczna funkcja każdego zadania.
Sesja zachowuje kroki oraz informacje o zmienionym pliku. Można odróżnić zamiar, decyzję Roda i wykonany rezultat.
Dla zainteresowanych: plan i rzeczywisty raport
W pokazanym planie ścieżkę katalogu zastąpiono przykładową. W raporcie lokalne ścieżki zastąpiono znacznikami [example] i [workspace]; decyzje, wyniki i treść zmiany zachowano.
{
"goal": "Change one greeting and build the example",
"repositoryRoot": "C:\\Junexis-Test\\agent-example",
"acceptWarnings": true,
"approvedPolicyIds": [
"rod.mvp.edit-confirmation"
],
"steps": [
{
"toolName": "search",
"arguments": {
"query": "Hello",
"path": "."
}
},
{
"toolName": "apply-patch",
"arguments": {
"path": "Program.cs",
"oldText": "Hello",
"newText": "Hello Junexis"
}
},
{
"toolName": "build",
"arguments": {
"target": "Example.csproj",
"timeoutSeconds": "120"
}
}
]
}
{
"sessionId": "c9fd22fbf9e74c368f81ae21eb2bd463",
"goal": "Change one greeting and build the example",
"repositoryRoot": "[example]",
"status": "Completed",
"steps": [
{
"toolName": "search",
"decision": "Allow",
"policyId": "rod.mvp.read-only",
"reason": "Read-only repository operations are allowed.",
"exitCode": 0,
"standardOutput": "Program.cs:1:Console.WriteLine(\"Hello\");\r\ntask.json:1:{\"goal\": \"Change one greeting and build the example\", \"repositoryRoot\": \"C:\\\\Users\\\\andrz\\\\Repository\\\\Junexis-platform\\\\.artifacts\\\\agent-portal-review\\\\demo-21754f30\", \"acceptWarnings\": true, \"approvedPolicyIds\": [\"rod.mvp.edit-confirmation\"], \"steps\": [{\"toolName\": \"search\", \"arguments\": {\"query\": \"Hello\", \"path\": \".\"}}, {\"toolName\": \"apply-patch\", \"arguments\": {\"path\": \"Program.cs\", \"oldText\": \"Hello\", \"newText\": \"Hello Junexis\"}}, {\"toolName\": \"build\", \"arguments\": {\"target\": \"Example.csproj\", \"timeoutSeconds\": \"120\"}}]}\r\n.junexis/agent-events.jsonl:8:{\"kind\":\"TaskFinished\",\"sessionId\":\"21b5db164b6847789d283091cad74889\",\"goal\":\"Change one greeting and build the example\",\"repositoryRoot\":\"C:\\\\Users\\\\andrz\\\\Repository\\\\Junexis-platform\\\\.artifacts\\\\agent-portal-review\\\\demo-21754f30\",\"timestamp\":\"2026-10-25T09:35:02.8208711+00:00\",\"toolName\":null,\"status\":\"Failed\",\"exitCode\":null,\"policyId\":null,\"changedFiles\":[\"Program.cs\"],\"correlationId\":null,\"report\":{\"sessionId\":\"21b5db164b6847789d283091cad74889\",\"goal\":\"Change one greeting and build the example\",\"repositoryRoot\":\"C:\\\\Users\\\\andrz\\\\Repository\\\\Junexis-platform\\\\.artifacts\\\\agent-portal-review\\\\demo-21754f30\",\"status\":\"Failed\",\"steps\":[{\"toolName\":\"search\",\"decision\":\"Allow\",\"policyId\":\"rod.mvp.read-only\",\"reason\":\"Read-only repository operations are allowed.\",\"exitCode\":0,\"standardOutput\":\"Program.cs:1:Console.WriteLine(\\u0022Hello\\u0022);\\r\\ntask.json:1:{\\u0022goal\\u0022: \\u0022Change one greeting and build the example\\u0022, \\u0022repositoryRoot\\u0022: \\u0022C:\\\\\\\\Users\\\\\\\\andrz\\\\\\\\Repository\\\\\\\\Junexis-platform\\\\\\\\.artifacts\\\\\\\\agent-portal-review\\\\\\\\demo-21754f30\\u0022, \\u0022acceptWarnings\\u0022: true, \\u0022approvedPolicyIds\\u0022: [\\u0022rod.mvp.edit-confirmation\\u0022], \\u0022steps\\u0022: [{\\u0022toolName\\u0022: \\u0022search\\u0022, \\u0022arguments\\u0022: {\\u0022query\\u0022: \\u0022Hello\\u0022, \\u0022path\\u0022: \\u0022.\\u0022}}, {\\u0022toolName\\u0022: \\u0022apply-patch\\u0022, \\u0022arguments\\u0022: {\\u0022path\\u0022: \\u0022Program.cs\\u0022, \\u0022oldText\\u0022: \\u0022Hello\\u0022, \\u0022newText\\u0022: \\u0022Hello Junexis\\u0022}}, {\\u0022toolName\\u0022: \\u0022build\\u0022, \\u0022arguments\\u0022: {\\u0022target\\u0022: \\u0022Example.csproj\\u0022, \\u0022timeoutSeconds\\u0022: \\u0022120\\u0022}}]}\",\"standardError\":\"\"},{\"toolName\":\"apply-patch\",\"decision\":\"RequireConfirmation\",\"policyId\":\"rod.mvp.edit-confirmation\",\"reason\":\"Repository changes require explicit confirmation.\",\"exitCode\":0,\"standardOutput\":\"Program.cs\",\"standardError\":\"\"},{\"toolName\":\"build\",\"decision\":\"AllowWithWarning\",\"policyId\":\"rod.mvp.validation-warning\",\"reason\":\"Controlled validation may execute code and create local artifacts.\",\"exitCode\":1,\"standardOutput\":\" Trwa okre\\u015Blanie projekt\\u00F3w do przywr\\u00F3cenia...\\r\\n Przywr\\u00F3cono element C:\\\\Users\\\\andrz\\\\Repository\\\\Junexis-platform\\\\.artifacts\\\\agent-portal-review\\\\demo-21754f30\\\\Example.csproj (w 105 ms).\\r\\nC:\\\\Users\\\\andrz\\\\Repository\\\\Junexis-platform\\\\.artifacts\\\\agent-portal-review\\\\demo-21754f30\\\\Program.cs(1,1): error CS0103: Nazwa \\u201EConsole\\u201D nie istnieje w bie\\u017C\\u0105cym kontek\\u015Bcie [C:\\\\Users\\\\andrz\\\\Repository\\\\Junexis-platform\\\\.artifacts\\\\agent-portal-review\\\\demo-21754f30\\\\Example.csproj]\\r\\n\\r\\nKompilacja NIE POWIOD\\u0141A SI\\u0118.\\r\\n\\r\\nC:\\\\Users\\\\andrz\\\\Repository\\\\Junexis-platform\\\\.artifacts\\\\agent-portal-review\\\\demo-21754f30\\\\Program.cs(1,1): error CS0103: Nazwa \\u201EConsole\\u201D nie istnieje w bie\\u017C\\u0105cym kontek\\u015Bcie [C:\\\\Users\\\\andrz\\\\Repository\\\\Junexis-platform\\\\.artifacts\\\\agent-portal-review\\\\demo-21754f30\\\\Example.csproj]\\r\\n Ostrze\\u017Cenia: 0\\r\\n Liczba b\\u0142\\u0119d\\u00F3w: 1\\r\\n\\r\\nCzas, kt\\u00F3ry up\\u0142yn\\u0105\\u0142: 00:00:04.59\\r\\n\",\"standardError\":\"\"}],\"changedFiles\":[\"Program.cs\"],\"fileStates\":[{\"path\":\"Program.cs\",\"beforeSha256\":\"99D4219CF9F66A4606527948B2B3A9CF4B7405622B47DE5CA200633D7EFEFE18\",\"afterSha256\":\"EC81FA288545178DECFCAE19CF03214CA60DA2200A90BC387ECB63FFB38CAC8D\",\"existsAfter\":true,\"diff\":\"--- a/Program.cs\\r\\n\\u002B\\u002B\\u002B b/Program.cs\\r\\n@@\\r\\n-Hello\\r\\n\\u002BHello Junexis\"}]}}\r\n.junexis/sessions/21b5db164b6847789d283091cad74889.json:13: \"standardOutput\": \"Program.cs:1:Console.WriteLine(\\u0022Hello\\u0022);\\r\\ntask.json:1:{\\u0022goal\\u0022: \\u0022Change one greeting and build the example\\u0022, \\u0022repositoryRoot\\u0022: \\u0022C:\\\\\\\\Users\\\\\\\\andrz\\\\\\\\Repository\\\\\\\\Junexis-platform\\\\\\\\.artifacts\\\\\\\\agent-portal-review\\\\\\\\demo-21754f30\\u0022, \\u0022acceptWarnings\\u0022: true, \\u0022approvedPolicyIds\\u0022: [\\u0022rod.mvp.edit-confirmation\\u0022], \\u0022steps\\u0022: [{\\u0022toolName\\u0022: \\u0022search\\u0022, \\u0022arguments\\u0022: {\\u0022query\\u0022: \\u0022Hello\\u0022, \\u0022path\\u0022: \\u0022.\\u0022}}, {\\u0022toolName\\u0022: \\u0022apply-patch\\u0022, \\u0022arguments\\u0022: {\\u0022path\\u0022: \\u0022Program.cs\\u0022, \\u0022oldText\\u0022: \\u0022Hello\\u0022, \\u0022newText\\u0022: \\u0022Hello Junexis\\u0022}}, {\\u0022toolName\\u0022: \\u0022build\\u0022, \\u0022arguments\\u0022: {\\u0022target\\u0022: \\u0022Example.csproj\\u0022, \\u0022timeoutSeconds\\u0022: \\u0022120\\u0022}}]}\",\r\n.junexis/sessions/21b5db164b6847789d283091cad74889.json:40: \"diff\": \"--- a/Program.cs\\r\\n\\u002B\\u002B\\u002B b/Program.cs\\r\\n@@\\r\\n-Hello\\r\\n\\u002BHello Junexis\"",
"standardError": ""
},
{
"toolName": "apply-patch",
"decision": "RequireConfirmation",
"policyId": "rod.mvp.edit-confirmation",
"reason": "Repository changes require explicit confirmation.",
"exitCode": 0,
"standardOutput": "Program.cs",
"standardError": ""
},
{
"toolName": "build",
"decision": "AllowWithWarning",
"policyId": "rod.mvp.validation-warning",
"reason": "Controlled validation may execute code and create local artifacts.",
"exitCode": 0,
"standardOutput": " Trwa określanie projektów do przywrócenia...\r\n Wszystkie projekty są aktualne na potrzeby przywrócenia.\r\n Example -> [example]\\bin\\Debug\\net10.0\\Example.dll\r\n\r\nKompilacja powiodła się.\r\n Ostrzeżenia: 0\r\n Liczba błędów: 0\r\n\r\nCzas, który upłynął: 00:00:05.80\r\n",
"standardError": ""
}
],
"changedFiles": [
"Program.cs"
],
"fileStates": [
{
"path": "Program.cs",
"beforeSha256": "99D4219CF9F66A4606527948B2B3A9CF4B7405622B47DE5CA200633D7EFEFE18",
"afterSha256": "EC81FA288545178DECFCAE19CF03214CA60DA2200A90BC387ECB63FFB38CAC8D",
"existsAfter": true,
"diff": "--- a/Program.cs\r\n+++ b/Program.cs\r\n@@\r\n-Hello\r\n+Hello Junexis"
}
]
}
Jak skorzystać z obecnego CLI?
Potrzebujesz przygotowanych repozytoriów Agenta, Rod, Tools i Memory oraz .NET zgodnego z ich konfiguracją. W katalogu junexis-agent punkt wejścia wygląda tak:
dotnet run --project src/Junexis.Agent.Cli -- task.json --json
Plan musi wskazywać Twój osobny, przygotowany katalog przykładu. Nie uruchamiaj go bez sprawdzenia celu, kroków i zgód. Przykładowy projekt powinien zawierać Program.cs z treścią powyżej oraz standardowy konsolowy Example.csproj .NET 10.
Brak zatwierdzenia wymaganej polityki blokuje zależny krok. Nie omijaj tego przez bezrefleksyjne dodawanie zgód do planu. Poznaj role komponentów.