agentme 0.28.1 → 0.30.0
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.
- package/.filedist-package.yml +2 -2
- package/.xdrs/agentme/edrs/application/{003-javascript-project-tooling.md → 101-javascript-project-tooling.md} +9 -9
- package/.xdrs/agentme/edrs/application/{010-golang-project-tooling.md → 102-golang-project-tooling.md} +7 -7
- package/.xdrs/agentme/edrs/application/{014-python-project-tooling.md → 103-python-project-tooling.md} +12 -12
- package/.xdrs/agentme/edrs/application/{015-cli-tool-standards.md → 104-cli-tool-standards.md} +13 -13
- package/.xdrs/agentme/edrs/application/{002-coding-best-practices.md → 121-coding-best-practices.md} +3 -3
- package/.xdrs/agentme/edrs/application/{004-unit-test-requirements.md → 122-unit-test-requirements.md} +2 -2
- package/.xdrs/agentme/edrs/application/{009-error-handling.md → 123-error-handling.md} +2 -2
- package/.xdrs/agentme/edrs/application/{022-secrets-management.md → 124-secrets-management.md} +5 -5
- package/.xdrs/agentme/edrs/application/{023-coding-abstraction-practices.md → 125-coding-abstraction-practices.md} +3 -3
- package/.xdrs/agentme/edrs/application/{026-pragmatic-hexagonal-architecture.md → 126-pragmatic-hexagonal-architecture.md} +9 -9
- package/.xdrs/agentme/edrs/application/127-external-system-adapter-skills.md +93 -0
- package/.xdrs/agentme/edrs/application/{040-ai-llm-development-standards.md → 141-ai-llm-development-standards.md} +14 -14
- package/.xdrs/agentme/edrs/application/{041-ai-agents-development-standards.md → 142-ai-agents-development-standards.md} +11 -11
- package/.xdrs/agentme/edrs/application/{042-ai-agents-quality-standards.md → 143-ai-agents-quality-standards.md} +16 -16
- package/.xdrs/agentme/edrs/application/{043-ai-workflow-development-standards.md → 144-ai-workflow-development-standards.md} +28 -28
- package/.xdrs/agentme/edrs/application/{044-ai-workflow-naming-conventions.md → 145-ai-workflow-naming-conventions.md} +9 -9
- package/.xdrs/agentme/edrs/application/{045-ai-agent-xdrs-knowledge-layer.md → 146-ai-agent-xdrs-knowledge-layer.md} +7 -7
- package/.xdrs/agentme/edrs/application/{051-ai-eval-core-standards.md → 151-ai-eval-standards.md} +17 -17
- package/.xdrs/agentme/edrs/application/{052-ai-test-types-taxonomy.md → 152-ai-test-types-taxonomy.md} +27 -27
- package/.xdrs/agentme/edrs/application/{053-ai-eval-script.md → 153-ai-eval-script.md} +18 -18
- package/.xdrs/agentme/edrs/application/{054-ai-eval-report-format.md → 154-ai-eval-report-format.md} +6 -6
- package/.xdrs/agentme/edrs/application/{055-ai-eval-repeatability.md → 155-ai-eval-repeatability.md} +14 -14
- package/.xdrs/agentme/edrs/application/skills/{004-select-relevant-xdrs → 010-select-relevant-xdrs}/SKILL.md +10 -10
- package/.xdrs/agentme/edrs/application/skills/{001-create-javascript-project → 050-create-javascript-project}/SKILL.md +5 -5
- package/.xdrs/agentme/edrs/application/skills/{003-create-golang-project → 051-create-golang-project}/SKILL.md +4 -4
- package/.xdrs/agentme/edrs/application/skills/{005-create-python-project → 052-create-python-project}/SKILL.md +6 -6
- package/.xdrs/agentme/edrs/application/skills/200-run-skill-tests/SKILL.md +113 -0
- package/.xdrs/agentme/edrs/application/skills/200-run-skill-tests/SKILL.test.md +47 -0
- package/.xdrs/agentme/edrs/data/{050-ml-dataset-structure.md → 201-ml-dataset-structure.md} +4 -4
- package/.xdrs/agentme/edrs/governance/{007-project-quality-standards.md → 501-project-quality-standards.md} +16 -16
- package/.xdrs/agentme/edrs/governance/{013-contributing-guide-requirements.md → 502-contributing-guide-requirements.md} +4 -4
- package/.xdrs/agentme/edrs/index.md +33 -31
- package/.xdrs/agentme/edrs/operations/{011-service-health-check-endpoint.md → 401-service-health-check-endpoint.md} +2 -2
- package/.xdrs/agentme/edrs/platform/{005-monorepo-structure.md → 301-monorepo-structure.md} +5 -5
- package/.xdrs/agentme/edrs/platform/{006-github-pipelines.md → 302-github-pipelines.md} +3 -3
- package/.xdrs/agentme/edrs/platform/{008-common-targets.md → 303-common-targets.md} +8 -8
- package/.xdrs/agentme/edrs/platform/{017-tool-execution-and-scripting.md → 304-tool-execution-and-scripting.md} +10 -10
- package/.xdrs/agentme/edrs/platform/{027-environment-variable-configuration.md → 305-environment-variable-configuration.md} +14 -14
- package/.xdrs/agentme/edrs/platform/skills/{002-monorepo-setup → 053-monorepo-setup}/SKILL.md +4 -4
- package/.xdrs/agentme/edrs/principles/012-continuous-xdr-enrichment.md +2 -2
- package/.xdrs/agentme/edrs/principles/016-cross-language-module-structure.md +4 -4
- package/.xdrs/agentme/edrs/principles/017-skill-testing.md +77 -0
- package/.xdrs/agentme/edrs/principles/articles/001-continuous-xdr-improvement.md +1 -1
- package/package.json +2 -2
package/.filedist-package.yml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
sets:
|
|
2
|
-
- package: xdrs-core@0.
|
|
2
|
+
- package: xdrs-core@0.42.0
|
|
3
3
|
# - package: git:https://github.com/flaviostutz/xdrs-core.git@main
|
|
4
4
|
selector:
|
|
5
5
|
files:
|
|
@@ -14,7 +14,7 @@ sets:
|
|
|
14
14
|
|
|
15
15
|
- selector:
|
|
16
16
|
files:
|
|
17
|
-
- .xdrs/agentme/edrs/application/skills/
|
|
17
|
+
- .xdrs/agentme/edrs/application/skills/010-select-relevant-xdrs/**
|
|
18
18
|
output:
|
|
19
19
|
path: .
|
|
20
20
|
gitignore: false
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: agentme-edr-policy-
|
|
2
|
+
name: agentme-edr-policy-101-javascript-project-tooling-and-structure
|
|
3
3
|
description: Defines the standard JavaScript and TypeScript project toolchain and layout using Mise, pnpm, TypeScript, ESLint, Jest, and Makefiles. Use when scaffolding or reviewing JavaScript projects.
|
|
4
4
|
apply-to: JavaScript and TypeScript projects
|
|
5
5
|
valid-from: 2026-05-25
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# agentme-edr-policy-
|
|
8
|
+
# agentme-edr-policy-101: JavaScript project tooling and structure
|
|
9
9
|
|
|
10
10
|
## Context and Problem Statement
|
|
11
11
|
|
|
@@ -32,7 +32,7 @@ Clear, consistent tooling and layout enable fast onboarding, reliable CI pipelin
|
|
|
32
32
|
| **eslint** | Linting — code style and quality enforcement |
|
|
33
33
|
| **jest** | Testing — unit and integration test runner |
|
|
34
34
|
|
|
35
|
-
All commands are run exclusively through Makefiles, not through `package.json` scripts. The repository root MUST define a `.mise.toml` that pins at least Node.js and pnpm. Contributors and CI MUST bootstrap with `make setup` or `mise install`, then invoke routine work with `make <target>`. Each Makefile recipe MUST execute the underlying tool through `mise exec -- <tool> ...`, following [agentme-edr-
|
|
35
|
+
All commands are run exclusively through Makefiles, not through `package.json` scripts. The repository root MUST define a `.mise.toml` that pins at least Node.js and pnpm. Contributors and CI MUST bootstrap with `make setup` or `mise install`, then invoke routine work with `make <target>`. Each Makefile recipe MUST execute the underlying tool through `mise exec -- <tool> ...`, following [agentme-edr-304](../platform/304-tool-execution-and-scripting.md). Calling project tools directly in docs, CI, or daily workflows instead of `make <target>` is not allowed.
|
|
36
36
|
|
|
37
37
|
#### ESLint
|
|
38
38
|
|
|
@@ -48,7 +48,7 @@ When `tsconfig.json` extends `@tsconfig/node24/tsconfig.json`, the default `modu
|
|
|
48
48
|
|
|
49
49
|
#### Coverage
|
|
50
50
|
|
|
51
|
-
Jest must enforce 80% line and branch coverage, following [agentme-edr-
|
|
51
|
+
Jest must enforce 80% line and branch coverage, following [agentme-edr-122](122-unit-test-requirements.md). Configure thresholds in `lib/jest.config.js`:
|
|
52
52
|
|
|
53
53
|
```js
|
|
54
54
|
coverageThreshold: {
|
|
@@ -82,7 +82,7 @@ Builds that miss the threshold MUST NOT be merged.
|
|
|
82
82
|
│ ├── dist/ # compiled files and packed .tgz artifacts
|
|
83
83
|
│ └── src/ # all TypeScript source files
|
|
84
84
|
│ ├── index.ts # public API re-exports from app/
|
|
85
|
-
│ ├── adapters/ # I/O boundary layer (following agentme-edr-
|
|
85
|
+
│ ├── adapters/ # I/O boundary layer (following agentme-edr-126)
|
|
86
86
|
│ │ ├── cli/ # inbound: CLI bootstrap and entry point
|
|
87
87
|
│ │ ├── http/ # inbound: HTTP server bootstrap and handlers
|
|
88
88
|
│ │ └── connectors/ # outbound: one folder per external resource
|
|
@@ -101,7 +101,7 @@ Builds that miss the threshold MUST NOT be merged.
|
|
|
101
101
|
|
|
102
102
|
The root `Makefile` delegates every target to `/lib` then `/examples` in sequence. Parent Makefiles should call child Makefiles directly, and each module Makefile is responsible for running its actual tool commands through `mise exec --`.
|
|
103
103
|
|
|
104
|
-
Internal source code MUST be organized following [agentme-edr-
|
|
104
|
+
Internal source code MUST be organized following [agentme-edr-126](126-pragmatic-hexagonal-architecture.md): `adapters/` (inbound and outbound I/O boundaries), `app/` (business logic), and `shared/` (infrastructure-agnostic utilities). The public API entry point (`index.ts`) re-exports from `app/`.
|
|
105
105
|
|
|
106
106
|
When a repository contains multiple JavaScript/TypeScript packages, each package MUST live in its own module folder such as `lib/my-package/` or `services/my-service/`, each with its own `Makefile`, `README.md`, `dist/`, and `.cache/`.
|
|
107
107
|
|
|
@@ -154,7 +154,7 @@ The examples folder MUST exist for any libraries and utilities that are publishe
|
|
|
154
154
|
|
|
155
155
|
## References
|
|
156
156
|
|
|
157
|
-
- [agentme-edr-
|
|
158
|
-
- [agentme-edr-
|
|
159
|
-
- [
|
|
157
|
+
- [agentme-edr-122](122-unit-test-requirements.md) — Coverage and unit-test baseline
|
|
158
|
+
- [agentme-edr-126](126-pragmatic-hexagonal-architecture.md) — Internal adapter/application layer separation for applications
|
|
159
|
+
- [050-create-javascript-project](skills/050-create-javascript-project/SKILL.md) — scaffolds a new project following this structure
|
|
160
160
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: agentme-edr-policy-
|
|
2
|
+
name: agentme-edr-policy-102-go-project-tooling-and-structure
|
|
3
3
|
description: Defines the standard Go project toolchain, layout, and Makefile workflow using Mise for agentme-based projects. Use when scaffolding or reviewing Go projects.
|
|
4
4
|
apply-to: Go projects
|
|
5
5
|
valid-from: 2026-05-25
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# agentme-edr-policy-
|
|
8
|
+
# agentme-edr-policy-102: Go project tooling and structure
|
|
9
9
|
|
|
10
10
|
## Context and Problem Statement
|
|
11
11
|
|
|
@@ -30,7 +30,7 @@ A predictable layout and minimal external tooling keep Go projects approachable,
|
|
|
30
30
|
| **golangci-lint** | Linting — aggregates many linters in one fast run; configured via `.golangci.yml` |
|
|
31
31
|
| **monotag** | Version tagging from git history for the `publish` target |
|
|
32
32
|
|
|
33
|
-
All commands MUST be run exclusively through the Makefile and MUST NOT be called ad-hoc. The project root **MUST** define a `.mise.toml` that pins `go`, `golangci-lint`, and any other Go-related CLIs used by the project. Contributors and CI **MUST** bootstrap with `make setup` or `mise install`, then invoke routine work with `make <target>`. Each Makefile recipe **MUST** execute the underlying tool through `mise exec -- <tool> ...`, following [agentme-edr-
|
|
33
|
+
All commands MUST be run exclusively through the Makefile and MUST NOT be called ad-hoc. The project root **MUST** define a `.mise.toml` that pins `go`, `golangci-lint`, and any other Go-related CLIs used by the project. Contributors and CI **MUST** bootstrap with `make setup` or `mise install`, then invoke routine work with `make <target>`. Each Makefile recipe **MUST** execute the underlying tool through `mise exec -- <tool> ...`, following [agentme-edr-304](../platform/304-tool-execution-and-scripting.md).
|
|
34
34
|
Direct installation of project-required Go CLIs with `go install ...@latest` as a repair step is **NOT** allowed unless an XDR for that repository explicitly permits it.
|
|
35
35
|
|
|
36
36
|
#### Project structure
|
|
@@ -47,7 +47,7 @@ Direct installation of project-required Go CLIs with `go install ...@latest` as
|
|
|
47
47
|
├── main.go # binary entry point — argument dispatch only, no logic
|
|
48
48
|
├── .cache/ # GOCACHE, GOMODCACHE, golangci-lint cache, coverage
|
|
49
49
|
├── dist/ # built binaries and packaged outputs
|
|
50
|
-
├── adapters/ # I/O boundary layer (following agentme-edr-
|
|
50
|
+
├── adapters/ # I/O boundary layer (following agentme-edr-126)
|
|
51
51
|
│ ├── cli/ # inbound: CLI wiring — flag parsing, output formatting
|
|
52
52
|
│ │ └── *.go # subfolders per feature only when complexity warrants it
|
|
53
53
|
│ ├── http/ # inbound: HTTP server bootstrap and handlers
|
|
@@ -73,7 +73,7 @@ Direct installation of project-required Go CLIs with `go install ...@latest` as
|
|
|
73
73
|
|
|
74
74
|
**Key layout rules:**
|
|
75
75
|
|
|
76
|
-
- Internal source code is organized following [agentme-edr-
|
|
76
|
+
- Internal source code is organized following [agentme-edr-126](126-pragmatic-hexagonal-architecture.md): `adapters/` (inbound and outbound I/O boundaries), `app/` (business logic), and `shared/` (infrastructure-agnostic utilities).
|
|
77
77
|
- One Go module per project (`go.mod` at the project root). In a monorepo, each Go project has its own `go.mod` in its subdirectory. No nested modules within a single project unless explicitly justified.
|
|
78
78
|
- In a multi-module repository, each Go module MUST live in its own folder root with its own `Makefile`, `README.md`, `dist/`, and `.cache/`.
|
|
79
79
|
- `main.go` is solely an argument dispatcher — it reads `os.Args[1]` and delegates to an `adapters/cli/<feature>/Run*()` function. No domain logic lives in `main.go`.
|
|
@@ -178,5 +178,5 @@ Use the standard library `flag` package for CLI flags. Each `adapters/cli/<featu
|
|
|
178
178
|
|
|
179
179
|
## References
|
|
180
180
|
|
|
181
|
-
- [agentme-edr-
|
|
182
|
-
- [
|
|
181
|
+
- [agentme-edr-126](126-pragmatic-hexagonal-architecture.md) — Defines the adapter/application separation that this layout follows
|
|
182
|
+
- [051-create-golang-project](skills/051-create-golang-project/SKILL.md) — scaffolds a new Go project following this structure
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: agentme-edr-policy-
|
|
2
|
+
name: agentme-edr-policy-103-python-project-tooling-and-structure
|
|
3
3
|
description: Defines the standard Python project toolchain, layout, and Makefile workflow using Mise, uv, ruff, ty, pytest, and pip-audit. Use when scaffolding or reviewing Python projects.
|
|
4
4
|
apply-to: Python projects
|
|
5
5
|
valid-from: 2026-05-25
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# agentme-edr-policy-
|
|
8
|
+
# agentme-edr-policy-103: Python project tooling and structure
|
|
9
9
|
|
|
10
10
|
## Context and Problem Statement
|
|
11
11
|
|
|
@@ -36,7 +36,7 @@ A single dependency manager, isolated package internals under `lib/`, and a stan
|
|
|
36
36
|
|
|
37
37
|
All routine commands MUST run through the project `Makefile`. MUST NOT call `uv`, `ruff`, `pytest`, or `ty` directly in docs, CI, or daily development workflows.
|
|
38
38
|
|
|
39
|
-
The repository root MUST define a `.mise.toml` that pins Python and uv. Contributors and CI MUST bootstrap with `make setup` or `mise install`, then invoke routine work with `make <target>`. Each Makefile recipe MUST execute the underlying tool through `mise exec -- <tool> ...`, following [agentme-edr-
|
|
39
|
+
The repository root MUST define a `.mise.toml` that pins Python and uv. Contributors and CI MUST bootstrap with `make setup` or `mise install`, then invoke routine work with `make <target>`. Each Makefile recipe MUST execute the underlying tool through `mise exec -- <tool> ...`, following [agentme-edr-304](../platform/304-tool-execution-and-scripting.md). Using routine project CLI commands directly outside the Makefile contract is not allowed.
|
|
40
40
|
|
|
41
41
|
The root `.venv/` is the canonical environment location for both the library and all examples. Subdirectory commands MUST set `UV_PROJECT_ENVIRONMENT` to the workspace root `.venv/` instead of creating nested virtual environments.
|
|
42
42
|
|
|
@@ -71,7 +71,7 @@ Tools MUST NOT write cache or state files to the project root, `src/`, `tests/`,
|
|
|
71
71
|
│ ├── src/
|
|
72
72
|
│ │ └── <package_name>/
|
|
73
73
|
│ │ ├── __init__.py
|
|
74
|
-
│ │ ├── adapters/ # I/O boundary layer (following agentme-edr-
|
|
74
|
+
│ │ ├── adapters/ # I/O boundary layer (following agentme-edr-126)
|
|
75
75
|
│ │ │ ├── cli/ # inbound: CLI bootstrap and entry point
|
|
76
76
|
│ │ │ ├── http/ # inbound: HTTP server bootstrap
|
|
77
77
|
│ │ │ └── connectors/ # outbound: one folder per external resource
|
|
@@ -96,9 +96,9 @@ Keep the repository root clean: source code, tests, distribution artifacts, and
|
|
|
96
96
|
|
|
97
97
|
Use the `lib/src/` layout for import safety and packaging clarity. Keep tests under `lib/tests/` and shared test setup in `lib/tests/conftest.py`. Do not introduce `requirements.txt`, `setup.py`, `setup.cfg`, `tox.ini`, `ruff.toml`, or `ty.toml` by default; keep project metadata and tool configuration in `lib/pyproject.toml`.
|
|
98
98
|
|
|
99
|
-
Internal source code MUST be organized following [agentme-edr-
|
|
99
|
+
Internal source code MUST be organized following [agentme-edr-126](126-pragmatic-hexagonal-architecture.md): `adapters/` (inbound and outbound I/O boundaries), `app/` (business logic), and `shared/` (infrastructure-agnostic utilities).
|
|
100
100
|
|
|
101
|
-
Libraries and shared utilities MUST include an `examples/` folder and wire example execution into the root `test` flow, following [agentme-edr-
|
|
101
|
+
Libraries and shared utilities MUST include an `examples/` folder and wire example execution into the root `test` flow, following [agentme-edr-501](../governance/501-project-quality-standards.md). Each example directory is its own Python project with its own `pyproject.toml`, and examples MUST import the library as a consumer would rather than reaching back into `lib/src/` with relative imports. Local example verification MUST install the wheel built into `lib/dist/`; do not use editable or path-based dependencies back to `lib/`.
|
|
102
102
|
|
|
103
103
|
Python keeps unit tests under `lib/tests/` by default because that remains the more common and maintainable convention for typed/package-based projects than co-locating tests beside every source file. Integration tests belong in `lib/tests_integration/`, and benchmark harnesses belong in `lib/tests_benchmark/` when they are more than a single micro-benchmark helper.
|
|
104
104
|
|
|
@@ -159,7 +159,7 @@ Adjust `target-version` to match the project's minimum supported Python version.
|
|
|
159
159
|
|
|
160
160
|
ty MUST run on every lint pass. The default rule set is the minimum baseline; projects may enable stricter rules as the codebase matures.
|
|
161
161
|
|
|
162
|
-
Pytest coverage MUST fail below 80% line and branch coverage, following [agentme-edr-
|
|
162
|
+
Pytest coverage MUST fail below 80% line and branch coverage, following [agentme-edr-122](122-unit-test-requirements.md).
|
|
163
163
|
|
|
164
164
|
#### Makefile targets
|
|
165
165
|
|
|
@@ -198,7 +198,7 @@ The root `Makefile` is the only contract for CI and contributors. It delegates l
|
|
|
198
198
|
| `dev` | Same as `run`, optionally with repository-specific dev defaults |
|
|
199
199
|
| `publish` | `mise exec -- uv publish --project .` after versioning and packaging are complete |
|
|
200
200
|
|
|
201
|
-
The root `Makefile` MUST remain the only contract for CI and contributors, in line with [agentme-edr-
|
|
201
|
+
The root `Makefile` MUST remain the only contract for CI and contributors, in line with [agentme-edr-303](../platform/303-common-targets.md).
|
|
202
202
|
|
|
203
203
|
## Considered Options
|
|
204
204
|
|
|
@@ -209,7 +209,7 @@ The root `Makefile` MUST remain the only contract for CI and contributors, in li
|
|
|
209
209
|
|
|
210
210
|
## References
|
|
211
211
|
|
|
212
|
-
- [agentme-edr-
|
|
213
|
-
- [agentme-edr-
|
|
214
|
-
- [agentme-edr-
|
|
215
|
-
- [
|
|
212
|
+
- [agentme-edr-122](122-unit-test-requirements.md) - Coverage and unit-test baseline
|
|
213
|
+
- [agentme-edr-501](../governance/501-project-quality-standards.md) - Examples and quality requirements
|
|
214
|
+
- [agentme-edr-303](../platform/303-common-targets.md) - Standard Makefile target names
|
|
215
|
+
- [052-create-python-project](skills/052-create-python-project/SKILL.md) - Scaffold a project following this EDR
|
package/.xdrs/agentme/edrs/application/{015-cli-tool-standards.md → 104-cli-tool-standards.md}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: agentme-edr-policy-
|
|
2
|
+
name: agentme-edr-policy-104-cli-tool-standards
|
|
3
3
|
description: Defines how distributable CLI tools should separate command handling from library logic and expose consistent command behavior. Use when designing or reviewing CLI interfaces.
|
|
4
4
|
apply-to: Projects with distributable CLI tools
|
|
5
5
|
valid-from: 2026-05-25
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# agentme-edr-policy-
|
|
8
|
+
# agentme-edr-policy-104: CLI tool standards
|
|
9
9
|
|
|
10
10
|
## Context and Problem Statement
|
|
11
11
|
|
|
@@ -34,7 +34,7 @@ This keeps the user-facing command predictable while preserving a clean library
|
|
|
34
34
|
|
|
35
35
|
#### CLI to application separation
|
|
36
36
|
|
|
37
|
-
- Structure the software as `cli -> app` — the CLI adapter delegates to the application layer, following [agentme-edr-
|
|
37
|
+
- Structure the software as `cli -> app` — the CLI adapter delegates to the application layer, following [agentme-edr-126](126-pragmatic-hexagonal-architecture.md). For unit testing the application layer and mocking outbound connectors, follow [agentme-edr-126 rule `09`](126-pragmatic-hexagonal-architecture.md#09-unit-testing-and-mocking-strategy).
|
|
38
38
|
- The CLI layer MUST only parse arguments, load config, call the application layer, and format output.
|
|
39
39
|
- Domain logic MUST live in the application layer and be usable without CLI globals such as `argv`, `stdout`, or process exit handlers.
|
|
40
40
|
- Every feature available through the CLI MUST also be available through the application API.
|
|
@@ -53,7 +53,7 @@ This keeps the user-facing command predictable while preserving a clean library
|
|
|
53
53
|
#### Configuration
|
|
54
54
|
|
|
55
55
|
- Prefer flags and positional arguments for simple inputs.
|
|
56
|
-
- When configuration becomes long, nested, or repetitive, use a YAML config file instead of pushing all values into flags. See [agentme-edr-
|
|
56
|
+
- When configuration becomes long, nested, or repetitive, use a YAML config file instead of pushing all values into flags. See [agentme-edr-305](../platform/305-environment-variable-configuration.md) for when `.env` values should be referenced from within that file.
|
|
57
57
|
- By default, config-file discovery and loading MUST happen in the CLI layer, not in the application layer.
|
|
58
58
|
- When a config file is supported, the CLI MUST try to load a YAML file from `[cwd]/[tool-name].yml` by default.
|
|
59
59
|
- The CLI MUST also support an explicit config path flag such as `--config`.
|
|
@@ -87,7 +87,7 @@ This keeps the user-facing command predictable while preserving a clean library
|
|
|
87
87
|
- Choose language tooling that stays compatible with ecosystem launchers such as `npx`, `pnpm dlx`, `uvx`, or equivalent distribution commands for that ecosystem.
|
|
88
88
|
- `--version` MUST print the same version declared in the published package or release artifact metadata.
|
|
89
89
|
- Do not hard-code a second version string that can drift from the published package version.
|
|
90
|
-
- Language-specific project structure and packaging rules still apply and SHOULD be combined with this XDR, especially [agentme-edr-
|
|
90
|
+
- Language-specific project structure and packaging rules still apply and SHOULD be combined with this XDR, especially [agentme-edr-101](101-javascript-project-tooling.md), [agentme-edr-102](102-golang-project-tooling.md), and [agentme-edr-103](103-python-project-tooling.md).
|
|
91
91
|
|
|
92
92
|
## Considered Options
|
|
93
93
|
|
|
@@ -98,11 +98,11 @@ This keeps the user-facing command predictable while preserving a clean library
|
|
|
98
98
|
|
|
99
99
|
## References
|
|
100
100
|
|
|
101
|
-
- [agentme-edr-
|
|
102
|
-
- [agentme-edr-
|
|
103
|
-
- [agentme-edr-
|
|
104
|
-
- [agentme-edr-
|
|
105
|
-
- [agentme-edr-
|
|
106
|
-
- [agentme-edr-
|
|
107
|
-
- [agentme-edr-
|
|
108
|
-
- [agentme-edr-
|
|
101
|
+
- [agentme-edr-126](126-pragmatic-hexagonal-architecture.md) - Defines the adapter/application separation that the CLI layer follows
|
|
102
|
+
- [agentme-edr-101](101-javascript-project-tooling.md) - JavaScript project packaging and structure
|
|
103
|
+
- [agentme-edr-501](../governance/501-project-quality-standards.md) - README and examples baseline
|
|
104
|
+
- [agentme-edr-303](../platform/303-common-targets.md) - Standard command names for project entry points
|
|
105
|
+
- [agentme-edr-123](123-error-handling.md) - Process error signaling and error handling expectations
|
|
106
|
+
- [agentme-edr-102](102-golang-project-tooling.md) - Go CLI structure and verbose logging baseline
|
|
107
|
+
- [agentme-edr-103](103-python-project-tooling.md) - Python packaging and CLI entry-point guidance
|
|
108
|
+
- [agentme-edr-305](../platform/305-environment-variable-configuration.md) - Environment variable configuration files; defines how `.env` values are referenced from YAML config files
|
package/.xdrs/agentme/edrs/application/{002-coding-best-practices.md → 121-coding-best-practices.md}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: agentme-edr-policy-
|
|
2
|
+
name: agentme-edr-policy-121-coding-best-practices
|
|
3
3
|
description: Defines cross-language coding practices for keeping code readable, modular, and synchronized with tests and documentation. Apply across projects adopting agentme engineering standards.
|
|
4
4
|
apply-to: All software projects
|
|
5
5
|
valid-from: 2026-05-25
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# agentme-edr-policy-
|
|
8
|
+
# agentme-edr-policy-121: Coding best practices
|
|
9
9
|
|
|
10
10
|
## Context and Problem Statement
|
|
11
11
|
|
|
@@ -116,4 +116,4 @@ Types used in only **one** file MUST be declared in that same file. Move a type
|
|
|
116
116
|
|
|
117
117
|
#### 06-keep-test-files-next-to-source
|
|
118
118
|
|
|
119
|
-
Test files MUST be placed beside the source file they cover, following the co-location and naming conventions defined in [agentme-edr-
|
|
119
|
+
Test files MUST be placed beside the source file they cover, following the co-location and naming conventions defined in [agentme-edr-122 rule 04](122-unit-test-requirements.md). For Rust, use inline `#[cfg(test)]` modules instead of a separate test file.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: agentme-edr-policy-
|
|
2
|
+
name: agentme-edr-policy-122-unit-test-requirements
|
|
3
3
|
description: Defines unit test requirements for assertions, offline execution, coverage, shared setup, and real-code preference. Use when writing or reviewing tests.
|
|
4
4
|
apply-to: All projects with unit tests
|
|
5
5
|
valid-from: 2026-05-25
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# agentme-edr-policy-
|
|
8
|
+
# agentme-edr-policy-122: Unit test requirements
|
|
9
9
|
|
|
10
10
|
## Context and Problem Statement
|
|
11
11
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: agentme-edr-policy-
|
|
2
|
+
name: agentme-edr-policy-123-error-handling
|
|
3
3
|
description: Defines error handling practices for catching, propagating, surfacing, and testing failures consistently across projects. Use when implementing interfaces and failure paths.
|
|
4
4
|
apply-to: All software projects
|
|
5
5
|
valid-from: 2026-05-25
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# agentme-edr-policy-
|
|
8
|
+
# agentme-edr-policy-123: Error handling
|
|
9
9
|
|
|
10
10
|
## Context and Problem Statement
|
|
11
11
|
|
package/.xdrs/agentme/edrs/application/{022-secrets-management.md → 124-secrets-management.md}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: agentme-edr-policy-
|
|
2
|
+
name: agentme-edr-policy-124-secrets-management
|
|
3
3
|
description: Defines how secrets (API keys, passwords, tokens, credentials, private certificates) must be stored, fetched, and provisioned. Use when implementing secret handling in any language or deployment target.
|
|
4
4
|
apply-to: All software projects handling secrets
|
|
5
5
|
valid-from: 2026-05-28
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# agentme-edr-policy-
|
|
8
|
+
# agentme-edr-policy-124: Secrets management
|
|
9
9
|
|
|
10
10
|
## Context and Problem Statement
|
|
11
11
|
|
|
@@ -45,7 +45,7 @@ During local development, secrets MUST be stored and retrieved using the native
|
|
|
45
45
|
| JavaScript/TypeScript | `cross-keychain` |
|
|
46
46
|
| Go | `go-keyring` |
|
|
47
47
|
|
|
48
|
-
The "group" (service name) defaults to the module name. The secret identifier
|
|
48
|
+
The "group" (service name) defaults to the module name. The secret identifier SHOULD match the ID used in the cloud secret manager for consistency.
|
|
49
49
|
|
|
50
50
|
---
|
|
51
51
|
|
|
@@ -164,5 +164,5 @@ In library code (Python, JS/TS, Go), continue using the cross-platform libraries
|
|
|
164
164
|
|
|
165
165
|
## References
|
|
166
166
|
|
|
167
|
-
- [agentme-edr-
|
|
168
|
-
- [agentme-edr-
|
|
167
|
+
- [agentme-edr-303](../platform/303-common-targets.md) - Common development script names (defines Makefile target conventions)
|
|
168
|
+
- [agentme-edr-123](123-error-handling.md) - Error handling (governs how the fallback exception should be raised)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: agentme-edr-policy-
|
|
3
|
-
description: Defines when abstractions (functions, classes, wrappers, factories) are justified and when they must be avoided. Tightly related to agentme-edr-policy-
|
|
2
|
+
name: agentme-edr-policy-125-coding-abstraction-practices
|
|
3
|
+
description: Defines when abstractions (functions, classes, wrappers, factories) are justified and when they must be avoided. Tightly related to agentme-edr-policy-121-coding-best-practices.
|
|
4
4
|
apply-to: All software projects
|
|
5
5
|
valid-from: 2026-05-29
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# agentme-edr-policy-
|
|
8
|
+
# agentme-edr-policy-125: Coding abstraction practices
|
|
9
9
|
|
|
10
10
|
## Context and Problem Statement
|
|
11
11
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: agentme-edr-policy-
|
|
2
|
+
name: agentme-edr-policy-126-pragmatic-hexagonal-architecture
|
|
3
3
|
description: Defines a pragmatic variant of Hexagonal Architecture for organizing application source code into Adapters (inbound/outbound I/O boundaries) and Application (business logic) layers, with explicit naming conventions and folder structure. Use when designing or reviewing the internal layout of application modules.
|
|
4
4
|
apply-to: All application projects
|
|
5
5
|
valid-from: 2026-05-28
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# agentme-edr-policy-
|
|
8
|
+
# agentme-edr-policy-126: Pragmatic hexagonal architecture
|
|
9
9
|
|
|
10
10
|
## Context and Problem Statement
|
|
11
11
|
|
|
@@ -56,7 +56,7 @@ Adapters MUST follow these naming conventions:
|
|
|
56
56
|
- No global variables, no direct environment variable access in `app/` or `shared/`
|
|
57
57
|
- Business logic with well-defined input/output behavior
|
|
58
58
|
- Group related logic into subfolders (aggregation roots)
|
|
59
|
-
- Environment variables
|
|
59
|
+
- Environment variables MUST be read only in the bootstrap/entry-point layer of inbound adapters, converted into typed configuration objects, and passed explicitly to all other components
|
|
60
60
|
|
|
61
61
|
- Data flow examples
|
|
62
62
|
|
|
@@ -102,7 +102,7 @@ mysystem/
|
|
|
102
102
|
#### 06-bootstrap-and-entry-points
|
|
103
103
|
|
|
104
104
|
- Each inbound adapter folder (`cli/`, `http/`, `grpc/`, etc.) MUST contain the bootstrap and entry point for that interface
|
|
105
|
-
- The project root Makefile
|
|
105
|
+
- The project root Makefile MUST have targets to run the different inbound interfaces following [agentme-edr-303](../platform/303-common-targets.md) extension conventions (e.g. `run-http`, `run-grpc`)
|
|
106
106
|
- Bootstrap code lives in the adapter that receives inbound requests, not in a separate wiring layer
|
|
107
107
|
|
|
108
108
|
#### 07-minimum-complexity-threshold
|
|
@@ -133,7 +133,7 @@ Inbound adapters (`cli/`, `http/`, `grpc/`) are entry points and do not need to
|
|
|
133
133
|
|
|
134
134
|
#### 10-mock-file-strategy
|
|
135
135
|
|
|
136
|
-
When a mock implementation needs to be **reused across multiple tests or imported by an eval script** (e.g. `eval.py` using `mock_fixtures` from [agentme-edr-
|
|
136
|
+
When a mock implementation needs to be **reused across multiple tests or imported by an eval script** (e.g. `eval.py` using `mock_fixtures` from [agentme-edr-152](152-ai-test-types-taxonomy.md) rule `02`), define it in a dedicated `_mock` file rather than inline.
|
|
137
137
|
|
|
138
138
|
**When to use a `_mock` file vs inline:**
|
|
139
139
|
- Single-test use → define the mock inline inside the test file (per rule `09` example; no file needed)
|
|
@@ -149,7 +149,7 @@ When a mock implementation needs to be **reused across multiple tests or importe
|
|
|
149
149
|
| `order_service.ts` | `order_service_mock.ts` |
|
|
150
150
|
| `user_store.go` | `user_store_mock_test.go` |
|
|
151
151
|
|
|
152
|
-
**Placement:** follows the project's test file placement convention per [agentme-edr-
|
|
152
|
+
**Placement:** follows the project's test file placement convention per [agentme-edr-122](122-unit-test-requirements.md) rule `04`:
|
|
153
153
|
- Co-located test convention (TypeScript, Go) → mock file in the same directory as the source file
|
|
154
154
|
- Separate test folder convention (Python) → mock file mirrors the source path under the test folder (e.g. `lib/src/<pkg>/adapters/connectors/user-db/client.py` → `lib/tests/<pkg>/adapters/connectors/user-db/client_mock.py`)
|
|
155
155
|
|
|
@@ -160,6 +160,6 @@ When a mock implementation needs to be **reused across multiple tests or importe
|
|
|
160
160
|
## References
|
|
161
161
|
|
|
162
162
|
- [agentme-edr-016](../principles/016-cross-language-module-structure.md) — Defines the module-root structure (Makefile, dist/, .cache/) that wraps this internal layout
|
|
163
|
-
- [agentme-edr-
|
|
164
|
-
- [agentme-edr-
|
|
165
|
-
- [agentme-edr-
|
|
163
|
+
- [agentme-edr-121](121-coding-best-practices.md) — File size limits and code organization practices that complement this architecture
|
|
164
|
+
- [agentme-edr-122](122-unit-test-requirements.md) — Rule `04`: test file placement convention per language (governs `_mock` file placement in rule `10`)
|
|
165
|
+
- [agentme-edr-152](152-ai-test-types-taxonomy.md) — Rule `02`: `mock_fixtures` golden dataset envelope that drives `_mock` usage in eval scripts
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agentme-edr-policy-127-external-system-adapter-skills
|
|
3
|
+
description: Defines how agents must approach reading or mutating data in external systems (priority order, credential handling, browser configuration, mutation safety) and what constraints apply when encoding that knowledge as reusable adapter skills. Use when automating any interaction with an external system or when authoring adapter skills for a system.
|
|
4
|
+
apply-to: All automation tasks that read from or write to external systems; all adapter skill authoring
|
|
5
|
+
valid-from: 2026-08-04
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# agentme-edr-policy-127: External system adapter skills
|
|
9
|
+
|
|
10
|
+
## Context and Problem Statement
|
|
11
|
+
|
|
12
|
+
When automating tasks that interact with external systems (SaaS tools, REST APIs, internal platforms), agents face recurring decisions: which integration channel to use, how to handle credentials, and how to capture accumulated system knowledge so it can be reused.
|
|
13
|
+
|
|
14
|
+
How should agents approach external system interaction, and how should that knowledge be encoded as reusable skills?
|
|
15
|
+
|
|
16
|
+
## Decision Outcome
|
|
17
|
+
|
|
18
|
+
Use a priority-ordered integration approach — always leveraging the user's existing session context — and encode system-specific interaction knowledge as business-logic-free adapter skills.
|
|
19
|
+
|
|
20
|
+
Rules 01–04 govern **runtime behavior** (an agent executing a task against an external system). Rule 05 governs **authoring** (a skill author writing an adapter skill).
|
|
21
|
+
|
|
22
|
+
### Details
|
|
23
|
+
|
|
24
|
+
#### 01-approach-priority-order
|
|
25
|
+
|
|
26
|
+
Agents MUST attempt the following approaches in order, stopping at the first that is feasible:
|
|
27
|
+
|
|
28
|
+
1. **API via curl** — If the system exposes an API, interact with it directly using the `curl` CLI. Another HTTP client MAY be used only when `curl` is insufficient for the specific operation (e.g. streaming, binary upload).
|
|
29
|
+
2. **Playwright UI scraping** — If no API is available or the user cannot provide an API credential, use the `playwright` CLI (via `npx -y --package=@playwright/cli@latest playwright-cli`) to interact with the system's UI using the user's existing browser profile (see rule 03). Another browser automation tool MUST NOT be used.
|
|
30
|
+
3. **Git clone** — If the target data is read-only and lives in a git repository, clone the repository locally and read from the local path. For private repositories, follow [agentme-edr-124](124-secrets-management.md) to retrieve the PAT or SSH key from the native keychain.
|
|
31
|
+
4. **Local folder** — As a last resort, ask the user to provide a path to a local folder containing the relevant data.
|
|
32
|
+
|
|
33
|
+
When a higher-priority approach is attempted and fails, the failure reason MUST be stated before trying the next approach.
|
|
34
|
+
|
|
35
|
+
#### 02-api-credential-handling
|
|
36
|
+
|
|
37
|
+
API credentials (keys, tokens, passwords) MUST be stored and retrieved using the native OS keychain following [agentme-edr-124](124-secrets-management.md). Agents MUST NOT hardcode, log, or persist credentials to disk. When a required credential is absent, agents MUST prompt the user to store it via the `setup-secrets` Makefile target before proceeding.
|
|
38
|
+
|
|
39
|
+
#### 03-playwright-browser-config
|
|
40
|
+
|
|
41
|
+
When using Playwright, agents MUST run the `playwright` CLI via `npx -y --package=@playwright/cli@latest playwright-cli` and MUST use the user's existing browser profile to preserve SSO sessions, CA certificates, cookies, and extensions that the target system depends on.
|
|
42
|
+
|
|
43
|
+
- MUST use `--user-data-dir` pointing to the user's active browser profile directory, or attach to a running browser instance via CDP.
|
|
44
|
+
- MUST NOT launch a blank, incognito, or freshly provisioned profile.
|
|
45
|
+
- MUST keep the browser window visible throughout the interaction so the user can follow and intervene.
|
|
46
|
+
- SHOULD prefer CDP attachment to an already-running browser over launching a new instance, when the browser is already open.
|
|
47
|
+
|
|
48
|
+
When the `playwright` CLI is technically insufficient for a required integration capability (e.g., network response interception, which the CLI does not expose), the Playwright Node.js API MAY be used instead. The justification MUST be documented in a `## Conflicts` section within the adapter skill, following the same format used in Policy conflict declarations (citing the policy rule being overridden, the reason, and the mitigations applied).
|
|
49
|
+
|
|
50
|
+
#### 04-human-in-the-loop-before-mutations
|
|
51
|
+
|
|
52
|
+
Before executing any write, mutate, or delete operation on an external system, agents MUST present a plain-language summary containing at minimum:
|
|
53
|
+
|
|
54
|
+
- **System:** name and environment (e.g. "ServiceNow production")
|
|
55
|
+
- **Operation:** what action will be taken
|
|
56
|
+
- **Fields/values:** which fields will be changed and to what values
|
|
57
|
+
- **Estimated impact:** a brief statement of what the change will affect
|
|
58
|
+
|
|
59
|
+
Agents MUST wait for explicit user confirmation before proceeding. Read-only and query operations do not require confirmation.
|
|
60
|
+
|
|
61
|
+
#### 05-adapter-skill-no-business-logic
|
|
62
|
+
|
|
63
|
+
Adapter skills MUST be pure I/O bridges between the agent and the external system. They MUST NOT contain business rules, domain decisions, validation logic, or application-layer concerns, which belong in the application or workflow layer following [agentme-edr-126](126-pragmatic-hexagonal-architecture.md).
|
|
64
|
+
|
|
65
|
+
An adapter skill SHOULD provide only: session setup, navigation, field interaction, and response parsing specific to the target system.
|
|
66
|
+
|
|
67
|
+
#### 06-connector-skill-naming
|
|
68
|
+
|
|
69
|
+
A skill that serves as a base to connect to an external system via API, UI scraping, or file access MUST have a name ending with `-connector` (e.g. `servicenow-connector`, `sap-api-connector`).
|
|
70
|
+
|
|
71
|
+
#### 07-connector-known-issues-section
|
|
72
|
+
|
|
73
|
+
Every connector skill MUST contain a `## Known Issues` section documenting previous problems encountered when using that connector and how to overcome them. This section is read by running agents at execution time to self-correct without human intervention. Each entry SHOULD follow this structure:
|
|
74
|
+
|
|
75
|
+
- **Symptom:** observable sign that the problem has occurred
|
|
76
|
+
- **Cause:** brief explanation of the root cause
|
|
77
|
+
- **Fix:** concrete steps the agent MUST take to resolve the issue
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
#### guidance
|
|
82
|
+
|
|
83
|
+
> Non-normative. The following is illustrative guidance, not a requirement.
|
|
84
|
+
|
|
85
|
+
Adapter skills for a given system benefit from layering so that knowledge at each level can be activated and reused independently:
|
|
86
|
+
|
|
87
|
+
- **Base skill (connector)** — Session setup, authentication, system overview, and top-level screen or API structure. MUST follow the `-connector` naming rule (rule 06) and MUST include a `## Known Issues` section (rule 07). This skill gives the agent enough context to orient itself in the system. Examples: `servicenow-connector` (login, workspace layout, navigation patterns), `sap-api-connector` (base URL, API key retrieval, OpenAPI spec location).
|
|
88
|
+
- **Domain skill** — A specific feature area, building on the base skill. Examples: `servicenow-incidents` (incident concept, workspace, field structure), `sap-api-mutations` (confirmation procedures, human-in-the-loop steps per rule 04).
|
|
89
|
+
- **Operation skill** — A specific action within a domain, building on the domain skill. Examples: `servicenow-incidents-change` (open an incident, edit fields, click action buttons, handle known errors), `servicenow-vulnerabilities` (filter, triage, export).
|
|
90
|
+
|
|
91
|
+
The depth of the hierarchy is discretionary. A simple system may need only a base skill. Complex systems benefit from the full three-layer structure. Higher-level skills SHOULD activate their lower-level dependencies explicitly at the start of their instructions.
|
|
92
|
+
|
|
93
|
+
When creating adapter skills for a new system, document the chosen integration approach (rule 01) in the skill's frontmatter description, follow the `-connector` naming convention (rule 06) for the base skill, and populate the `## Known Issues` section (rule 07) as experience accumulates. All system-specific adapter skills SHOULD be placed in the `_local` scope of the consuming project.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: agentme-edr-policy-
|
|
3
|
-
description: Defines the standard framework, provider configuration, observability approach, and LLM mocking patterns for simple LLM calls in Python. Use when building, reviewing, or scaffolding any code that makes direct LLM calls using LangChain, manages prompt context, or handles conversation history. For agentic patterns see agentme-edr-
|
|
2
|
+
name: agentme-edr-policy-141-ai-llm-development-standards
|
|
3
|
+
description: Defines the standard framework, provider configuration, observability approach, and LLM mocking patterns for simple LLM calls in Python. Use when building, reviewing, or scaffolding any code that makes direct LLM calls using LangChain, manages prompt context, or handles conversation history. For agentic patterns see agentme-edr-142, for workflow patterns see agentme-edr-144.
|
|
4
4
|
apply-to: Python projects that make direct LLM calls, manage prompt context, or handle conversation threads
|
|
5
5
|
valid-from: 2026-06-05
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# agentme-edr-policy-
|
|
8
|
+
# agentme-edr-policy-141: AI LLM development standards
|
|
9
9
|
|
|
10
10
|
## Context and Problem Statement
|
|
11
11
|
|
|
@@ -29,7 +29,7 @@ Three distinct tiers of LLM-based computation are recognized in this policy. Eve
|
|
|
29
29
|
|
|
30
30
|
These tiers nest: in general, a Workflow may contain Agent nodes; an Agent uses LLM calls internally. The tier of a component is determined by its outermost controlling structure.
|
|
31
31
|
|
|
32
|
-
See [agentme-edr-
|
|
32
|
+
See [agentme-edr-142](142-ai-agents-development-standards.md) for Agent implementation standards and [agentme-edr-144](144-ai-workflow-development-standards.md) for Workflow implementation standards.
|
|
33
33
|
|
|
34
34
|
### Details
|
|
35
35
|
|
|
@@ -44,7 +44,7 @@ Every component that interacts with an LLM MUST be classified as exactly one of
|
|
|
44
44
|
**Function calling boundary:**
|
|
45
45
|
|
|
46
46
|
- A **single** function call decided by the LLM (e.g., "call get_weather(location)") is still an LLM-tier interaction if the function is called once and the result is returned to the user.
|
|
47
|
-
- An **iterative** function-calling loop where the LLM observes results and decides next actions autonomously is an Agent (see [agentme-edr-
|
|
47
|
+
- An **iterative** function-calling loop where the LLM observes results and decides next actions autonomously is an Agent (see [agentme-edr-142](142-ai-agents-development-standards.md)).
|
|
48
48
|
|
|
49
49
|
#### 02-llm-framework
|
|
50
50
|
|
|
@@ -71,7 +71,7 @@ llm = ChatOpenAI(
|
|
|
71
71
|
Enable LangChain auto-tracing at every application entry point by calling `mlflow.langchain.autolog()` during startup, before any LLM call is made.
|
|
72
72
|
|
|
73
73
|
- This captures inputs, outputs, token counts, and latency for every LangChain chain or runnable automatically.
|
|
74
|
-
- The project Makefile MUST expose a `dev-mlflow` target to start a local MLflow tracking server for development inspection, per [agentme-edr-
|
|
74
|
+
- The project Makefile MUST expose a `dev-mlflow` target to start a local MLflow tracking server for development inspection, per [agentme-edr-303](../platform/303-common-targets.md) rule `09-ai-project-dev-targets`.
|
|
75
75
|
|
|
76
76
|
#### 04-unit-test-mocking
|
|
77
77
|
|
|
@@ -213,11 +213,11 @@ Return a JSON object with:
|
|
|
213
213
|
|
|
214
214
|
## References
|
|
215
215
|
|
|
216
|
-
- [agentme-edr-
|
|
217
|
-
- [agentme-edr-
|
|
218
|
-
- [agentme-edr-
|
|
219
|
-
- [agentme-edr-
|
|
220
|
-
- [agentme-edr-
|
|
221
|
-
- [agentme-edr-
|
|
222
|
-
- [agentme-edr-
|
|
223
|
-
- [agentme-edr-
|
|
216
|
+
- [agentme-edr-142](142-ai-agents-development-standards.md) — Agent implementation standards (deepagents, tool-invocation loops)
|
|
217
|
+
- [agentme-edr-144](144-ai-workflow-development-standards.md) — Workflow implementation standards (LangGraph, MLflow run-level tracking)
|
|
218
|
+
- [agentme-edr-122](122-unit-test-requirements.md) — Unit test requirements including external API mocking guidance
|
|
219
|
+
- [agentme-edr-103](103-python-project-tooling.md) — Python project tooling and structure
|
|
220
|
+
- [agentme-edr-501](../governance/501-project-quality-standards.md) — Project quality standards including AI-tier testing requirements (rule `09-ai-project-testing-requirements`)
|
|
221
|
+
- [agentme-edr-151](151-ai-eval-standards.md) — AI eval core standards: eval folder structure (rule `01`) and LLM-as-judge binary scoring contract (rule `02`)
|
|
222
|
+
- [agentme-edr-153](153-ai-eval-script.md) — AI eval script: entry-first loop, `--type` filtering, `mock_fixtures`, and MLflow conventions
|
|
223
|
+
- [agentme-edr-154](154-ai-eval-report-format.md) — AI eval report format: `report-<type>.md` template, Wilson CI, and convergence analysis
|