Skip to content

Commit fff964c

Browse files
Add GitHub Pages site for foragent.dev; refresh README for alpha status (#15)
- /docs/index.md landing page: purpose, scenarios, quick start, resource links, contributing - /docs/_config.yml Jekyll config (cayman theme, excludes archive/framework-feedback/README) - /docs/CNAME pins custom domain to foragent.dev - README: drop "not yet functional" warning (v0.2 has shipped), expand capabilities list, add docker-compose quick start, link to foragent.dev and docs/ Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent f81317e commit fff964c

4 files changed

Lines changed: 243 additions & 13 deletions

File tree

README.md

Lines changed: 70 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,46 @@
11
# Foragent
22

3-
> ⚠️ **Early development — APIs will change without notice.**
3+
> ⚠️ **Alpha quality — APIs will change without notice.** v0.2 has shipped
4+
> end-to-end but the project is still pre-1.0 and is not yet publishing
5+
> NuGet or Docker artifacts.
46
57
**Foragent** is an A2A-native browser agent for .NET. It exposes browser
6-
automation capabilities (navigate, extract, fill forms, post to sites,
7-
monitor pages) over the [Agent2Agent (A2A) protocol](https://google.github.io/A2A/). Other agents
8-
delegate browser work to Foragent rather than reasoning about DOM selectors
9-
or session management themselves.
8+
automation capabilities over the
9+
[Agent2Agent (A2A) protocol](https://google.github.io/A2A/) so other
10+
agents can delegate browser work rather than reasoning about DOM
11+
selectors, login flows, or session management themselves.
1012

1113
Foragent is built on the [RockBot framework](https://github.com/MarimerLLC/rockbot)
1214
and uses [Microsoft.Playwright](https://playwright.dev/dotnet/) for browser
1315
automation.
1416

17+
Project site: [foragent.dev](https://foragent.dev)
18+
1519
## Build status
1620

1721
![CI](https://github.com/MarimerLLC/foragent/actions/workflows/ci.yml/badge.svg)
1822

1923
## What Foragent does
2024

21-
- Accepts browser tasks from other agents via A2A
22-
- Executes tasks using a real browser (Playwright) with LLM-assisted selector
23-
resolution (Microsoft.Extensions.AI)
24-
- Returns structured results over A2A
25-
- Manages browser contexts per task; keeps credentials inside the process
25+
- Accepts browser tasks from other agents via A2A (RabbitMQ or HTTP)
26+
- Executes tasks in a real browser (Chromium via Playwright) with
27+
LLM-in-the-loop planning over ref-annotated aria snapshots
28+
- Manages one shared browser per process with a fresh `BrowserContext`
29+
per task for isolation
30+
- Keeps credentials inside the Foragent process — callers reference
31+
them by id, never by value
32+
- Learns from successful tasks: persists reusable site skills and
33+
form schemas, consolidated by a daily dream pass
34+
35+
Advertised capabilities today:
36+
37+
- `browser-task` — LLM-planned multi-step browser work under a host
38+
allowlist
39+
- `learn-form-schema` — scan a form and persist a typed schema
40+
- `execute-form-batch` — submit a batch of rows against a learned
41+
schema
42+
43+
See [docs/capabilities.md](docs/capabilities.md) for the full contract.
2644

2745
## What Foragent is not
2846

@@ -32,8 +50,48 @@ automation.
3250

3351
## Getting started
3452

35-
> ⚠️ The agent is not yet functional. See `docs/architecture.md` for the
36-
> planned design and `docs/capabilities.md` for planned capabilities.
53+
The fastest path is the end-to-end dev harness at the repo root:
54+
55+
```bash
56+
docker compose up --build
57+
```
58+
59+
That brings up RabbitMQ, Foragent (HTTP A2A on `http://localhost:5210`),
60+
and a RockBot agent seeded to know about Foragent as an A2A peer. The
61+
agent-card is published at
62+
`http://localhost:5210/.well-known/agent-card.json`; the authenticated
63+
JSON-RPC endpoint is `POST http://localhost:5210/` with header
64+
`X-Api-Key: rockbot-calls-foragent`. A curl-based smoke test is at the
65+
top of `docker-compose.yml`.
66+
67+
For local builds without Docker:
68+
69+
```bash
70+
dotnet restore
71+
dotnet build --configuration Release
72+
dotnet test --configuration Release
73+
```
74+
75+
Target framework is **.NET 10**. Foragent requires an LLM — configure
76+
`ForagentLlm:Endpoint`, `ModelId`, and `ApiKey` (see
77+
[docs/architecture.md](docs/architecture.md) for the full configuration
78+
surface).
79+
80+
## Documentation
81+
82+
- [Specification](docs/foragent-specification.md) — the governing
83+
design document (v0.2)
84+
- [Architecture](docs/architecture.md) — how the pieces fit together
85+
- [Capabilities](docs/capabilities.md) — what Foragent exposes over A2A
86+
- [Credentials](docs/credentials.md) — how credentials are modeled and
87+
resolved
88+
89+
## Contributing
90+
91+
External code contributions are not yet open — see
92+
[CONTRIBUTING.md](CONTRIBUTING.md). Bug reports and capability
93+
suggestions via [issues](https://github.com/MarimerLLC/foragent/issues)
94+
are welcome.
3795

3896
## License
3997

docs/CNAME

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
foragent.dev
1+
foragent.dev

docs/_config.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
title: Foragent
2+
description: An A2A-native browser agent for .NET
3+
url: https://foragent.dev
4+
5+
theme: jekyll-theme-cayman
6+
7+
# GitHub repository metadata (used by the theme for the header links)
8+
repository: MarimerLLC/foragent
9+
show_downloads: false
10+
11+
# Don't publish these in the rendered site
12+
exclude:
13+
- archive/
14+
- framework-feedback.md
15+
- README.md
16+
17+
# Markdown + syntax highlighting
18+
markdown: kramdown
19+
kramdown:
20+
input: GFM
21+
syntax_highlighter: rouge

docs/index.md

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
---
2+
layout: default
3+
title: Foragent
4+
description: An A2A-native browser agent for .NET
5+
---
6+
7+
# Foragent
8+
9+
**An A2A-native browser agent for .NET.** Other agents delegate browser
10+
work to Foragent rather than reasoning about DOM selectors, login flows,
11+
or session management themselves.
12+
13+
Foragent is built on the [RockBot framework](https://github.com/MarimerLLC/rockbot)
14+
and uses [Microsoft.Playwright](https://playwright.dev/dotnet/) for browser
15+
automation. It speaks the
16+
[Agent2Agent (A2A) protocol](https://google.github.io/A2A/) over RabbitMQ
17+
and HTTP.
18+
19+
> ⚠️ **Early development.** APIs change without notice. External
20+
> contributions are not yet open — see [Contributing](#contributing) below.
21+
22+
---
23+
24+
## Why Foragent exists
25+
26+
Agents that need to "just use a website" — read a page, fill a form,
27+
post an update — usually end up re-inventing a brittle mix of HTTP
28+
scraping, selector heuristics, and credential handling. Foragent
29+
centralizes that work behind a small A2A surface so the rest of your
30+
agent fleet can stay focused on their own jobs.
31+
32+
The design principles are laid out in the
33+
[specification]({{ '/foragent-specification' | relative_url }}):
34+
35+
- **Task-level capabilities, not action-level.** Callers ask for
36+
*"post this update to bsky"*, not *"click the button with aria-label X"*.
37+
- **One shared browser, one fresh context per task.** Isolation comes
38+
from the context boundary, not from spinning up new browsers.
39+
- **Credentials stay inside the process.** Callers reference them by
40+
id; Foragent resolves them locally and never returns their values.
41+
- **Multi-tenant from day one.** Tenant identity comes from the A2A
42+
caller, not from request payloads.
43+
- **Learning substrate.** Successful tasks write reusable skills that
44+
prime future planning; a daily dream loop consolidates them.
45+
46+
---
47+
48+
## Usage scenarios
49+
50+
Foragent is aimed at other agents, not end users. Typical callers:
51+
52+
- **Social posting.** A personal assistant agent asks Foragent to
53+
publish an update to a site it has credentials for.
54+
- **Site monitoring.** A research or ops agent asks Foragent to check
55+
a page and report back structured results.
56+
- **Form submission at scale.** A workflow agent hands Foragent a
57+
learned form schema plus a batch of rows; Foragent submits each one
58+
and streams per-row progress.
59+
- **One-off browser tasks.** A generalist agent describes an intent
60+
in natural language; Foragent's planner drives the browser
61+
step-by-step under a strict host allowlist.
62+
63+
The current advertised capabilities are:
64+
65+
| Capability | What it does |
66+
|---|---|
67+
| `browser-task` | LLM-planned, multi-step browser work against an allowlist of hosts |
68+
| `learn-form-schema` | Scan a form and persist a typed schema for later reuse |
69+
| `execute-form-batch` | Submit a batch of rows against a learned (or inline) form schema |
70+
71+
See [capabilities]({{ '/capabilities' | relative_url }}) for the full
72+
contract, inputs, and examples.
73+
74+
---
75+
76+
## Getting started
77+
78+
The fastest path is the end-to-end dev harness at the repo root:
79+
80+
```bash
81+
git clone https://github.com/MarimerLLC/foragent.git
82+
cd foragent
83+
docker compose up --build
84+
```
85+
86+
That brings up RabbitMQ, Foragent (HTTP A2A on `http://localhost:5210`),
87+
and a RockBot agent seeded to know about Foragent as an A2A peer. The
88+
agent-card is published at
89+
`http://localhost:5210/.well-known/agent-card.json`; the authenticated
90+
JSON-RPC endpoint is `POST http://localhost:5210/` with header
91+
`X-Api-Key: rockbot-calls-foragent`. A curl-based smoke test is at the
92+
top of `docker-compose.yml`.
93+
94+
For local builds without Docker:
95+
96+
```bash
97+
dotnet restore
98+
dotnet build --configuration Release
99+
dotnet test --configuration Release
100+
```
101+
102+
Target framework is **.NET 10**. Foragent requires an LLM — configure
103+
`ForagentLlm:Endpoint`, `ModelId`, and `ApiKey` (see
104+
[architecture]({{ '/architecture' | relative_url }}) for the full
105+
configuration surface).
106+
107+
---
108+
109+
## Resources
110+
111+
**In this repo:**
112+
113+
- [Specification]({{ '/foragent-specification' | relative_url }}) — the
114+
governing design document (v0.2)
115+
- [Architecture]({{ '/architecture' | relative_url }}) — how the pieces
116+
fit together
117+
- [Capabilities]({{ '/capabilities' | relative_url }}) — what Foragent
118+
exposes over A2A
119+
- [Credentials]({{ '/credentials' | relative_url }}) — how credentials
120+
are modeled and resolved
121+
- [Framework feedback]({{ '/framework-feedback' | relative_url }}) —
122+
observations pushed back to the RockBot framework
123+
124+
**On GitHub:**
125+
126+
- [Source on GitHub](https://github.com/MarimerLLC/foragent)
127+
- [Issues](https://github.com/MarimerLLC/foragent/issues) — bug reports
128+
and feature suggestions are welcome
129+
- [RockBot framework](https://github.com/MarimerLLC/rockbot) — the
130+
agent framework Foragent is built on
131+
132+
---
133+
134+
## Contributing
135+
136+
Foragent is in early development and is **not yet accepting external
137+
code contributions** — see
138+
[CONTRIBUTING.md](https://github.com/MarimerLLC/foragent/blob/main/CONTRIBUTING.md).
139+
140+
In the meantime, the most useful things outside contributors can do are:
141+
142+
- Open an [issue](https://github.com/MarimerLLC/foragent/issues) to
143+
report a bug or suggest a capability
144+
- Read the [specification]({{ '/foragent-specification' | relative_url }})
145+
and push back on anything that looks wrong
146+
147+
---
148+
149+
## License
150+
151+
MIT — see [LICENSE](https://github.com/MarimerLLC/foragent/blob/main/LICENSE).

0 commit comments

Comments
 (0)