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
54 changes: 27 additions & 27 deletions devbox.lock
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@
}
},
"github:NixOS/nixpkgs/nixpkgs-unstable": {
"last_modified": "2025-10-23T16:27:14Z",
"resolved": "github:NixOS/nixpkgs/d5faa84122bc0a1fd5d378492efce4e289f8eac1?lastModified=1761236834&narHash=sha256-%2Bpthv6hrL5VLW2UqPdISGuLiUZ6SnAXdd2DdUE%2BfV2Q%3D"
"last_modified": "2025-12-01T11:04:22Z",
"resolved": "github:NixOS/nixpkgs/c1cb7d097cb250f6e1904aacd5f2ba5ffd8a49ce?lastModified=1764587062&narHash=sha256-hdFa0TAVQAQLDF31cEW3enWmBP%2Bb592OvHs6WVe3D8k%3D"
},
"nodejs@23.6.1": {
"last_modified": "2025-01-22T14:55:48Z",
Expand Down Expand Up @@ -143,114 +143,114 @@
}
},
"pnpm@latest": {
"last_modified": "2025-10-10T13:35:32Z",
"resolved": "github:NixOS/nixpkgs/870493f9a8cb0b074ae5b411b2f232015db19a65#pnpm",
"last_modified": "2025-11-28T17:56:46Z",
"resolved": "github:NixOS/nixpkgs/24e915b36ca87d32777d766da3a3f4e3ce22cc98#pnpm",
"source": "devbox-search",
"version": "10.18.2",
"version": "10.24.0",
"systems": {
"aarch64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/1a1h3bn5wfyc8r8xllzfibri2wh7npnw-pnpm-10.18.2",
"path": "/nix/store/09p3ygf7zdspqfyqn7z25k2q832hfklr-pnpm-10.24.0",
"default": true
}
],
"store_path": "/nix/store/1a1h3bn5wfyc8r8xllzfibri2wh7npnw-pnpm-10.18.2"
"store_path": "/nix/store/09p3ygf7zdspqfyqn7z25k2q832hfklr-pnpm-10.24.0"
},
"aarch64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/6mg938xvsavdcf0792imsfnzx0i0wic1-pnpm-10.18.2",
"path": "/nix/store/nkfhs7q2gk8nns4cr4r8gmvdi1dx99lg-pnpm-10.24.0",
"default": true
}
],
"store_path": "/nix/store/6mg938xvsavdcf0792imsfnzx0i0wic1-pnpm-10.18.2"
"store_path": "/nix/store/nkfhs7q2gk8nns4cr4r8gmvdi1dx99lg-pnpm-10.24.0"
},
"x86_64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/l46bk2n002bfd2giqiibizczihnxw771-pnpm-10.18.2",
"path": "/nix/store/qwp6r0zxrm5h4qa55wym2k9dy84rsaiq-pnpm-10.24.0",
"default": true
}
],
"store_path": "/nix/store/l46bk2n002bfd2giqiibizczihnxw771-pnpm-10.18.2"
"store_path": "/nix/store/qwp6r0zxrm5h4qa55wym2k9dy84rsaiq-pnpm-10.24.0"
},
"x86_64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/n5j11an7wlcr98k8mc9h1kz4bm3jqrag-pnpm-10.18.2",
"path": "/nix/store/x8brlvxzdkgpl75s9p7srnm2b5py8vnd-pnpm-10.24.0",
"default": true
}
],
"store_path": "/nix/store/n5j11an7wlcr98k8mc9h1kz4bm3jqrag-pnpm-10.18.2"
"store_path": "/nix/store/x8brlvxzdkgpl75s9p7srnm2b5py8vnd-pnpm-10.24.0"
}
}
},
"poetry@latest": {
"last_modified": "2025-10-07T08:41:47Z",
"resolved": "github:NixOS/nixpkgs/bce5fe2bb998488d8e7e7856315f90496723793c#poetry",
"last_modified": "2025-11-26T06:22:50Z",
"resolved": "github:NixOS/nixpkgs/bb813de6d2241bcb1b5af2d3059f560c66329967#poetry",
"source": "devbox-search",
"version": "2.2.1",
"systems": {
"aarch64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/r9hx24sgm1j6fgc7k3iimzvs578x74ni-python3.13-poetry-2.2.1",
"path": "/nix/store/sfsxq068qvwpq7vwb0743m7isk7mbhwv-python3.13-poetry-2.2.1",
"default": true
},
{
"name": "dist",
"path": "/nix/store/z5mlnbjvi194jinh1954cgw9pnma6rjc-python3.13-poetry-2.2.1-dist"
"path": "/nix/store/4yfah728gxi2p5gmn5mb5civh5cd3pi7-python3.13-poetry-2.2.1-dist"
}
],
"store_path": "/nix/store/r9hx24sgm1j6fgc7k3iimzvs578x74ni-python3.13-poetry-2.2.1"
"store_path": "/nix/store/sfsxq068qvwpq7vwb0743m7isk7mbhwv-python3.13-poetry-2.2.1"
},
"aarch64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/x81km926mwl1cw4g69hp3xa650yh6x2h-python3.13-poetry-2.2.1",
"path": "/nix/store/jaah5kv576z0i6sl8zcjxwnd1nf8xhqm-python3.13-poetry-2.2.1",
"default": true
},
{
"name": "dist",
"path": "/nix/store/dvzd51ciyvcmkw89y4cib6nn395ij2r6-python3.13-poetry-2.2.1-dist"
"path": "/nix/store/jn3mq4ccbvpnhgiki3n9q2pl3wsllhzr-python3.13-poetry-2.2.1-dist"
}
],
"store_path": "/nix/store/x81km926mwl1cw4g69hp3xa650yh6x2h-python3.13-poetry-2.2.1"
"store_path": "/nix/store/jaah5kv576z0i6sl8zcjxwnd1nf8xhqm-python3.13-poetry-2.2.1"
},
"x86_64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/pvsmkshnzd892pw6yfjwswahycd7z2if-python3.13-poetry-2.2.1",
"path": "/nix/store/aj5kr9p7d7skbacqkk949yk1s9axxka2-python3.13-poetry-2.2.1",
"default": true
},
{
"name": "dist",
"path": "/nix/store/b7g8rjx6bj24jfd9vbxvwhl2zdswa0iz-python3.13-poetry-2.2.1-dist"
"path": "/nix/store/w6ipm3dpg44xcfks78n2iqdg5mq51n4d-python3.13-poetry-2.2.1-dist"
}
],
"store_path": "/nix/store/pvsmkshnzd892pw6yfjwswahycd7z2if-python3.13-poetry-2.2.1"
"store_path": "/nix/store/aj5kr9p7d7skbacqkk949yk1s9axxka2-python3.13-poetry-2.2.1"
},
"x86_64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/7fv57d1mglcr01mfzla5jhkbjfh0r0ki-python3.13-poetry-2.2.1",
"path": "/nix/store/jgi0jzxlm08qk7vnx1w3wmhyn4cchf47-python3.13-poetry-2.2.1",
"default": true
},
{
"name": "dist",
"path": "/nix/store/9n8kp052wwcjr8w17phr0r3ci2yad9f3-python3.13-poetry-2.2.1-dist"
"path": "/nix/store/mmhq14nsa1vqkw4rqr7lcbhvih3fm4nk-python3.13-poetry-2.2.1-dist"
}
],
"store_path": "/nix/store/7fv57d1mglcr01mfzla5jhkbjfh0r0ki-python3.13-poetry-2.2.1"
"store_path": "/nix/store/jgi0jzxlm08qk7vnx1w3wmhyn4cchf47-python3.13-poetry-2.2.1"
}
}
},
Expand Down
5 changes: 2 additions & 3 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,10 @@ services:
volumes:
- ./src/backend/var/playwright-output:/tmp/playwright-output
playwright:
image: mcp/playwright:latest
image: mcp/playwright@sha256:5f0f926783f81f36ea72cae4b783b01cdd04d26edff08f3976a6f82e436e306e
ports:
- "8931:8931"
entrypoint: "node"
command: ["cli.js","--headless","--browser=chromium","--no-sandbox","--port=8931", "--viewport-size=1280x720","--allowed-hosts=playwright:8931,localhost:8931"]
command: ["--port=8931", "--host=0.0.0.0", "--viewport-size=1280x720", "--allowed-hosts=playwright:8931,localhost:8931", "--output-dir=/tmp/playwright-output"]
volumes:
- ./src/backend/var/playwright-output:/tmp/playwright-output
volumes:
Expand Down
14 changes: 11 additions & 3 deletions docs/guide/tools/browser.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
### Browser

::: info
This section is comming soon
:::
Automate real browser interactions using Playwright. Unlike the Web tool which only reads static content, the Browser tool can interact with live web pages — useful for apps that require login, dynamic content, or multi-step navigation.

The agent can:

- **Navigate** — open URLs, follow links, handle redirects and page transitions
- **Interact** — click buttons, fill forms, select dropdowns, check checkboxes, upload files
- **Read** — extract text, read table data, capture the current state of dynamic pages
- **Screenshot** — take screenshots to capture the current state of a page
- **Wait** — wait for elements to appear or conditions to be met before acting

This tool requires no configuration by the agent creator.

::: warning Concurrent browser sessions
Tero currently only supports 1 active browser session at a time. If multiple users try to use it at the same time they may get a notification about this.
Expand Down
20 changes: 20 additions & 0 deletions docs/guide/tools/docs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
### Docs

Upload files to your agent so it can use their content when answering questions. The agent searches the uploaded files using semantic similarity and grounds its responses in what the documents actually say, citing the source files.

This is useful for agents that need to reason over technical documentation, test plans, specifications, runbooks, or any domain-specific knowledge that isn't in the model's training data.

The agent can:

- **Answer questions** from uploaded documents using semantic search across all files
- **Cite sources** — responses reference the specific file sections they were drawn from
- **Reason across multiple files** — the agent considers all uploaded files together when answering

Supported file types include PDF, plain text, Markdown, and common document formats.

::: tip Basic vs Advanced PDF processing

**Basic** processing is faster and works well for most PDFs. **Advanced** processing (when available) handles complex PDFs with tables, multi-column layouts, and embedded images more accurately, but it costs more and takes longer.

Use Advanced only when the agent consistently misses or misreads content from your PDFs.
:::
9 changes: 0 additions & 9 deletions docs/guide/tools/documents.md

This file was deleted.

30 changes: 30 additions & 0 deletions docs/guide/tools/github.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
### GitHub

Search code, manage repositories, review pull requests, and track issues — all through the official GitHub MCP server.

The agent can help with:

- **Issues** — create, read, update, comment on, and label issues
- **Pull requests** — create, review, merge, and comment on PRs; request reviews
- **Repositories** — browse files and commits, create branches, browse releases and tags
- **Users** — look up user profiles and organization members
- **Context** — access information about the authenticated user and their teams

::: info
Only the GitHub core tools are currently supported. Advanced toolsets such as Actions, Projects, Security, Discussions, and Notifications are not supported.
:::

#### Authentication

This tool uses a GitHub Personal Access Token. The token is used for all requests on behalf of the agent.

**Steps to get a token:**

1. Go to GitHub → **Settings** → **Developer settings** → **Personal access tokens**.
2. Create a new token (classic or fine-grained).
3. Grant the scopes your agent needs — for example `repo` for full repository access, `read:org` for organization data.
4. Copy the token and paste it into the tool configuration.

::: tip Fine-grained tokens
Fine-grained tokens let you limit access to specific repositories and permissions, which is a safer choice for shared agents.
:::
6 changes: 5 additions & 1 deletion docs/guide/tools/index.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
@include: ./documents.md
@include: ./docs.md
@include: ./web.md
@include: ./browser.md
@include: ./jira.md
@include: ./github.md
@include: ./youtrack.md
@include: ./practitest.md
@include: ./redmine.md
@include: ./mcp.md
27 changes: 24 additions & 3 deletions docs/guide/tools/jira.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,28 @@
### Jira

::: info
This section is comming soon
:::
Manage issues and track project activity in Jira Cloud. The agent can work across the full issue lifecycle and project structure.

The agent can help with:

- **Issues** — create, read, update, and delete issues; add comments and attachments
- **Projects** — browse projects and retrieve project details and statuses
- **Search** — use JQL (Jira Query Language) to find issues across projects
- **Users** — look up user information

#### Authentication

This tool uses OAuth 2.0 (3LO). You need to create an OAuth app in the Atlassian developer console and provide its credentials.

**Steps to set up:**

1. Go to [developer.atlassian.com](https://developer.atlassian.com) and sign in.
2. Open **Developer console** and create a new app.
3. In the left menu, go to **Authorization** → click **Configure** next to **OAuth 2.0 (3LO)**.
4. Enter the **Callback URL** provided by your Tero instance and save.
5. Go to **Permissions** and add the **Jira API**. Enable the scopes you need:
- `read:jira-work` — read issues, projects, and boards
- `write:jira-work` — create and update issues
- `read:jira-user` — read user information
6. Copy the **Client ID** and **Client secret** from the app settings.

Enter the Client ID, Client secret, and selected scopes in the tool configuration. After saving, each user will be prompted to authorize the connection with their Atlassian account.
18 changes: 15 additions & 3 deletions docs/guide/tools/mcp.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
### MCP

::: info
This section is comming soon
:::
Connect to any [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server and expose its tools to the agent. This lets you integrate any service that provides an MCP interface without needing a dedicated Tero tool.

Once connected, the agent automatically discovers and can use all tools exposed by the MCP server — whatever those tools do (querying APIs, managing resources, reading data) becomes available in the agent's context.

#### Authentication

Two authentication modes are supported:

**OAuth** — the agent creator provides the server URL and each user authorizes via the OAuth flow when they first use the tool.

**Bearer Token** — the agent creator provides the server URL and a static bearer token used for all requests.

Some servers also require custom HTTP headers (for example, a workspace ID or API version header). Use the **Custom headers** field to add any additional headers the server needs.

::: tip Transport
The tool supports both SSE (`/sse` endpoint) and streamable HTTP transports. The correct transport is selected automatically based on the server URL.
:::
25 changes: 25 additions & 0 deletions docs/guide/tools/practitest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
### PractiTest

Manage tests, test sets, and requirements in PractiTest. The agent connects directly to your project data, making it useful for QA workflows that need to bridge AI-generated content with your test management system.

The agent can help with:

- **Tests** — create, read, and update test cases
- **Test sets & runs** — manage test sets and track execution results
- **Requirements** — read requirements and analyze test coverage
- **Coverage analysis** — identify gaps between requirements and existing tests, then create missing tests and link them back to requirements

#### Authentication

This tool uses a personal API token and connects to the PractiTest MCP server.

::: info Availability
The PractiTest MCP server is available for Corporate accounts.
:::

**Steps to set up:**

1. In PractiTest, go to your account settings and generate a personal API token.
2. In the tool configuration, enter:
- **Server URL**: your PractiTest MCP server URL
- **Token**: the personal API token
30 changes: 30 additions & 0 deletions docs/guide/tools/redmine.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
### Redmine

Manage issues, projects, and time tracking in Redmine.

::: warning Enterprise Edition
This tool is only available in the Tero Enterprise Edition.
:::

The agent can help with:

- **Issues** — create, read, update, and delete issues; add notes; change status and assignee
- **Time tracking** — log and review time entries on issues and projects
- **Projects** — browse projects and versions
- **Search** — find issues across projects using filters

#### Authentication

This tool uses a Redmine API key for authentication.

::: tip Prerequisite
A Redmine administrator must first enable the REST API under **Administration → Settings → API → Enable REST API**.
:::

**Steps to set up:**

1. In Redmine, click your account name in the top-right → **My account**.
2. In the right-hand pane, find your **API access key** (generate one if it doesn't exist yet).
3. In the tool configuration, enter:
- **URL**: your Redmine instance URL, e.g. `https://redmine.example.com`
- **API Key**: the key from your Redmine account
13 changes: 11 additions & 2 deletions docs/guide/tools/web.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
### Web

::: info
This section is comming soon
Search the web and extract text content from public URLs. The agent can look up current information beyond its training data or read specific pages as part of answering a request.

The agent can:

- **Search** — query the web and retrieve a ranked list of relevant results with snippets
- **Extract** — read the full text content of public URLs, including documentation sites, blog posts, changelogs, and issue trackers

This tool requires no configuration by the agent creator. It is available when a Tero admin has configured a web search API key (Tavily or Google Custom Search) for the instance.

::: tip Search vs Extract
The agent uses **search** to find relevant pages for a query, and **extract** to read the full content of a specific URL. You can ask the agent to visit a URL directly, or let it search and pick the best result.
:::
Loading
Loading