# Team Collaboration

Because `.forge/` is git-committed, Forge is a team tool by default. Teammates share specs, changes, config, and memory by pushing and pulling, and every action on a change is attributed to the person who ran it.

## Sharing through git

`.forge/` lives in the repo, so pushing and pulling shares specs, changes, config, and memory with the rest of the team.

- **`memory.team_sync`** exports memory as committable, deduplicated chunks. It is on by default when the repo has a remote, so shared memory travels with the code.
- **`config.yaml`** is the shared configuration, committed for everyone.
- **`config.local.yaml`** is per-machine and gitignored — your local overrides never leak into the team's config.

::: info Shared vs. local
Put team decisions in `config.yaml`; keep machine- or person-specific settings in `config.local.yaml`. The split keeps the shared config clean and reproducible.
:::

## Attribution

Every [session-timeline](/harness/timeline) event is stamped with the git identity that ran it. The actor is resolved in order:

```text
FORGE_ACTOR (env)
  → git config user.name  (with email as "Name <email>")
  → USER
  → "unknown"
```

So on a shared repo you can always see who did what — including which teammate a verify verdict, a breaker trip, or a spend record belongs to.

## Contributor rollup

Each change shows its distinct contributors, deduplicated and sorted from the timeline actors:

- a **`👥 <names>`** chip on the [dashboard](/features/dashboard) card and detail page,
- a **`contributors:`** line in the TUI Project Status screen.

## Example timeline with two contributors

```text
$ forge trace show --change checkout
[1] 2026-07-15T09:02:11Z note   — change opened: checkout redesign  · María (backend)
[2] 2026-07-15T09:14:52Z tool   — agent tool use                    · Claude (agent)
[3] 2026-07-15T09:31:40Z verify — Verdict: FAIL (1/3)                · Claude (agent)
[4] 2026-07-15T09:48:19Z verify — Verdict: PASS (streak reset)       · María (backend)
```

Here the change's contributor rollup would read `👥 María, Claude`.

::: tip Force a specific actor in CI
Set `FORGE_ACTOR` when the git identity is not the real author — for example in a CI job or a shared automation account — so timeline attribution stays meaningful.
:::

## Next steps

- [The session timeline](/harness/timeline) — the per-event log every actor is stamped onto.
- [Spec-Viewer Dashboard](/features/dashboard) — where the contributor rollup chip renders.
- [Project memory](/concepts/memory) — what `memory.team_sync` shares across the team.
- [The forge CLI](/reference/cli) — `forge trace show` and the commands that write timeline events.
