Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .cursor/rules/octobot-cloud.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ alwaysApply: true
- **Tentacles:** edit only `packages/tentacles/`; after changes run `bash .cursor/reinstall-tentacles.sh`. Never commit repo-root `tentacles/`.
- **Git:** checkout `dev` (or user base) → feature branch → commit → open PR to **`dev`** unless the user specifies another target. Do not commit agent plan files (`PLAN-*.md`, `*.plan.md`, `.cursor/plans/`); use Plan mode or chat only — delete scratch plans before staging (`path.deny_agent_plans`). Do **not** edit agent docs (`**/AGENTS.md`, `.cursor/skills/**`, `.cursor/rules/**`, `.cursor/README.md`, `CONTRIBUTING-agent.md`, `tools/**/README.md`, `tools/**/ARCHITECTURE.md`) unless the task owns them; if diffs are out of scope, `git checkout origin/<base> -- <paths>` before commit (`agent_docs.no_regression_vs_merge_base`).
- **Node UI tests:** Vitest (`npm test`) + Python/API tests; do not add `node_web_interface/e2e/` or Playwright specs (`path.deny_node_web_playwright_e2e`). Optional live UI QA via skill **agent-seed**, not committed e2e.
- **UI copy/layout:** For `packages/tentacles/Services/Interfaces/node_web_interface/` or `.../web_interface/`, read skill **end-user-ui** (entry-level trading OK, no pro jargon, minimal, no slop, no em dash in UI strings).
- Before handoff: `python -m tools.extended_linter --base origin/dev` (use `origin/<base>` matching the PR target).
- No `pip install` / `npm install` to fix imports. No edits under `user/` or secret/env files.
- Cross-package or tentacles work: read root `AGENTS.md` and colocated `AGENTS.md` for every area you touch (`octobot/`, `packages/<name>/`, `packages/tentacles/`).
Expand Down
2 changes: 2 additions & 0 deletions .cursor/skills/cloud-roadmap/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ Pytest matrix: [reference-pytest.md](../octobot-cloud/reference-pytest.md) (skil
|-------|-------------|--------|
| Unit (Python) | Test path + enumerated behaviors | Package `tests/` or `tools/tests/…` per `AGENTS.md` **Tests** |
| Unit (Node UI) | TS under `packages/tentacles/Services/Interfaces/node_web_interface/` | `src/**/__tests__`; cwd that directory; `npm test` (vitest). Profile **`ui-node-web`** if build env needed. |
| UI copy / UX | User-visible strings or layout in `node_web_interface` or `web_interface` | Review against skill **end-user-ui** (incl. no em dash in copy); Vitest or `web_interface` pytest per stack. |
| Functional / integration | Cross-package or I/O flows | `tools/tests`, integration dirs, tentacles-dependent pytest |
| UI functional | Browser / seeded grid | Default **N/A — Vitest + API tests**; **agent-seed** only when the user explicitly wants manual `/app` QA — **not** new Playwright `e2e/` files in git (`path.deny_node_web_playwright_e2e`) |

Expand All @@ -117,6 +118,7 @@ Pytest matrix: [reference-pytest.md](../octobot-cloud/reference-pytest.md) (skil
| Implement / verify in cloud | **octobot-cloud** |
| Pytest cwd / PYTHONPATH | **octobot-cloud** → `reference-pytest.md` |
| Node UI unit tests | `packages/tentacles/Services/Interfaces/node_web_interface/` → `npm test` |
| End-user UI copy | skill **end-user-ui** + colocated UI `AGENTS.md` |
| Node UI browser QA | **agent-seed** |
| Package boundaries | colocated `AGENTS.md` |
| Contributor workflow | `CONTRIBUTING-agent.md` |
Expand Down
65 changes: 65 additions & 0 deletions .cursor/skills/end-user-ui/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
---
name: end-user-ui
description: >-
End-user UX for node_web_interface (React) and web_interface (Flask/templates):
entry-level trading terms OK, no pro-trader jargon, minimal UI, situational focus,
no AI slop, no em dash in UI strings. Apply on any UI copy,
layout, error, or help change.
paths:
- packages/tentacles/Services/Interfaces/node_web_interface/**
- packages/tentacles/Services/Interfaces/web_interface/**
---

# End-user UI (node + classic web)

Apply whenever you change user-visible copy, layout, errors, or help in the Node React UI or the classic Flask web UI tentacles.

## Sources only (tentacles)

- Edit UI only under `packages/tentacles/Services/Interfaces/node_web_interface/` or `packages/tentacles/Services/Interfaces/web_interface/`.
- Do not open or patch repo-root `tentacles/` (install output). After tentacles source changes: `bash .cursor/reinstall-tentacles.sh`.

Colocated guides: `packages/tentacles/Services/Interfaces/node_web_interface/AGENTS.md`, `.../web_interface/AGENTS.md`. Technical Node UI workflow (when present in the monorepo): workspace skill **node-web-interface-workflow**; cloud agents: skill **octobot-cloud** and `node_web_interface/README.md` for npm cwd.

## Audience

- Assume an **average non-technical** user who may be new to OctoBot but is using a **trading bot**. Not a developer, not a pro desk.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

- One primary goal per screen or step: show status, fix one problem, or confirm one action.

## Language: entry-level trading OK; pro/advanced not

- **OK:** everyday trading vocabulary users expect: buy/sell, order, pair, exchange, balance, profit/loss, stop loss, take profit, market/limit, position (when the feature uses it). Keep terms **short and consistent** with labels elsewhere in the app.
- **Avoid:** advanced or pro-trader jargon: maker/taker fee tiers, funding rate mechanics, delta-neutral, basis, slippage models, OCO/iceberg unless the UI is explicitly an advanced screen; desk slang; dense acronyms without expansion on first use in that flow.
- **Dev/infra:** still translate. Avoid "credentials", "auth payload", "session invalidated" without plain-language equivalent ("password" / "passphrase" per product).

## Understandable

- Short sentences; active voice; say what happened and what to do next.
- If a term is required, prefer **entry-level trading** over **pro**; add one short gloss only when the screen cannot work without it (not a glossary block).
- Errors: **title + one explanation**; optional **at most 1–2** tips only when they change behavior. Not a wall of suggestions.

## Simple (less is better)

- Remove or defer secondary info, debug detail, and duplicate controls.
- Progressive disclosure: advanced fields behind "Advanced" or debug routes only (`/app/debug` stays operator-facing).
- Empty states: one line what this is plus one action. Not essays.

## No AI slop

- Ban list (examples): filler openers ("Certainly", "Great question"), **marketing** buzzwords ("seamless", "robust", "empower", "leverage" as hype), emoji decoration, generic tip lists, three-panel "guidance" when one line suffices, marketing tone in errors.
- **No em dash (`—`) in user-visible UI copy** (labels, titles, errors, toasts, template text). Use a period, comma, colon, or parentheses instead; match punctuation already used on the same screen.
- Match **existing** OctoBot/Node UI tone in nearby components; read siblings before inventing new patterns.
- Do not add UI "just to be helpful" if Vitest/API already cover behavior; user-visible text must earn its space.

## By stack

| Stack | Where copy lives |
|-------|------------------|
| `node_web_interface` | React components, route copy, toasts; keep logic in code/tests per skill **octobot-cloud** (Vitest, no e2e). |
| `web_interface` | Jinja templates, flash messages, modal titles; Python strings visible in templates. |

## Before handoff (UI PR)

- Re-read changed strings aloud as a non-expert.
- `npm test` in `packages/tentacles/Services/Interfaces/node_web_interface/` when touched; pytest for `web_interface/tests` when touched.
- No new Playwright e2e; agent-seed only if the user asked for live QA.
1 change: 1 addition & 0 deletions .cursor/skills/octobot-cloud/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ See **[reference-pytest.md](reference-pytest.md)** for cwd and PYTHONPATH per CI

## Node UI tests (agents)

- **User-visible UI:** For copy, layout, errors, or help in `node_web_interface` or classic `web_interface`, read skill **end-user-ui** (`.cursor/skills/end-user-ui/SKILL.md`) and colocated `AGENTS.md` under those tentacle paths.
- **In PRs:** Vitest in `packages/tentacles/Services/Interfaces/node_web_interface/` (`npm test`) plus Python/API tests (`node_api_interface`, `packages/node`, tentacles pytest as needed). **Do not** add Playwright e2e under `e2e/` or `test:e2e` scripts (`path.deny_node_web_playwright_e2e`).
- CI runs Vitest for tentacles `package.json` projects; e2e is not in the matrix.

Expand Down
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ Colocated **`AGENTS.md`** files describe package boundaries (owns, deps, tests).
| Single package task | `packages/<name>/AGENTS.md` |
| Core app / CLI / config | [`octobot/AGENTS.md`](octobot/AGENTS.md) |
| Tentacles sources vs install | [`packages/tentacles/AGENTS.md`](packages/tentacles/AGENTS.md) |
| Node UI or classic web UI (copy, layout, errors) | [`packages/tentacles/Services/Interfaces/node_web_interface/AGENTS.md`](packages/tentacles/Services/Interfaces/node_web_interface/AGENTS.md), [`packages/tentacles/Services/Interfaces/web_interface/AGENTS.md`](packages/tentacles/Services/Interfaces/web_interface/AGENTS.md), skill **end-user-ui** (`.cursor/skills/end-user-ui/SKILL.md`) |
| Cross-package or tentacles | This file + every involved colocated `AGENTS.md` |
| Node UI demo / agent-seed QA | [`tools/agent_seed/README.md`](tools/agent_seed/README.md) + skill **agent-seed** (`.cursor/skills/agent-seed/SKILL.md`) |

Expand Down
11 changes: 11 additions & 0 deletions packages/tentacles/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,17 @@ npm run generate-client

See `node_web_interface/README.md` (openapi generated by node_api_interface). Wire protocol models: [`../protocol/AGENTS.md`](../protocol/AGENTS.md).


## End-user UI

Node and classic web UI tentacles share end-user copy rules. Before layout or user-visible text changes, read:

- `packages/tentacles/Services/Interfaces/node_web_interface/AGENTS.md`
- `packages/tentacles/Services/Interfaces/web_interface/AGENTS.md`
- Skill **end-user-ui** (`.cursor/skills/end-user-ui/SKILL.md`)

Edit sources only under `packages/tentacles/`; never repo-root `tentacles/`.

## Tests

- Often via `octobot` job: `pytest --ignore=tentacles/Trading/Exchange tentacles`
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Agents: node_web_interface

## Role

Node product **React** web UI (`octobot-node`): Vite, TanStack Router/Query, Tailwind. Built bundle in `dist/` ships with the tentacle.

## End-user UX (mandatory)

Read skill **end-user-ui** (`.cursor/skills/end-user-ui/SKILL.md`) before any user-visible copy, layout, error, or help change.

- Entry-level trading terms OK; no pro-trader jargon.
- Minimal UI; one primary goal per screen.
- No AI slop; no em dash (`—`) in user-visible strings.

## Owns

- `src/`, tests, `package.json` under **this** `packages/tentacles/.../node_web_interface/` path
- Not `src/client/*` (generated via `npm run generate-client`)
- Not repo-root `tentacles/` (install output)

## Do not

- Edit repo-root `tentacles/`; after source changes run `bash .cursor/reinstall-tentacles.sh`
- Hand-edit `openapi.json` or generated client files (see [`../../../AGENTS.md`](../../../AGENTS.md#node-rest-openapi-node_api_interface--node_web_interface))
- Add Playwright e2e under `e2e/` (`path.deny_node_web_playwright_e2e`)

## Tests

- `npm test` (Vitest) from this directory; see [README.md](README.md)

## Related

- Tentacles index: [`packages/tentacles/AGENTS.md`](../../../AGENTS.md)
- Node REST OpenAPI: `node_api_interface` tentacle (same parent `Services/Interfaces/`)

## Last reviewed

- 2026-09-19
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
React web UI for the OctoBot node API, packaged as a tentacle. Built with Vite, TanStack
Router/Query, and Tailwind. The compiled bundle in `dist/` is what ships in the tentacle package.

**Agents:** User-visible copy and layout follow [AGENTS.md](AGENTS.md) and skill **end-user-ui**
([`.cursor/skills/end-user-ui/SKILL.md`](../../../../../.cursor/skills/end-user-ui/SKILL.md))
under the OctoBot repo root. Edit sources here in `packages/tentacles/.../node_web_interface/` only;
never repo-root `tentacles/`.

## Requirements

Node 24 (see `.nvmrc`). Run `nvm use` before any npm command.
Expand Down
34 changes: 34 additions & 0 deletions packages/tentacles/Services/Interfaces/web_interface/AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Agents: web_interface

## Role

Classic OctoBot **Flask** web UI: Jinja templates, static assets, and controllers that drive user-facing pages.

## End-user UX (mandatory)

Read skill **end-user-ui** (`.cursor/skills/end-user-ui/SKILL.md`) before templates, flash messages, modal titles, or any user-visible string change.

- Entry-level trading terms OK; no pro-trader jargon.
- Minimal UI; one primary goal per screen.
- No AI slop; no em dash (`—`) in user-visible strings.

## Owns

- `templates/`, `static/`, and user-visible controller copy under **this** `packages/tentacles/.../web_interface/` path
- Tests under `tests/` when present

## Do not

- Edit repo-root `tentacles/` (install output). After source changes: `bash .cursor/reinstall-tentacles.sh`

## Tests

- Pytest under this tentacle's `tests/` when present; follow [`packages/tentacles/AGENTS.md`](../../../AGENTS.md) for broader tentacles pytest invocations

## Related

- Tentacles index: [`packages/tentacles/AGENTS.md`](../../../AGENTS.md)

## Last reviewed

- 2026-09-19
Loading