Are the planets in the TRAPPIST-1 system so close that inhabitants on one planet could see surface details on the other planets? In a discussion below the Space Exploration question Are there any to-scale diagrams of the TRAPPIST-1 system I was invited to ask a question like this, so I have.

Question: Are the planets in the TRAPPIST-1 system so close that inhabitants on one planet could see surface details on the other planets? How big would each planet appear from each of the other planets during conjunction or opposition? Bigger than Earth's moon?
Are the planets in the TRAPPIST-1 system so close that inhabitants on one planet could see surface details on the other planets?

Yes!

How big would each planet appear from each of the other planets during conjunction or opposition? Bigger than Earth's moon?

For some combinations, definitely!
Here's a diagram of the size of each of the planets as seen from each of the other planets. I've taken the semi-major axes and planet radii from a table in Wikipedia and used the Python script below to show the apparent sizes at conjunction or opposition. The axes are labeled in degrees and the largest case is 1.28 degrees or 2.5 times the apparent size of the Moon from Earth!
   a (Gm)        R (km)
b:  1.73          7150
c:  2.37          6984
d:  3.33          5000
e:  4.38          5804
f:  5.76          6671
g:  7.01          7322
h:  9.27          4930

For example, the top row shows the largest possible size of planets c through h from planet b. The black dots indicate the planet with itself.

import numpy as np
import matplotlib.pyplot as plt

data = (('b', 1.73, 7150), ('c', 2.37, 6984), ('d', 3.33, 5000),
        ('e', 4.38, 5804), ('f', 5.76, 6671), ('g', 7.01, 7322),
        ('h', 9.27, 4930)) # https://en.wikipedia.org/wiki/TRAPPIST-1#Planetary_system_data_charts

class Planet(object):
    def __init__(self, name, a_Gm, r_km):
        self.name = name
        self.a    = 1E+09 * a_Gm
        self.r    = 1E+03 * r_km

halfpi, degs = 0.5*np.pi, 180/np.pi

planets = []
for thing in data:
    planets.append(Planet(*thing))

arc      = np.vstack([f(np.linspace(halfpi, -halfpi, 201)) for f in (np.cos, np.sin)])
f        = np.array([-1.0, 1.0])[:, None]
c        = np.array([+0.8, 1.0])[:, None]
full     = np.hstack((arc, f*arc[:, -2::-1]))
crescent = np.hstack((arc, c*arc[:, -2::-1]))

all_sizes = []
for p in planets:
    p.arcs = []
    for pp in planets:
        if pp == p:
            p.arcs.append(None)
        else:
            size = 2*pp.r/(pp.a-p.a)
            all_sizes.append(abs(size))
            if size &gt; 0:
                p.arcs.append(size*full)
            else:
                p.arcs.append(size*crescent)

max_size = max(all_sizes)
print('max_size: ', max_size)

if True:
    plt.figure()
    for (i, p) in enumerate(planets):
        y0 = -max_size * degs * i
        for (j, arc) in enumerate(p.arcs):
            x0 = max_size * degs * j
            if type(arc) is type(None):
                plt.plot([x0], [y0], 'ok', markersize=6)
            else:
                x, y = degs*arc
                plt.plot(x+x0, y+y0)
    plt.gca().set_aspect('equal')
    plt.show()