teamrunner 0.0.1__tar.gz → 0.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. teamrunner-0.0.2/.github/ISSUE_TEMPLATE/bug_report.yml +37 -0
  2. teamrunner-0.0.2/.github/ISSUE_TEMPLATE/config.yml +8 -0
  3. teamrunner-0.0.2/.github/ISSUE_TEMPLATE/question.yml +18 -0
  4. teamrunner-0.0.2/.github/workflows/publish.yml +66 -0
  5. teamrunner-0.0.2/.github/workflows/tests.yml +70 -0
  6. {teamrunner-0.0.1 → teamrunner-0.0.2}/.gitignore +3 -0
  7. teamrunner-0.0.2/CHANGELOG.md +39 -0
  8. teamrunner-0.0.2/CLA.md +80 -0
  9. teamrunner-0.0.2/CONTRIBUTING.md +25 -0
  10. teamrunner-0.0.2/LICENSE +674 -0
  11. teamrunner-0.0.2/NOTICE +29 -0
  12. teamrunner-0.0.2/PKG-INFO +711 -0
  13. teamrunner-0.0.2/README.md +676 -0
  14. teamrunner-0.0.2/SECURITY.md +54 -0
  15. teamrunner-0.0.2/examples/LICENSE +21 -0
  16. teamrunner-0.0.2/examples/fact_checked/.gitignore +1 -0
  17. teamrunner-0.0.2/examples/fact_checked/against.md +11 -0
  18. teamrunner-0.0.2/examples/fact_checked/chair.md +21 -0
  19. teamrunner-0.0.2/examples/fact_checked/fact_checker.md +19 -0
  20. teamrunner-0.0.2/examples/fact_checked/for.md +11 -0
  21. teamrunner-0.0.2/examples/fact_checked/judge.md +19 -0
  22. teamrunner-0.0.2/examples/fact_checked/sandbox.md +13 -0
  23. teamrunner-0.0.2/examples/fact_checked/team.yaml +5 -0
  24. teamrunner-0.0.2/examples/fact_checked/web.md +13 -0
  25. teamrunner-0.0.2/examples/hiring_committee/chair.md +14 -0
  26. teamrunner-0.0.2/examples/hiring_committee/chen.md +28 -0
  27. teamrunner-0.0.2/examples/hiring_committee/clerk.md +16 -0
  28. teamrunner-0.0.2/examples/hiring_committee/diaz.md +29 -0
  29. teamrunner-0.0.2/examples/hiring_committee/models/member.yaml +6 -0
  30. teamrunner-0.0.2/examples/hiring_committee/okafor.md +28 -0
  31. teamrunner-0.0.2/examples/hiring_committee/team.yaml +35 -0
  32. teamrunner-0.0.2/examples/multi_agent_debate/.gitignore +1 -0
  33. teamrunner-0.0.2/examples/multi_agent_debate/against.md +11 -0
  34. teamrunner-0.0.2/examples/multi_agent_debate/chair.md +8 -0
  35. teamrunner-0.0.2/examples/multi_agent_debate/for.md +11 -0
  36. teamrunner-0.0.2/examples/multi_agent_debate/judge.md +14 -0
  37. teamrunner-0.0.2/examples/multi_agent_debate/team.yaml +7 -0
  38. teamrunner-0.0.2/examples/orchestrators_lite/.gitignore +1 -0
  39. teamrunner-0.0.2/examples/orchestrators_lite/chair.md +9 -0
  40. teamrunner-0.0.2/examples/orchestrators_lite/derek.md +26 -0
  41. teamrunner-0.0.2/examples/orchestrators_lite/emma.md +29 -0
  42. teamrunner-0.0.2/examples/orchestrators_lite/lily.md +26 -0
  43. teamrunner-0.0.2/examples/orchestrators_lite/models/engineer.yaml +7 -0
  44. teamrunner-0.0.2/examples/orchestrators_lite/noah.md +26 -0
  45. teamrunner-0.0.2/examples/orchestrators_lite/team.yaml +42 -0
  46. teamrunner-0.0.2/examples/orchestrators_lite/zoe.md +26 -0
  47. teamrunner-0.0.2/examples/reference_check/catalogue.md +22 -0
  48. teamrunner-0.0.2/examples/reference_check/chair.md +18 -0
  49. teamrunner-0.0.2/examples/reference_check/context_checker.md +28 -0
  50. teamrunner-0.0.2/examples/reference_check/editor.md +17 -0
  51. teamrunner-0.0.2/examples/reference_check/intake.md +10 -0
  52. teamrunner-0.0.2/examples/reference_check/library.md +13 -0
  53. teamrunner-0.0.2/examples/reference_check/metadata_checker.md +21 -0
  54. teamrunner-0.0.2/examples/reference_check/reader.md +23 -0
  55. teamrunner-0.0.2/examples/reference_check/team.yaml +9 -0
  56. teamrunner-0.0.2/examples/round_robin/.gitignore +1 -0
  57. teamrunner-0.0.2/examples/round_robin/01_for.md +9 -0
  58. teamrunner-0.0.2/examples/round_robin/02_against.md +10 -0
  59. teamrunner-0.0.2/examples/round_robin/03_judge.md +14 -0
  60. teamrunner-0.0.2/examples/round_robin/team.yaml +5 -0
  61. teamrunner-0.0.2/pyproject.toml +61 -0
  62. teamrunner-0.0.2/src/teamrunner/__init__.py +19 -0
  63. teamrunner-0.0.2/src/teamrunner/__main__.py +5 -0
  64. teamrunner-0.0.2/src/teamrunner/authoring/AGENTS.md +233 -0
  65. teamrunner-0.0.2/src/teamrunner/authoring/LICENSE +21 -0
  66. teamrunner-0.0.2/src/teamrunner/authoring/__init__.py +83 -0
  67. teamrunner-0.0.2/src/teamrunner/build.py +111 -0
  68. teamrunner-0.0.2/src/teamrunner/builtin_tools.py +317 -0
  69. teamrunner-0.0.2/src/teamrunner/checks.py +257 -0
  70. teamrunner-0.0.2/src/teamrunner/cli.py +445 -0
  71. teamrunner-0.0.2/src/teamrunner/console.py +214 -0
  72. teamrunner-0.0.2/src/teamrunner/describe.py +119 -0
  73. teamrunner-0.0.2/src/teamrunner/desk.py +130 -0
  74. teamrunner-0.0.2/src/teamrunner/engine.py +159 -0
  75. teamrunner-0.0.2/src/teamrunner/environment.py +20 -0
  76. teamrunner-0.0.2/src/teamrunner/events.py +36 -0
  77. teamrunner-0.0.2/src/teamrunner/explain.py +301 -0
  78. teamrunner-0.0.2/src/teamrunner/flow.py +463 -0
  79. teamrunner-0.0.2/src/teamrunner/gather.py +36 -0
  80. teamrunner-0.0.2/src/teamrunner/ids.py +60 -0
  81. teamrunner-0.0.2/src/teamrunner/inputs.py +106 -0
  82. teamrunner-0.0.2/src/teamrunner/ir.py +158 -0
  83. teamrunner-0.0.2/src/teamrunner/keys.py +144 -0
  84. teamrunner-0.0.2/src/teamrunner/litellm_model.py +90 -0
  85. teamrunner-0.0.2/src/teamrunner/loader.py +229 -0
  86. teamrunner-0.0.2/src/teamrunner/minutes.py +100 -0
  87. teamrunner-0.0.2/src/teamrunner/model.py +41 -0
  88. teamrunner-0.0.2/src/teamrunner/new.py +131 -0
  89. teamrunner-0.0.2/src/teamrunner/prices.py +115 -0
  90. teamrunner-0.0.2/src/teamrunner/problems.py +48 -0
  91. teamrunner-0.0.2/src/teamrunner/rehearsal.py +63 -0
  92. teamrunner-0.0.2/src/teamrunner/run.py +290 -0
  93. teamrunner-0.0.2/src/teamrunner/runfolder.py +82 -0
  94. teamrunner-0.0.2/src/teamrunner/runs.py +164 -0
  95. teamrunner-0.0.2/src/teamrunner/sandbox/__init__.py +137 -0
  96. teamrunner-0.0.2/src/teamrunner/sandbox/run.js +68 -0
  97. teamrunner-0.0.2/src/teamrunner/schema_check.py +74 -0
  98. teamrunner-0.0.2/src/teamrunner/schemas/member.schema.json +112 -0
  99. teamrunner-0.0.2/src/teamrunner/schemas/model_profile.schema.json +24 -0
  100. teamrunner-0.0.2/src/teamrunner/schemas/team.schema.json +41 -0
  101. teamrunner-0.0.2/src/teamrunner/show.py +124 -0
  102. teamrunner-0.0.2/src/teamrunner/tool_registry.py +22 -0
  103. teamrunner-0.0.2/src/teamrunner/turns.py +262 -0
  104. teamrunner-0.0.2/src/teamrunner/validate.py +433 -0
  105. teamrunner-0.0.2/src/teamrunner/vocabulary.py +96 -0
  106. teamrunner-0.0.2/tests/test_authoring.py +132 -0
  107. teamrunner-0.0.2/tests/test_engine.py +122 -0
  108. teamrunner-0.0.2/tests/test_explain.py +65 -0
  109. teamrunner-0.0.2/tests/test_flow.py +232 -0
  110. teamrunner-0.0.2/tests/test_minutes.py +54 -0
  111. teamrunner-0.0.2/tests/test_new.py +77 -0
  112. teamrunner-0.0.2/tests/test_prices.py +73 -0
  113. teamrunner-0.0.2/tests/test_run.py +354 -0
  114. teamrunner-0.0.2/tests/test_runs.py +45 -0
  115. teamrunner-0.0.2/tests/test_sandbox.py +152 -0
  116. teamrunner-0.0.2/tests/test_show.py +39 -0
  117. teamrunner-0.0.2/tests/test_tools.py +343 -0
  118. teamrunner-0.0.2/tests/test_turns.py +114 -0
  119. teamrunner-0.0.2/tests/test_validate.py +285 -0
  120. teamrunner-0.0.2/uv.lock +3450 -0
  121. teamrunner-0.0.1/.github/workflows/publish.yml +0 -25
  122. teamrunner-0.0.1/LICENSE +0 -202
  123. teamrunner-0.0.1/PKG-INFO +0 -37
  124. teamrunner-0.0.1/README.md +0 -20
  125. teamrunner-0.0.1/pyproject.toml +0 -29
  126. teamrunner-0.0.1/src/teamrunner/__init__.py +0 -11
@@ -0,0 +1,37 @@
1
+ name: Bug report
2
+ description: Something went wrong, or did not do what the README says
3
+ labels: [bug]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Thanks for trying TeamRunner. Please **never paste an API key**. A run folder
9
+ holds everything said in the run, so paste only the parts you are happy to make
10
+ public. A security problem? Please email security@teamrunner.ai instead.
11
+ - type: textarea
12
+ id: what
13
+ attributes:
14
+ label: What happened
15
+ description: What you ran, what you expected, and what you got. Paste error messages as text.
16
+ validations:
17
+ required: true
18
+ - type: input
19
+ id: version
20
+ attributes:
21
+ label: TeamRunner version
22
+ description: The output of `teamrunner --version`
23
+ placeholder: teamrunner 0.0.2
24
+ validations:
25
+ required: true
26
+ - type: input
27
+ id: system
28
+ attributes:
29
+ label: Operating system and Python
30
+ placeholder: macOS 15, Python 3.12
31
+ validations:
32
+ required: true
33
+ - type: textarea
34
+ id: team
35
+ attributes:
36
+ label: The team, if it helps
37
+ description: The files involved (team.yaml, chair.md, a member's file), or `teamrunner explain` output.
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Report a security problem privately
4
+ url: https://github.com/teamrunner/teamrunner/blob/main/SECURITY.md
5
+ about: Please do not report security problems in a public issue.
6
+ - name: No GitHub account? Email us
7
+ url: https://github.com/teamrunner/teamrunner#questions-bugs-and-ideas
8
+ about: Comments, questions and bug reports by email, to hello@teamrunner.ai.
@@ -0,0 +1,18 @@
1
+ name: Question or idea
2
+ description: How do I…? Could TeamRunner…? Or anything else you noticed
3
+ body:
4
+ - type: markdown
5
+ attributes:
6
+ value: |
7
+ Questions and ideas are as welcome as bugs. Please never paste an API key.
8
+ - type: textarea
9
+ id: question
10
+ attributes:
11
+ label: Your question or idea
12
+ validations:
13
+ required: true
14
+ - type: input
15
+ id: version
16
+ attributes:
17
+ label: TeamRunner version, if it matters
18
+ placeholder: teamrunner 0.0.2
@@ -0,0 +1,66 @@
1
+ name: Publish to PyPI
2
+
3
+ # A published GitHub release builds the package once, tests exactly those files on every
4
+ # system the tests run on, and only then publishes them, from the `pypi` environment
5
+ # (where a required approval is set). Started by hand, it builds and tests but never
6
+ # publishes: a rehearsal of a release.
7
+
8
+ on:
9
+ release:
10
+ types: [published]
11
+ workflow_dispatch:
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ jobs:
17
+ build:
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
21
+ - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
22
+ with:
23
+ python-version: "3.12"
24
+
25
+ - name: The release names this version
26
+ if: github.event_name == 'release'
27
+ shell: bash
28
+ env:
29
+ TAG: ${{ github.event.release.tag_name }}
30
+ run: |
31
+ version=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
32
+ if [ "${TAG#v}" != "$version" ]; then
33
+ echo "The release is $TAG, but pyproject.toml says $version"; exit 1
34
+ fi
35
+
36
+ - name: Build the wheel and the sdist
37
+ run: |
38
+ python -m pip install --upgrade build
39
+ python -m build
40
+
41
+ - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
42
+ with:
43
+ name: dist
44
+ path: dist/
45
+ if-no-files-found: error
46
+
47
+ test:
48
+ needs: build
49
+ uses: ./.github/workflows/tests.yml
50
+ with:
51
+ dist: dist
52
+
53
+ publish:
54
+ needs: test
55
+ if: github.event_name == 'release'
56
+ runs-on: ubuntu-latest
57
+ environment: pypi
58
+ permissions:
59
+ id-token: write # PyPI Trusted Publishing (OIDC)
60
+ contents: read
61
+ steps:
62
+ - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
63
+ with:
64
+ name: dist
65
+ path: dist
66
+ - uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
@@ -0,0 +1,70 @@
1
+ name: Tests
2
+
3
+ # Every push and pull request: build the wheel, install it into a clean Python, and run the
4
+ # tests against the installed copy, on Linux, macOS and Windows, on the oldest and newest
5
+ # Python claimed. Then make a team from a shipped example and check it, as a new user would.
6
+ # No model is called and no key is needed.
7
+
8
+ on:
9
+ push:
10
+ pull_request:
11
+ # The publishing workflow calls this one on the files it is about to publish
12
+ workflow_call:
13
+ inputs:
14
+ dist:
15
+ description: the name of an artifact holding the wheel to test, instead of building one
16
+ type: string
17
+ default: ""
18
+
19
+ permissions:
20
+ contents: read
21
+
22
+ jobs:
23
+ test:
24
+ strategy:
25
+ fail-fast: false
26
+ matrix:
27
+ os: [ubuntu-latest, macos-latest, windows-latest]
28
+ python: ["3.10", "3.13"]
29
+ runs-on: ${{ matrix.os }}
30
+ steps:
31
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
32
+ - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
33
+ with:
34
+ python-version: ${{ matrix.python }}
35
+
36
+ - name: Build the wheel
37
+ if: inputs.dist == ''
38
+ shell: bash
39
+ run: |
40
+ python -m pip install --upgrade pip build
41
+ python -m build
42
+
43
+ - name: Take the wheel being published
44
+ if: inputs.dist != ''
45
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
46
+ with:
47
+ name: ${{ inputs.dist }}
48
+ path: dist
49
+
50
+ - name: Install it
51
+ shell: bash
52
+ run: python -m pip install dist/*.whl pytest
53
+
54
+ # src/ is never on the path, so the tests import the installed copy
55
+ - name: Tests
56
+ run: python -m pytest -q
57
+
58
+ # From an empty folder, in PowerShell everywhere (so Windows gets its own shell),
59
+ # stopping at the first command that fails
60
+ - name: A new team from a shipped example
61
+ shell: pwsh
62
+ working-directory: ${{ runner.temp }}
63
+ run: |
64
+ $PSNativeCommandUseErrorActionPreference = $true
65
+ teamrunner --version
66
+ teamrunner new debate --from multi_agent_debate
67
+ teamrunner validate debate
68
+ teamrunner explain debate
69
+ teamrunner run debate --rehearse -m "Should cities ban cars from their centres?"
70
+ teamrunner runs debate
@@ -12,3 +12,6 @@ build/
12
12
 
13
13
  # OS
14
14
  .DS_Store
15
+
16
+ # Pyodide fetched by the sandbox tests
17
+ .cache/
@@ -0,0 +1,39 @@
1
+ # Changelog
2
+
3
+ TeamRunner is in preview: 0.0.x versions are a soft launch, and until 0.1.0
4
+ is announced a version may change in ways that break teams and run folders
5
+ made with an earlier one. Each such change is listed here.
6
+
7
+ ## 0.0.2 — the first preview
8
+
9
+ What the roadmap calls 0.1, the org package: a folder of text files that gets
10
+ a job done.
11
+
12
+ - **Teams from files**: a folder with `team.yaml` is a team; each member is a
13
+ Markdown file (settings on top, the prompt as prose); `chair.md` is the
14
+ script of who acts when, with rounds and decisions; with no chair, members
15
+ take turns in name order. Model profiles in `models/` share a model and its
16
+ settings across a team.
17
+ - **Commands**: `new` (empty, `--from` an example or another team, or
18
+ `--describe` for a team written by a model), `validate` (with `--online`
19
+ to check the models), `explain`, `run` (with `--message`, `--file`,
20
+ `--task-file`; `--rehearse` runs the whole flow with no model and no cost),
21
+ `runs`, `show`, `gather`, `skill`.
22
+ - **Toolkeepers** hold the tools, with an access list and guardrails, and four
23
+ built-in tools: `web_search_brave`, `read_page`, `read_file`, and `run_code`
24
+ (Python in a WebAssembly sandbox).
25
+ - **Every run is logged** in the team's `runs/` folder: `run.json`,
26
+ `events.jsonl` and `output.md`, with costs, and the Python, LiteLLM and Deno
27
+ versions it ran on. Search results are read by the team but not kept,
28
+ unless `keep_results: true`.
29
+ - **Six examples ship**: `round_robin`, `multi_agent_debate`,
30
+ `orchestrators_lite`, `fact_checked`, `reference_check`, and
31
+ `hiring_committee` (a hidden-profile task, after Stasser and Titus 1985).
32
+ - Models from OpenAI, Anthropic and Google, and local models through Ollama.
33
+ macOS, Linux and Windows; Python 3.10 to 3.13.
34
+ - Licensed GPL-3.0-or-later; the examples, the files `new` writes and the
35
+ authoring guide are MIT-0.
36
+
37
+ ## 0.0.1
38
+
39
+ Reserved the name on PyPI. No working code.
@@ -0,0 +1,80 @@
1
+ # TeamRunner Individual Contributor License Agreement
2
+
3
+ Thank you for your interest in contributing to TeamRunner (the "Project").
4
+
5
+ This Contributor License Agreement ("Agreement") documents the rights granted
6
+ by contributors to the Project's owner, Kumar Muthuraman, and his successors
7
+ and assigns (the "Project Owner"). This Agreement is for your protection as a
8
+ contributor as well as the protection of the Project and its users; it does
9
+ not change your rights to use your own contributions for any other purpose.
10
+
11
+ By commenting "I have read the CLA Document and I hereby sign the CLA" on a
12
+ pull request in this repository, you accept and agree to the following terms
13
+ and conditions for your present and future Contributions submitted to the
14
+ Project.
15
+
16
+ ## 1. Definitions
17
+
18
+ **"You"** (or **"Your"**) means the copyright owner or legal entity authorized
19
+ by the copyright owner that is entering into this Agreement.
20
+
21
+ **"Contribution"** means any original work of authorship, including any
22
+ modifications or additions to an existing work, that You intentionally submit
23
+ to the Project for inclusion in, or documentation of, the Project. "Submit"
24
+ means any form of electronic or written communication sent to the Project,
25
+ including but not limited to pull requests, issues, and comments, but
26
+ excluding communication that You conspicuously mark "Not a Contribution."
27
+
28
+ ## 2. Grant of Copyright License
29
+
30
+ Subject to the terms of this Agreement, You hereby grant to the Project Owner
31
+ a perpetual, worldwide, non-exclusive, royalty-free, irrevocable copyright
32
+ license to reproduce, prepare derivative works of, publicly display, publicly
33
+ perform, sublicense, and distribute Your Contributions and such derivative
34
+ works, and to license Your Contributions and such derivative works under any
35
+ license terms of the Project Owner's choosing, including open-source,
36
+ source-available, and proprietary licenses.
37
+
38
+ ## 3. Grant of Patent License
39
+
40
+ Subject to the terms of this Agreement, You hereby grant to the Project Owner
41
+ and to recipients of software distributed by the Project a perpetual,
42
+ worldwide, non-exclusive, royalty-free, irrevocable (except as stated in this
43
+ section) patent license to make, have made, use, offer to sell, sell, import,
44
+ and otherwise transfer Your Contributions, where such license applies only to
45
+ those patent claims licensable by You that are necessarily infringed by Your
46
+ Contributions alone or by combination of Your Contributions with the Project.
47
+ If any entity institutes patent litigation against You or any other entity
48
+ alleging that Your Contribution, or the Project to which You have contributed,
49
+ constitutes direct or contributory patent infringement, then any patent
50
+ licenses granted to that entity under this Agreement for that Contribution or
51
+ the Project shall terminate as of the date such litigation is filed.
52
+
53
+ ## 4. Your Representations
54
+
55
+ You represent that:
56
+
57
+ 1. You are legally entitled to grant the above licenses.
58
+ 2. Each of Your Contributions is Your original creation. Should You wish to
59
+ submit work that is not Your original creation, You may submit it
60
+ separately, identifying the complete details of its source and of any
61
+ license or other restriction of which You are personally aware, and
62
+ conspicuously marking the work as "Submitted on behalf of a third party."
63
+ 3. If Your employer has rights to intellectual property that You create that
64
+ includes Your Contributions, You have received permission to make the
65
+ Contributions on behalf of that employer, or Your employer has waived such
66
+ rights for Your Contributions to the Project.
67
+ 4. You will notify the Project if You become aware of any facts or
68
+ circumstances that would make these representations inaccurate.
69
+
70
+ ## 5. No Obligation and No Warranty
71
+
72
+ You are not expected to provide support for Your Contributions, except to the
73
+ extent You desire to provide support. Unless required by applicable law or
74
+ agreed to in writing, You provide Your Contributions on an "AS IS" BASIS,
75
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
76
+
77
+ ## 6. Retained Rights
78
+
79
+ Except for the licenses granted herein, You reserve all right, title, and
80
+ interest in and to Your Contributions.
@@ -0,0 +1,25 @@
1
+ # Contributing to TeamRunner
2
+
3
+ Thanks for your interest in contributing!
4
+
5
+ ## Not accepting pull requests yet
6
+
7
+ TeamRunner is in early development, and we are not accepting pull requests
8
+ yet. Pull requests opened now will be closed unmerged, so please don't put
9
+ time into one.
10
+
11
+ What helps most right now is an issue: bug reports, questions, and ideas are
12
+ all very welcome. Please open one in this repository's Issues tab, or, if you
13
+ have no GitHub account, write to hello@teamrunner.ai. Security problems go to
14
+ security@teamrunner.ai (see SECURITY.md), not to an issue.
15
+
16
+ We will announce here when pull requests open.
17
+
18
+ ## Contributor License Agreement
19
+
20
+ Once pull requests open, you will need to sign our
21
+ [Contributor License Agreement](CLA.md) before your first one can be merged.
22
+ It's a one-time step that covers all your future contributions.
23
+
24
+ The CLA keeps the project's ownership unambiguous — it protects both you
25
+ and the project. TeamRunner itself remains licensed under GPL-3.0-or-later.