Skip to content

Commit d5fb16d

Browse files
committed
docs: Add more content and TODO items
1 parent f656cb5 commit d5fb16d

File tree

8 files changed

+240
-17
lines changed

8 files changed

+240
-17
lines changed

.obsidian/workspace.json

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,30 @@
2020
"icon": "lucide-file",
2121
"title": "cli-spec"
2222
}
23+
},
24+
{
25+
"id": "cec459d507bf0a2b",
26+
"type": "leaf",
27+
"state": {
28+
"type": "markdown",
29+
"state": {
30+
"file": "specs/fs-snapshots/overview.md",
31+
"mode": "source",
32+
"source": false,
33+
"backlinks": true,
34+
"backlinkOpts": {
35+
"collapseAll": false,
36+
"extraContext": false,
37+
"sortOrder": "alphabetical",
38+
"showSearch": false,
39+
"searchQuery": "",
40+
"backlinkCollapsed": false,
41+
"unlinkedCollapsed": true
42+
}
43+
},
44+
"icon": "lucide-file",
45+
"title": "overview"
46+
}
2347
}
2448
]
2549
}
@@ -53,7 +77,7 @@
5377
"state": {
5478
"type": "search",
5579
"state": {
56-
"query": "",
80+
"query": "incremental",
5781
"matchingCase": false,
5882
"explainSearch": false,
5983
"collapseAll": false,
@@ -170,9 +194,33 @@
170194
},
171195
"active": "01bf72509d2b5652",
172196
"lastOpenFiles": [
173-
"docs/state-persistence.md",
174-
"specs/configuration.md",
197+
"specs/@initial-developer-input/Configuration.md",
175198
"specs/cli-spec.md",
176-
"specs/connectivity-layer.md"
199+
"specs/@initial-developer-input/WebUI, TUI, REST Service.md",
200+
"specs/@initial-developer-input",
201+
"specs/local-mode.md",
202+
"specs/fs-snapshots/overview.md",
203+
"specs/fs-snapshots/milestone_5.md",
204+
"specs/fs-snapshots/milestone_4.md",
205+
"specs/fs-snapshots/milestone_3.md",
206+
"specs/fs-snapshots/milestone_2.md",
207+
"specs/fs-snapshots/milestone_1.md",
208+
"specs/agent-time-travel.md",
209+
"specs/webui-prd.md",
210+
"specs/tui-prd.md",
211+
"specs/rest-service.md",
212+
"specs/sandbox-profiles.md",
213+
"specs/remote-mode.md",
214+
"specs/prompt-engineering.md",
215+
"specs/multi-os-testing.md",
216+
"specs/lima-vm-images.md",
217+
"specs/extras-framework.md",
218+
"specs/devcontainer-setup.md",
219+
"specs/devcontainer-design.md",
220+
"specs/connectivity-layer.md",
221+
"specs/configuration.md",
222+
"specs/schemas/AGENTS.md",
223+
"specs/agents/_template.md",
224+
"specs/@research"
177225
]
178226
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
Help me create a specification for the configuration system of the Blocksense-network agents-workflow project (you can find it on GitHub) The configuration will respect multiple layers:
2+
3+
1) Default values provided by the projects maintainers.
4+
2) OS-level configuration values that may be specified by a Linux distribution maintainer or a system administrator managing a team of users.
5+
3) User preferences stored in the profile
6+
4) Settings specified for a particular project in its GitHub repository.
7+
5) Per-project settings that may be overridden by the user.
8+
6) Settings specified in ENV variables
9+
7) Settings specified on the command line.
10+
11+
The order above matches the order of priority with one exception. The system administrator can enforce certain setting preventing the user from overriding them. The system should be cross-platform. It will offer the same interface across all operating systems, but optionally may support OS-specific mechanisms that system administrators typically use for managing employee configurations in enterprise environments.
12+
13+
We'll use TOML as the configuration format. I’m open to suggestions regarding the admin settings enforcement, but file system permissions seem like a reasonable way to handle this (or other similar read-only configuration stores). Our design should aim to provide consistent user experience across platforms, but it may provide an opt-in support for platform-specific approaches where this would enhance the ability of system administrators to manage the configuration of the employee’s computers in an enterprise environment. The agents workflow project is expected to have mobile clients/front-ends (iOS, Android, etc), so exploring their configurability options to cover our requirements will be good.
14+
15+
We’ll prefix all ENV variables with AGENTS_WORKFLOW_ for maximum clarity in scripts where they are used. Each setting will have its own flag (e.g. —log-level) 3). We will support the `~/.config/…` directory on Windows too, as some users might prefer the consistency. When settings are available in both `APPDATA` and `~/.config`, the later will take precedence. Agents workflow already uses an `.agents` folder in the user’s repo, so we can store the per-project configuration files there. There will be a command `aw config` for reading and applying changes to the various configuration files. When you ask for a value of a particular setting, the tool will give you a detailed report in which files the setting appeared. This would serve as an explanation why it was enforced when this is the case. When the log level is increased to debug, the CLI tools will report the config files they are trying to read. The agent-task command presents an editor where the user enters the task description. Within the loaded editor, there are commented out lines that explain what the user must do. Within this message there will be also an indication of the action that will be executed after the editor is closed. This action will depend on the loaded configuration, so the message will indicate which configuration source specified it. This requires that the configuration loading system maintains information about the origin of each setting.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
I'd like to write few more specs in the docs folder. Before we start please read the existing docs.
2+
3+
1) It will be possible to launch agents-workflow as a REST service. The service will be able to spawn tasks on demand and list currently active coding sessions (as explained in [fs-snapshots-overview](../fs-snapshots/overview.md)). We need a document describing the purpose of this service and its specification. It's intended for usage by companies that set up on-premise or private cloud clusters for running coding tasks or for developers who prefer a WebUI experience.
4+
5+
2) There will be a WebUI front-end that will consume the REST service. It needs something like PRD document and detailed spec of its UI.
6+
7+
3) There will be a similar TUI, providing a dashboard of currently running tasks and allowing the launching of new tasks. It needs a PRD document and detailed spec of its UI. The TUI will be built around tmux, zellij or screen (all of them will be supported). The default view is a dashboard of the currently running tasks, featuring an easy way to start a new task. When a new task is launched, a new tmux windows is created split in two - on the right side the user sees the AI agent working. On the left side, a terminal is launched within the newly created per-task FS mount. The user can also decide to launch a text editor like vim, emacs or another instead of a terminal (since these editors have built-in terminal).
8+
9+
4) The user will also be able to spawn the new task inside Visual Studio Code, Cursor or Windsurf (using their built-in agents).
10+
11+
5) The user will be able to spawn a terminal-based agent, such as Claude Code next to a GUI editor launched in the task-specific FS mount.
12+
13+
Usually the agents work in devcontainers, but it's possible to launch the agent locally with a more minimal sandbox or no sandbox at all (this is intended for environments that are already well-sandboxed, such as VMs)
14+
15+
The WebUI will feature a list of repositories on the left. Each repo will feature a plus button that is used for the creation of a new task. In the central feed, the user sees the list of submitted tasks according to their chnological order. Each task card has sufficient status indicators and potentially a single line that live-updates with the last action of the agent. Clicking on a task adds another pane on the right with a live log of the task or a final report including the created diff. The feed of tasks and the list of projects can be collapsed to the left to take less space.
16+
17+
When the new task button is pressed, this creates a new task card at the top of the task list. The card has a vertically resizable input box for the task description.
18+
19+
Below it, there is a combo-box for selecting a branch, which comes preconfigured to the default branch for task creating in the repo (typically the main branch). You can also specify the coding agent and the number of concurrent instances (available for some of the agents). There is a right aligned button start. Before pressing start, any edits are auto saved in a draft mode. You can have multiple tasks as drafts. There is a button for deleting a draft.
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
Yes—SSH can traverse an **HTTPS proxy**, but SSH itself doesn’t “speak HTTPS.” You have a few practical ways to make it work:
2+
3+
# 1) HTTP/HTTPS CONNECT tunnel (most common)
4+
5+
Use the proxy’s **CONNECT** method to create a raw TCP tunnel to your SSH server. From SSH’s point of view, it’s a normal TCP connection.
6+
7+
- **No proxy auth (HTTP proxy on :8080):**
8+
9+
10+
```bash
11+
ssh -o 'ProxyCommand=nc -X connect -x proxy.company.com:8080 %h %p' [email protected]
12+
```
13+
14+
(Requires the OpenBSD flavor of `nc` that supports `-X connect -x`.)
15+
16+
- **Proxy requires auth or TLS (“HTTPS proxy” on :443):**
17+
Use a helper that understands CONNECT + (optional) TLS and auth, e.g. **proxytunnel** or **corkscrew**.
18+
19+
20+
```bash
21+
# HTTPS proxy (with or without Basic auth)
22+
ssh -o 'ProxyCommand=proxytunnel -p proxy.company.com:443 -d %h:%p' [email protected]
23+
# If needed, add auth: -P user:pass
24+
```
25+
26+
```bash
27+
# HTTP proxy with Basic auth
28+
ssh -o 'ProxyCommand=corkscrew proxy.company.com 8080 %h %p ~/.proxy-auth' [email protected]
29+
```
30+
31+
> Notes
32+
>
33+
> - Many corporate proxies only allow CONNECT to ports like **443**. If so, have your SSH server listen on 443 (or use a port-forwarder on the server) and CONNECT to that.
34+
>
35+
> - Some proxies do TLS interception and require a real TLS handshake (ALPN/SNI). In that case, raw SSH on :443 won’t pass—use the TLS-wrapped options below.
36+
>
37+
38+
# 2) Wrap SSH in TLS so it “looks like HTTPS”
39+
40+
If the proxy (or middleboxes) insist on seeing TLS, run a TLS wrapper on both ends and tunnel SSH through it.
41+
42+
**Server (stunnel)**
43+
44+
```ini
45+
[ssh]
46+
accept = 0.0.0.0:443
47+
cert = /etc/ssl/certs/fullchain.pem
48+
key = /etc/ssl/private/privkey.pem
49+
connect = 127.0.0.1:22
50+
```
51+
52+
**Client (stunnel)**
53+
54+
```ini
55+
[ssh]
56+
client = yes
57+
accept = 127.0.0.1:2222
58+
connect = your.domain.tld:443
59+
verifyChain = yes
60+
CAfile = /path/to/ca.pem
61+
```
62+
63+
Then:
64+
65+
```bash
66+
ssh -p 2222 [email protected]
67+
```
68+
69+
This satisfies “HTTPS-like” inspection because a real TLS session is established first.
70+
71+
# 3) SSH over WebSocket/HTTP2 (when CONNECT is restricted)
72+
73+
Use a tool that tunnels TCP over **WSS** (WebSocket over TLS), e.g. **chisel**, **websocat**, etc. This often passes strict proxies/firewalls that permit only browser-like traffic.
74+
75+
- Run a WSS server behind the proxy and a client locally, then point SSH at the local forwarded port.
76+
77+
78+
---
79+
80+
## Common pitfalls & tips
81+
82+
- **Proxy policies:** Some proxies restrict CONNECT targets; use port 443 on the SSH server if necessary.
83+
84+
- **Auth schemes:** Basic is easy; NTLM/Kerberos may require a local helper like **cntlm** to convert to Basic for tools like corkscrew/proxytunnel.
85+
86+
- **OpenSSH options:** `ProxyCommand` is the knob for all of the above. (`ProxyJump` is for SSH jump hosts, not HTTP proxies.)
87+
88+
- **Security:** Still validate TLS (CAfile/verifyChain) when using TLS-wrappers; don’t send proxy creds in shell history.
89+
90+
91+
If you share your OS and the proxy’s auth type (none/Basic/NTLM) I can give a copy-pasteable config tailored to your setup.

0 commit comments

Comments
 (0)